データベース毎にMySQLのバックアップを自動で取るために設定した手順を書き記しておきます。
mkdir -pv /home/backup/mysql chown -R user:user /home/backup
バックアップを保管するためのフォルダを作ります。
mkdir /home/user/cron
ユーザーフォルダに cron 設置用のディレクトリを作ります。
vim /home/user/cron/backup_mysql.sh
mysqldump を行うシェルスクリプトを作成し、下記の内容を書き込みます。
#!/bin/sh # バックアップファイルを保存するディレクトリ path='/home/backup/mysql' # データベース名 db_name=("db_name_01" "db_name_02" "db_name_03") date=`date +%y%m%d` date_old=`date --date "7 days ago" +%y%m%d` for i in ${db_name[@]} do # mysqldump実行 mysqldump --user=XXX --password=YYY --skip-lock-tables --no-create-db --single-transaction --databases ${i} > ${path}/${i}_${date}.sql # パーミッション変更 chmod 700 ${path}/${i}_${date}.sql # 古いバックアップファイルを削除 rm -f ${path}/${i}_${date_old}.sql done
mysqldumpのオプションについては下記を参照。
mysqldump — データベースバックアッププログラム
chmod 700 /home/user/cron/backup_mysql.sh
DBのパスワードを記載しているため、パーミッションを絞る。
# 動作確認 /home/user/cron/backup_mysql.sh # バックアップファイルが作成されているか確認 ls -l /home/backup/mysql db_name_01_140725.sql db_name_02_140725.sql db_name_03_140725.sql
成功していれば、このようなファイルができる。
# crontabファイル vi /home/user/crontab
「crontab -e」で直接編集するのは危険なため、crontabファイルを作成してそこに下記の内容を書き込む。
# MySQLダンプ 2 3 * * * /home/user/cron/backup_mysql.sh
毎日03:02に実行する。
crontab /home/user/crontab
crontabファイルを反映させる。
crontab -l
反映されていることを確認する。
less /var/log/cron
crontabの実行ログ確認。
※環境により、実行ログの保存ディレクトリは異なります。
mysql -u user -p db_name < /home/backup/mysql/file_name.sql
リストアが必要になった場合はこちら。
参考にしたサイト
mysqldumpとcronでMySQLを自動バックアップする