crontab(クロンタブ)でmysqldumpをデータベース毎に実行し毎日自動でバックアップ


データベース毎に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を自動バックアップする