web-dev-qa-db-ja.com

mysqldumpを使用して、バックアップ目的で読み取り専用のMySQLユーザーを作成するにはどうすればよいですか?

Mysqlデータベースをダンプするためにautomysqlbackupスクリプトを使用していますが、ルートデータベースのパスワードをプレーンテキストファイルに保存しないように、読み取り専用のユーザーにこれを実行してもらいたいです。

私はそのようなユーザーを作成しました:

grant select, lock tables on *.* to 'username'@'localhost' identified by 'password';

mysqldumpを実行すると(automysqlbackupを介して、または直接)、次の警告が表示されます。

mysqldump: Got error: 1044: Access denied for user 'username'@'localhost' to database 'information_schema' when using LOCK TABLES

私はそれを間違っていますか?読み取り専用ユーザーに追加の権限が必要ですか?またはrootのみをロックできますinformation_schema テーブル?どうしたの?

編集:

GAHと今それが動作します。以前にFLUSH PRIVILEGESを実行したことがない可能性があります。

余談ですが、これはどのくらいの頻度で自動的に発生しますか?

編集:

いいえ、機能しません。ランニング mysqldump -u username -p --all-databases > dump.sql手動でエラーを生成しませんが、情報スキーマをダンプしません。 automysqlbackupはエラーを発生させます。

14
stickmangumby

おっと... mysqldumpのmanページから:

mysqldump does not dump the INFORMATION_SCHEMA database. If you name that database explicitly on the command line, mysqldump silently ignores it

Manページが古くなっている(そして警告が出される)か、automysqlbackupinformation_schemaのダンプに対して追加のチェックを実行しているようです。

どちらかはわかりませんが、ユーザーの付与とは関係ありません。

編集

うん、それはautomysqlbackupバージョン2.5.1のバグです(Ubuntu 10.04でMySQL 5.1.41を使用)-必要がないときにinformation_schemaをバックアップしようとします。

修正:スクリプトの76行目のinformation_schemaDBEXCLUDEに追加します。

1
stickmangumby

これらの権限は、mysqldumpに必要なすべてのものでなければなりません。

LOCK TABLESを付与し、LOCK TABLESでエラーが発生したため、権限に一貫性がないようです。 FLUSH PRIVILEGES

4
Shane Madden

ユーザーを作成

GRANT USAGE ON *.* TO 'dump'@'localhost' IDENTIFIED BY 'plaintext-pass';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `my-db`.* TO 'dump'@'localhost';

権限を確認する

mysql> SHOW GRANTS FOR dump@'localhost';
+-----------------------------------------------------------------------------------------------+
| Grants for dump@localhost                                                                     |
+-----------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dump'@'localhost'                                                      |
| GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `my-db`.* TO 'dump'@'localhost' |
+-----------------------------------------------------------------------------------------------+

お気に入りのエディタを使用してファイルを作成します~/.my.cnfchmod 400

[client]
user=dump
password=plaintext-pass

例として、ダンプ用のフォルダを作成します

mkdir ~/db-dumps

機能するかどうかを確認する

mysqldump -u dump --hex-blob --routines --triggers my-db | gzip > ~/db-dumps/manual-my-db-dump-`date +%F`.sql.gz

必要に応じて、dailyおよびweeklyのダンプを作成してから、1か月より古いdailyをすべて削除できます。

#m h  dom mon dow   command
0  3  *   *   0,2-6 /usr/bin/mysqldump -u dump --hex-blob --routines --triggers my-db | gzip > ~/db-dumps/daily-my-db-dump-`date +%F`.sql.gz;
0  3  *   *   1     /usr/bin/mysqldump -u dump --hex-blob --routines --triggers my-db | gzip > ~/db-dumps/weekly-my-db-dump-`date +%F`.sql.gz;
0  4  *   *   *     /usr/bin/find ~/db-dumps/ -name "daily-*" -type f -mtime +30 -exec rm -f {} \;
0
Vasilii Suricov