mysql CLIからmysqldumpドキュメントをエクスポートおよびインポートする

mysql CLIからmysqldumpドキュメントをエクスポートおよびインポートする

次のコードは、名前付きデータベースユーザーとデータベースインスタンス(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

また、このコードには何かが欠けています。

  1. ${domain}mysqldumpにエクスポートします{$domain}.sql
  2. ${domain}.sqltestmysqldumpを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

おすすめ記事