ブログ

ryuzeeによるブログ記事。不定期更新

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

みたいに実行すれば良い。