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
はエラーを発生させます。
おっと... 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ページが古くなっている(そして警告が出される)か、automysqlbackup
がinformation_schema
のダンプに対して追加のチェックを実行しているようです。
どちらかはわかりませんが、ユーザーの付与とは関係ありません。
編集
うん、それはautomysqlbackup
バージョン2.5.1のバグです(Ubuntu 10.04でMySQL 5.1.41を使用)-必要がないときにinformation_schema
をバックアップしようとします。
修正:スクリプトの76行目のinformation_schema
をDBEXCLUDE
に追加します。
これらの権限は、mysqldumpに必要なすべてのものでなければなりません。
LOCK TABLESを付与し、LOCK TABLESでエラーが発生したため、権限に一貫性がないようです。 FLUSH PRIVILEGES
?
ユーザーを作成
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.cnf
とchmod 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 {} \;