Mysqlクエリをbashを使用して1行で実行する必要があります。
次のようになります。
mysql database --user='root' --password='my-password' < query.file
ただし、< query.file
の代わりに、次のような生のクエリを使用します。
mysql database --user='root' --password='my-password' < UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;
それは可能ですか?
試しましたか
mysql -u root -pmy_password -D DATABASENAME -e "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" > output.txt
(> output.txt
の部分は無視できますが、ファイルを見て実行されたステートメントによって何が返されたかを確認すると便利です。)
使用 -e
オプション:
$ mysql -e "UPDATE ..."
echo
とパイプを使用します。
echo "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111;" | mysql database --user='root' --password='my-password'
コマンドでパスワードを書き込むことは一般的には悪い考えです(人々は肩越しにパスワードを読むことができ、おそらくシェルの履歴に保存されるなど)。しかし、資格情報をファイルに入れることができます。ファイルに.
で始まる名前を付けると、ファイルが非表示になり、より安全になります。
# .db.conf
[client]
database=myDatabase
user=myUserName
password=myPassWord
あなただけがファイルを読むことができることを確認してください:
chmod 600 .db.conf
次に、MySQLを次のように呼び出します。
mysql --defaults-extra-file=.db.conf -e "UPDATE database SET field1 = '1' WHERE id = 1111;"
または:
echo "UPDATE database SET field1 = '1' WHERE id = 1111;" | mysql --defaults-extra-file=.db.conf
--defaults-extra-file
がmysql
に提供される最初のオプションである必要があることに注意してください。
これを本番環境で実行している場合、dbの詳細を公開しないように、最初にmysqlシェルにログインすることをお勧めします。
シェルにログインしたら、prepared.sqlファイルを使用しないのはなぜですか?
mysql -uユーザー-p
次に、ユーザーパスワードを入力します
これでシェルにログインし、ここからコマンドを安全に実行できます:
mysql> DBNAMEを使用mysql> SOURCE file.sql
これは、パスワードがログに表示されないようにするために、データベースでコマンドラインを操作する方法です。
構文とアプローチはファイルリダイレクトに似ているため、通常はTriple lessよりも優先されます。履歴に戻ってクエリを変更するのは簡単
mysql database --user='root' --password='my-password' <<< "UPDATE `database` SET `field1` = '1' WHERE `id` = 1111"
これはbashではHere Stringsと呼ばれています。それらの詳細については、こちらをご覧ください http://linux.die.net/abs-guide/x15683.html
文字列をコマンドにパイプしたい場合に便利です。