次のコードは、名前付きデータベースユーザーとデータベースインスタンス(test
両方が存在する場合)を削除し、権限を持つすべての権限を持つデータベースユーザーとtest
同じ名前(と同じ)を持つデータベースインスタンスを作成します。
mysql -u root -p <<-MYSQL
DROP user IF EXISTS 'test'@'localhost'; SELECT user FROM mysql.user;
DROP database IF EXISTS test; show databases;
CREATE user 'test'@'localhost' IDENTIFIED BY '${psw}';
CREATE database test;
GRANT ALL PRIVILEGES ON test.* TO test@localhost;
MYSQL
また、このコードには何かが欠けています。
${domain}
mysqldumpにエクスポートします{$domain}.sql
。${domain}.sql
test
mysqldumpをDBデータベースにインポートします。
この2つのタスクをどのように追加できますか?~へここに文書がありますか?私は彼らがheredocumentの外で他のことをしたくありません(ユーザー名とパスワードを入力し続ける必要があります)。代わりに、最後のGRANTクエリの直後にheredocument内で通常のmysqlクエリとして必要です。
答え1
1.輸出
残念ながら、MySQLシェルデータベースの内容をダンプできません。MySQLダンプこれは真であるため、1回の呼び出しでSQLクエリを実行してデータベースをダンプすることは不可能です。mysqlまたはMySQLダンプ。しかし、あなたはできます:
ㅏ)ユーザーにデータベースtest
へのアクセスを許可します。${domain}
mysql -u root -p <<-MYSQL
...
GRANT ALL PRIVILEGES ON ${domain}.* TO 'test'@'localhost';
GRANT GRANT OPTION ON ${domain}.* TO 'test'@'localhost';
FLUSH PRIVILEGES;
MYSQL
それから電話してください。
mysqldump -u test -p"${psw}" "${domain}" >domain.sql
最後の呼び出し:
mysql -u test -p"${psw}" <<-MYSQL
REVOKE ALL PRIVILEGES ON ${domain}.* FROM 'test'@'localhost';
REVOKE GRANT OPTION ON ${domain}.* FROM 'test'@'localhost';
MYSQL
パスワードはコマンドラインに渡されるため、再入力する必要はありません。ただし、コマンドラインからパスワードを渡すことは安全ではないため、expect
ユーザー/パスワード設定でmy.cnfを使用または作成し、次のように--defaults-extra-file=
参照することを検討できます。やる気提案。
雨)スクリプトの先頭からルートパスワードを読み、その後のmysql呼び出しでそれを使用できます(これは次のように行われます)。やる気コメント):
read -s -p 'Enter password: ' root_psw
echo
my_cnf=`tempfile -s .cnf -m 400`
echo "[mysql] >${my_cnf}
echo "user=root" >>${my_cnf}
echo "password=${root_psw}" >>${my_cnf}
# Delete the password file after this script finish (even in case of error)
cleanup_my_cnf { rm "${my_cnf}"; }
trap cleanup_my_cnf INT TERM EXIT
mysql --defaults-extra-file="${my_cnf}" <<-MYSQL
...
MYSQL
mysqldump --defaults-extra-file="${my_cnf}" "${domain}" >domain.sql
氏)テーブル構造をダンプしてテーブル名を知る必要がある場合は、SQLを使用できますSHOW CREATE TABLE
。
mysql -u root -p <<-MYSQL
...
use ${domain};
tee domain.dump;
SHOW CREATE TABLE table1;
SHOW CREATE TABLE table2;
MYSQL
しかし、これはとてもカラフルで、後でdomain.dumpを少し編集する必要があります。
2. 輸入
sourceコマンドを使用するのは非常に簡単です(bashと同じ)。
mysql -u root -p <<-MYSQL
...
use test;
source ${domain}.sql;
MYSQL