web-dev-qa-db-ja.com

パスを入力してmysqlスクリプトを実行するためのshスクリプト

可能であればメッセージEnter your $root passwordを使用して、コマンドラインから動的にパスワードを入力するように求められるmysqlスクリプトを実行したいと思います。ただし、期待どおりに機能しません。これまでのところ

mysql -u root -p CREATE DATABASE IF NOT EXISTS Test

さらに、データベースが作成されたときにmysqlからログアウトしてbashコマンドに戻る方法は?

3
Jocky Doe

docs

mysql -u root -p --execute="SELECT User, Host FROM mysql.user"

パスワードの入力を求め、指定されたコマンドを実行し、シェルに戻ります(ログアウトは不要です)。

代わりに独自のプロンプトが必要な場合は、スクリプトを作成する必要があります。

#!/usr/bin/env bash

echo "Enter pwd"
read pwd
mysql -u root -p$pwd --execute="SELECT User, Host FROM mysql.user"

mysql-pをデータベースの名前と見なすため、$pwd$pwdの間にスペースがあってはならないことに注意してください。

mysql -pが代わりにアスタリスクを表示するのに対し、端末ではパスワードがクリアテキストで表示されるため、お勧めしません。

7
PerlDuck

MySQLクエリのスクリプトは、いくつかの方法で実行できます。 PerlDuckの答え は既に-eまたは--executeパラメーターに触れています。別の方法は、MySQL自体からsourceコマンドを使用してSQLスクリプトを実行することです。

$ mysql -u root -p -e 'source foo.sql'
Enter password:
+------+-------------+
| a    | b           |
+------+-------------+
|    1 | hello world |
+------+-------------+
$ cat foo.sql
use foo_db;
SELECT * FROM foo_tb;

別の方法は、スクリプトをmysqlstdinにリダイレクトすることです。

$ Sudo mysql -u root -p < foo.sql
Enter password:
a   b
1   hello world

それぞれの場合のフォーマットの違いに注意してください。もちろん、 here-docまたはherestring を使用して同じ結果を達成することもできますが、テキストファイルを使用すると長いクエリを実行できますが、here-docsとhere-stringsは中程度の短いステートメントに便利です。

1