環境 CentOS Stream release 9 Apache/2.4.57 (CentOS Stream) Xserver VPS
バックアップ保存用ディレクトリ作成
mkdir -pv /home/backup/mysql
所有者とグループを設定
chown -R user:user /home/backup
処理内容を記述したクリプト作成
vi /home/backup/mydatabase.sh
#!/bin/sh
# バックアップファイルを保存するディレクトリ
path='/home/backup/mysql'
# データベース名
db_name="mydatabase"
date=`date +%y%m%d`
old_date=`date --date "7 days ago" +%Y%m%d`
# mysqldump実行
mysqldump --user=xxxxxx --password=xxxxxx --skip-lock-tables --no-create-db --single-transaction --databases ${db_name} > ${path}/${db_name}_${date}.sql
# パーミッション設定
chmod 700 ${path}/${db_name}_${date}.sql
# 7日前より古いファイルを削除
rm -f ${path}/${db_name}_${date_old}.sql
コマンドラインからシェル実行
/home/backup/mydatabase.sh
バックアップファイルが作成されているか確認
ls /home/backup/mysql
出力
mydatabase_250106.sql
cron 設定
crontab -e
# 毎日5時に実行 * 5 * * * /home/backup/mydatabase.sh
:wq Enter
出力
crontab: installing new crontab
複数のデータベースがありユーザー名、パスワードが共通ならば各データベース名を配列に入れて do ~ done でループさせてやれば良い。
vi /home/backup/backup_mysql.sh
#!/bin/sh
# バックアップファイル保存用ディレクトリのパス
path='/home/backup/mysql'
# データベース名
db_name=("database1" "database2" "database3")
date=`date +%y%m%d`
date_old=`date --date "7 days ago" +%Y%m%d`
# 各データベースごとに処理を実行
for i in ${db_name[@]}
do
# mysqldump実行
mysqldump --user=xxxxxx --password=xxxxxx --skip-lock-tables --no-create-db --single-transaction --databases ${i} > ${path}/${i}_${date}.sql
# パーミッション設定
chmod 700 ${path}/${i}_${date}.sql
# 7日前より古いファイルを削除
rm -f ${path}/${i}_${date_old}.sql
done
これで MySQL データベースのバックアップ自動化が完了する。
