1. ホーム
  2. mysql

[解決済み] シェルスクリプトからMySQLコマンドを実行するには?

2022-05-02 07:33:40

質問内容

シェルスクリプトでSQLコマンドを実行し、自動化するにはどうすればよいですか?

SQLファイルに蓄積したデータをシェルスクリプトで復元したい。サーバーに接続してデータを復元したい。SSHコマンドラインから別途実行すると動作します。

私が使っているコマンドはこれです。

mysql -h "server-name" -u root "password" "database-name" < "filename.sql"

これは、ファイルを作成するシェルスクリプトのコードです。 ds_fbids.sql を作成し、それをmysqlにパイプします。

perl fb_apps_frm_fb.pl
perl fb_new_spider.pl ds_fbids.txt ds_fbids.sql
mysql -h dbservername -u username -ppassword dbname < ds_fbids.sql

正しい方法は何ですか?

どのように解決するのですか?

を使用する必要があります。 -p フラグを使用して、パスワードを送信します。 との間にスペースを入れてはならないので、厄介です。 -p とパスワードを入力します。

$ mysql -h "server-name" -u "root" "-pXXXXXXXX" "database-name" < "filename.sql"

の後にスペースを入れると -p を指定すると、mysql クライアントは対話的にパスワードの入力を促し、次のコマンド引数をデータベース名として解釈します。

$ mysql -h "server-name" -u "root" -p "XXXXXXXX" "database-name" < "filename.sql"
Enter password: <you type it in here>
ERROR 1049 (42000): Unknown database 'XXXXXXXX'

実は、ユーザーとパスワードを ~/.my.cnf に保存しておくと、コマンドライン上に置く必要が全くないので、好都合なのです。

[client]
user = root
password = XXXXXXXX

次に

$ mysql -h "server-name" "database-name" < "filename.sql"


コメントについて

私は上記のようなバッチモードのmysqlコマンドをコマンドラインとシェルスクリプトでいつも実行しています。 正確なスクリプトやエラー出力が共有されていないので、あなたのシェルスクリプトの何が問題なのかを診断することは困難です。 元の質問を編集して、何が間違っているのかの例を示すことをお勧めします。

また、私はシェルスクリプトのトラブルシューティングを行う際に -x というフラグを立てると、各コマンドの実行状況を確認することができます。

$ bash -x myscript.sh