MySQLユーザーとその権限をバックアップするにはどうすればよいですか?
Mysqldumpのようなものは?
私は次のようなものを探しています:
mysqldump -d -u root -p MyTable > Schema.sql
mysql -BNe "select concat('\'',user,'\'@\'',Host,'\'') from mysql.user where user != 'root'" | \
while read uh; do mysql -BNe "show grants for $uh" | sed 's/$/;/; s/\\\\/\\/g'; done > grants.sql
あなたはmysqlデータベースをバックアップすることができます
mysqldump -u root -p mysql > mysql.sql
実行することでmysqlデータベースを復元します
mysql -uroot -p mysql < mysql.sql
することを忘れないでください
FLUSH PRIVILEGES
ダンプを復元した後。
それが役に立てば幸い...
これまでのところ、MySQLでの私の経験では、コマンドラインからユーザーとその特権をバックアップするものは何もありませんでした。
しかし、mysqlをバックアップすることで、これらの重要なデータをバックアップできます
mysqldump -u root -p mysql > mysql.sql
ユーザーと権限はデータベース名「mysql」に保存されます。 mysqldumpを使用して、テーブルをデータベース名「mysql」にバックアップできます。
Perconaには、このための優れたツールがあります。 pt-show-grants
は、ユーザーとその権限をダンプして、簡単に再読み込みできるようにします。
https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html
上記のスクリプトは一般的なアイデアを提供しますが、非効率的です。彼らはmysqlをn + 1回フォーク/実行しています。 mysqlを2回呼び出すだけで実行できます。
mysql ${logininfo} -B -N -e "SELECT CONCAT('\'',user,'\'@\'',Host,'\'') from user where user != 'root'" mysql | \
while read uh
do
echo "SHOW GRANTS FOR ${uh};"
done | mysql ${logininfo} -B -N | sed -e 's/$/;/' > ${outfile}
Root以外のユーザーがバックアップを使用したくない場合、または最初のmysql呼び出しのwhere句でuser!= 'whatever'を指定します。
毎日のバックアップMySQLユーザーとその特権にスクリプトを使用することをお勧めします。 1つを見てみましょう:
#!/bin/sh
HOSTNAME="localhost"
mysql -h $HOSTNAME -B -N -e "SELECT CONCAT('\'', user,'\'@\'', Host, '\'') FROM user WHERE user != 'debian-sys-maint' AND user != 'root' AND user != ''" mysql > mysql_all_users_$HOSTNAME.txt
while read line; do mysql -h $HOSTNAME -B -N -e "SHOW GRANTS FOR $line"; done < mysql_all_users_$HOSTNAME.txt > mysql_all_users_$HOSTNAME.sql
sed -i.bak 's/$/;/' mysql_all_users_$HOSTNAME.sql
rm mysql_all_users_$HOSTNAME.txt
rm mysql_all_users_$HOSTNAME.sql.bak
このスクリプトの結果は、ユーザーと権限を持つmysqldumpファイルになります。
追伸MySQLにパスワードが必要な場合--p
または-u username -p
後mysql -h $HOSTNAME
2か所。