MariaDB

>

MySQLデータベース バックアップの自動化

公開日 : 2025/01/06

最終更新日時 : 2025/01/06 13:43

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