mysqlコマンドラインにパスワードを渡す方法

mysqlコマンドラインにパスワードを渡す方法

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="" 

関連情報