空のルートパスワードを持つmysqlサーバーがあります。次のようにパスワードを指定せずに、シェルスクリプトでいくつかのsqlステートメントを実行します。
config.sh:
MYSQL_ROOT="root"
MYSQL_PASS=""
mysql.sh
source config.sh
mysql -u$MYSQL_ROOT -p$MYSQL_PASS -e "SHOW DATABASES"
-pオプションと空のパスワードを使用してシェルでそのSQLを自動実行するにはどうすればよいですか?
これを試して:
if [ $MYSQL_PASS ]
then
mysql -u "$MYSQL_ROOT" -p"$MYSQL_PASS" -e "SHOW DATABASES"
else
mysql -u "$MYSQL_ROOT" -e "SHOW DATABASES"
fi
あなたは書ける
mysql -u "$MYSQL_ROOT" -p "$MYSQL_PASS" -e "SHOW DATABASES"
空の文字列を個別の引数として渡す。ただし、以下のコメントは、クライアントが引き続きパスワードを要求することを示しています。おそらく、空の引数をパスワードではなくデータベース名として解釈します。そのため、代わりに以下を試すことができます。
mysql --user="$MYSQL_ROOT" --password="$MYSQL_PASS" -e "SHOW DATABASES"
ただし、少なくとも私のシステムでは、この場合MYSQL_PASS
to ""
を設定すると、クライアントはwithoutにパスワードを接続しようとします。すべて。したがって、空のパスワードとパスワードがまったくない場合に違いがある場合、コマンドラインで前者を渡す方法がわかりません。
ただし、方法があったとしても、代わりに~/.my.cnf
ファイルを使用することをお勧めします。コマンドラインの引数は、おそらくps -A -ocmd
によって生成されるプロセスリストに含まれているため、他のユーザーがそれらを見ることができます。一方、.my.cnf
ファイルは、(chmod 0600 ~/.my.cnf
を使用して)自分だけが読み取り可能にする必要があり(またそうする必要があります)、自動的に使用されます。そのファイルに次の行を含めます。
[client]
user=root
password=
その後、クライアントはそのファイルから資格情報を取得するため、単純なmysql -e "SHOW DATABASES"
で十分です。
6.1.2.1を参照してください。パスワードを提供できるさまざまな方法、およびそれぞれの利点と欠点については、パスワードセキュリティのエンドユーザーガイドライン 。 4.2.3.3を参照してください。この.my.cnf
ファイルの一般情報については、オプションファイルの使用
MvGが提案したように(MySQLマニュアルで推奨 4.2.2接続 および 6.1.2.1セキュリティガイドライン )、ファイルを使用する必要があります。コマンドラインのパスワードは、psが他のユーザーに表示する可能性があるため、安全ではない場合があります。ファイルは.my.cnfである必要はなく、一時ファイル内のスクリプトのアドホックオプションファイルにすることができます。
OPTFILE="$(mktemp -q --tmpdir "${inname}.XXXXXX")$"
trap 'rm -f "$OPTFILE"' EXIT
chmod 0600 "$OPTFILE"
cat >"$OPTFILE" <<EOF
[client]
password="${MYSQL_PASS}"
EOF
mysql --user="$MYSQL_ROOT" --defaults-extra-file="$OPTFILE" -e "SHOW DATABASES"
最初の行は安全な一時ファイルを作成し、オプションを追加して使用します。 trapは、割り込みが発生した場合にOPTFILEが形成されるのを防ぎます。
シェルが開き、クエリを手動で実行できます。とても便利。
#!/bin/bash
DB_USER='your_db_username'
DB_PASS='your_password'
DB='database_name'
echo 'logging into db $DB as $DB_USER'
mysql -u "$DB_USER" --password="$DB_PASS" --database="$DB"
Debian GNU/Linuxディストリビューションには、/etc/mysql/debian.cnf
というファイルがあります。 MySQL root
資格情報を使用して別のファイルを作成する必要はありません。
# Put in your .bashrc
alias mysql='mysql --defaults-file=/etc/mysql/debian.cnf'
alias mysqldump='mysqldump --defaults-file=/etc/mysql/debian.cnf'