定期的にこのブログのデータベースのバックアップを取ることにしたので、その時の手順をメモ代わりに投稿します。こちらで使用しているスクリプトは自己責任で使用してください。
環境
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 14.04.3 LTS Release: 14.04 Codename: trusty
$ mysql --version mysql Ver 14.14 Distrib 5.5.49, for debian-linux-gnu (x86_64) using readline 6.3
スクリプト
#!/bin/sh umask 0077 USERNAME='username' PASSWORD='password' PERIOD=7 BACKUP_DIR='/var/www/mysql-backups' DATABASE_NAME=database_name DATE=`date +%Y%m%d` mysqldump -u$USERNAME -p$PASSWORD $DATABASE_NAME | gzip > $BACKUP_DIR/$DATABASE_NAME-$DATE.sql.gz OLD_DATE=`date --date "$PERIOD days ago" +%Y%m%d` rm -f $BACKUP_DIR/$DATABASE_NAME-$OLD_DATE.sql.gz
解説
umask 0077 の部分で新規に作成されたファイルを他のユーザーが読み取れないようにしています。
PERIOD はバックアップの周期を指定しています。ここでは7日周期で古いバックアップを削除しています。
$ sudo chmod 700 backup.sh
スクリプト自体も他のユーザーから読み込めないようにしましょう。
cronの設定
0 3 * * * sh /var/www/mysql-backups/backup.sh
これで毎日AM 3:00にデータベースのバックアップが実行されるようになりました。