
foo.php
たとえば、MySQLパスワードP455w0rd
を使用しようとすると、ファイルにMySQLパスワードを保存します。
$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)
$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)
どちらのオプションもまだパスワードが必要です。パスワードを送信する正しい方法は何ですかstdin
?
答え1
クライアントユーティリティは、mysql
またはオプションを使用してコマンドラインからパスワードを取得できます。-p
--password=
使用する場合は、-p
オプション文字の後にスペースを入れてはいけません。
$ mysql -pmypassword
私は独自の文書化機能を持っているので、スクリプトの長いオプションを好む。
mysql --password=mypassword --user=me --host=etc
答え2
パスワードをコマンドラインに渡す方法には非常に注意する必要があります。注意しなければ結局ps
。
最も安全な方法は、新しい設定ファイルを作成するか、コマンドラインオプションをmysql
使用して渡すことです。--defaults-file=
--defaults-extra-file=
2つの違いは、デフォルトの構成ファイルに加えて後者が読み取られるのに対し、前者の場合は引数として渡されたファイルのみが使用されることです。
追加の構成ファイルには、次のようなコンテンツを含める必要があります。
[client]
user=foo
password=P@55w0rd
このファイルを安全に保管してください。
次に、次を実行します。
mysql --defaults-extra-file=<path to the new config file> [all my other options]
答え3
~/.my.cnf ファイルを作成し、自分だけがアクセスできるように設定し、権限を 600 に設定します。
[client]
user=myuser
password=mypassword
これでパスワードを再入力する必要はありません。
bash$ mysql -u myuser mydatabase
mysql>
答え4
@maxschlepzigがコメントで言ったように、
-p を指定しない場合、mysql は MYSQL_PWD 環境変数を読み込みます。
だからバッシュでは:
read -s -p "Enter the mysql password for $DBUSER @ $DBNAME: " DBPASS
export MYSQL_PWD="$DBPASS"
mysqldump -u $DBUSER $DBNAME > dump.sql
# once you are done
export MYSQL_PWD=""