シェルスクリプトから、MySQLデータベースにテーブルが存在するかどうかを確認するにはどうすればよいですか?


8

ユーザーがテーブルで必要な操作を選択できるスクリプトを作成しようとしています。テーブルが存在するかどうかを確認したい。存在する場合は他の処理を続行するか、テーブルが存在しないと終了します。どうすればこれを達成できますか?

回答:


12
if [ $(mysql -N -s -u root -p -e \
    "select count(*) from information_schema.tables where \
        table_schema='db_name' and table_name='table_name';") -eq 1 ]; then
    do something
else
    echo "table <table_name> does not exist"
    exit 1
fi
  • -N 列名をスキップするには
  • -s 非表形式出力用

2
スクリプトを停止してパスワードの入力を求めずにMySQLにログインするに.my.cnfは、ホームディレクトリにファイルを作成し、[client]を含むブロックを追加しますpassword="my_password"。マニュアルのユーザーオプションファイルに関するセクションをご覧ください。
Ladadadada

4

MySQLでは、シェルから-eを使用できます。

mysql -e "desc main_db.clients" > /dev/null 2>&1
echo $?

3

mysqlクライアントの実行とmysqlサーバーへのログインを含まないメソッドが必要な場合は、次のようにできます。

if ls -l /var/lib/mysql/database/table.frm 2> /dev/null > /dev/null
then
  echo Table exists
else
  echo Table does not exist
fi

1行目のデータディレクトリへのパス、データベース名、テーブル名を置き換える必要があります。

注意事項:

  1. InnoDBを使用してて、innodb-file-per-tableを使用していない場合、これは機能しません。つまり、スクリプトはテーブルが存在しても存在しないと言うことができます。
  2. ファイルシステムを使用してテーブルをコピーしたり、MyISAMからInnoDBに切り替えたりするなど、さまざまな理由でそのファイルが存在する可能性があります。つまり、スクリプトは、テーブルが存在しなくても存在すると言うことができます。

上記の理由により、これはすでに提示されている他の方法ほど信頼性が高くありませんが、mysqlクライアントを回避するため、価値があるかもしれません。

ここで紹介するすべての方法は、独自の権限(ファイルシステムまたはMySQL)を正しく取得することに依存していることに注意してください。あなたがそれらを間違えれば、あなたはおそらく偽陰性を得るでしょう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.