• Home
  • Web 開発
  • Server
  • シェルスクリプトで自動的にデータベースをバックアップ

シェルスクリプトで自動的にデータベースをバックアップ

シェルスクリプトと cron で自動的にデータベースをバックアップする方法を勉強しました。サーバー初心者です。

サーバーは、CentOS 5.7 です。

参考サイトは「mysqldumpとcronでMySQLを自動バックアップする | Linuxで自宅サーバ構築」です。

まず、バックアップファイルを保存するディレクトリを作っておきます。

mkdir -p /backup/data/mysql

mkdir コマンドに -p オプションを付けると、サブディレクトリもまとめて作れます。

次に、バックアップを自動的にとる backup_mysql.sh というシェルスクリプトを作り、/usr/local/bin に保存します。

vi /usr/local/bin/backup_mysql.sh
#!/bin/sh

# バックアップする関数を定義
function bk_mysql() {
# 引き数の覚え書き
# $1 : database name(データベース名)
# $2 : password(データベースのパスワード)
# $3 : period(保存期間)
# $4 : backup path(バックアップファイルを保存するディレクトリ)

# 現在年月日を「%y%m%d」の形(yymmdd)で取得
CUR_DATE=`date +%y%m%d`

# 保存期間で指定した日数前の年月日を取得
OLD_DATE=`date --date "$3 days ago" +%y%m%d`

# MySQLから指定したデータベースをダンプする
mysqldump --opt --password=$2 $1 > $4/${CUR_DATE}_$1.sql

# バックアップしたファイルを管理者だけ触れる権限にする
chmod 600 $4/${CUR_DATE}_$1.sql

# 指定した保存期間前のバックアップファイルを削除する
rm -f $4/${OLD_DATE}_$1.sql
}

# 関数bk_mysql に引き数($1〜$4)を渡して実行します。
bk_mysql データベース名 パスワード 7 /backup/data/mysql

エスケープキーを押して、:wq で保存します。

作成した backup_mysql.sh に実行権限を与えます。

chmod 700 /usr/local/bin/backup_mysql.sh

次に、cron に登録します。

crontab -e
0 3 * * * /usr/local/bin/backup_mysql.sh

エスケープキーを押して、「:x」で保存(変更があったら保存)します。これで毎日午前3時に backup_mysql.sh が実行され、データベースが保存されます。

ご利用は自己責任で…