環境 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 データベースのバックアップ自動化が完了する。