MySQLのバックアップを取る手っ取り早い方法
よく使う手なのでメモっておく。意外とやっている人は少ないような気がする方法。
まずバックアップするためのMySQLの専用ユーザーを作成する。間違ってもmysqlのrootのパスワードを設定ファイルに書いたりしてはいけない。(自宅鯖で面倒なときはやるけど、本番システムではありえない)
GRANT SELECT, LOCK TABLES ON wordpress.* TO 'backupuser' IDENTIFIED BY 'foobar';
↑バックアップユーザーを作成。でもアクセス元の制限がないので、下のようにアクセス元を制限しておかないと危険。
GRANT SELECT, LOCK TABLES ON wordpress.* TO 'backupuser'@localhost IDENTIFIED BY 'foobar';
んで、肝なのだが、バックアップ&世代蓄積にlogrotateを使う。/etc/logrotate.d/以下に適当な名前でファイルを作るよ。拡張子も特に気にしなくてよい。
/opt/backup/mysql/*.sql {
daily
rotate 30
size 0
missingok
compress
create 444
postrotate
mysqldump -ubackupuser -pfoobar wordpress > /opt/backup/mysql/dump.sql || true
endscript
}
これ何やっているかというと、毎日前日分のバックアップファイルをローテーションして、それが終わったら当日分のデータベースのバックアップをmysqldumpコマンドを使ってとっているだけ。サイズが0でも日次で強制ローテーション。 注意点としては、postrotateもログファイルが1個もないような場合は動作しないので、初回だけ手でmysqldupコマンドを発行してログを作っておくくらいかな。
なお、強制的にlogrotateを実行させるには
/usr/sbin/logrotate -v /etc/logrotate.d/mysql_backup
みたいに実行すれば良い。