とりあえず dump が取れればいいやと書きなぐった。このままでは同じサーバ上にバックアップファイルを置く事になってあまり意味がないので別途 rsync なり scp なりする。
データベースの設定は wordpress で使用しているものと同じなので wp-config.php を読み込む。但しそうするとメモリが足りなくなったりタイムゾーンが UTC になってアレなのでそこだけ直す。
mysql のバックアップには mysql 付属の mysqldump を使用。これが一番楽かな?
また古いファイルを削除するのに find と xargs を組み合わせたコマンドをシステムコールしている。一々スクリプト書くより楽ですね。
あとは crontab に登録するだけ。
$ cat backup_database.php
<?php
ini_set('memory_limit', '64M');
require_once '/path/to/wp/wp-config.php';
date_default_timezone_set('Asia/Tokyo');
$day = 30;
$path = '/path/to/backup/';
$target_db_list = array('hoge', 'fuga', 'piyo');
foreach ($target_db_list as $db) {
$backup_file = $path . $db . date('Ymd') . '.dump';
system(sprintf('mysqldump -u %s --password=%s %s --opt > %s', DB_USER, DB_PASSWORD, $db, $backup_file));
chmod($backup_file, 0744);
}
system(sprintf('find %s -mtime +%s -name "*.dump" | xargs rm -f', $path, $day));
$ crontab -l
# m h dom mon dow command
20 0 * * * php /path/to/script/backup_database.php > /dev/null
コメント