| ../ |
VPSサーバー(CentOS8.2)にMySQL8.0をインストールした。定期的にMySQLデータベースのバックアップを作成するようにしたい。その手順をメモしておく。バックアップは、毎日4:00に実行し、過去14日分を残すようにする。スケジュールはcron.dに登録して行う。
定期バックアップのシェル作成
以下のようにシェルファイルを作成する。例では、/var/share9/mysql-backup/mysql-backup.shとしている。データベースの接続情報は適宜、変更のこと。
$ vi /var/share9/mysql-backup/mysql-backup.sh
#!/bin/sh
keepday=14 # 何日間をサイクルで回すか。
host=xxx # ホスト名
dbname=kankeri # データベース名
user=root # ユーザー名
pwd=*** # パスワード
dst=/var/share9/mysql-backup/backup-${host}
bak=${dbname}.bak
d1=`date +%Y%m%d`
d2=`date "-d${keepday} days ago" +%Y%m%d`
new=${dbname}-${d1}.tar.gz
old=${dbname}-${d2}.tar.gz
cd ${dst}
/usr/bin/mysqldump -u${user} --password='${pwd}' --opt ${dbname} > ${bak}
tar zcvf ${new} ${bak} > /dev/null 2>&1
if [ $? != 0 -o ! -e ${new} ]; then
echo backup failed ${new}
exit 1
fi
if [ -e ${old} ]; then
rm -f ${old}
fi
echo ----------- ${dst}
ls -lag ${dst}
cron.dへスケジュール登録
毎日4:00に実行されるようにcron.dに登録する。スケジューラはcrondというサービスであるが、登録方法は、cron.dやcrontabやcron.dailyなどがある。設定方法は同じである。私は、cron.dに登録することにした。/etc/cron.d/mysql-backup を以下のように作成した。毎日4:00に前述のmysql-backup.shを実行させる。
vi /etc/cron.d/mysql-backup
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
0 4 * * * root /var/share9/mysql-backup/mysql-backup.sh
動作確認
まず、mysql-backup.sh がrootで正常に動作することを確認しておく。mysql-backup.shの所有者はrootで、権限は700であること。パスワード埋め込みのシェルなので、他者が触れないようにしておくこと。
そしてcrondサービスを再起動させておく。1日待てば確認できる。気が短い方は、cron.hourlyに変更して確認してみてもいい。
# rootで動作するかどうかの確認
$ su -
$ ls -lag /var/share9/mysql-backup/mysql-backup.sh
-rwx------ 1 root 680 11月 28 10:32 mysql-backup.sh
$ /var/share9/mysql-backup/mysql-backup.sh
# cron.dに登録されているか確認
$ ls -lag /etc/cron.d/
-rw-r--r-- 1 root 52 11月 28 10:12 mysql-backup
# crondを再起動して、追加したcron.dを読み込ませる。
$ systemctl restart crond
$ systemctl status crond
以上