【さくらインターネット/レンタルサーバー】DBのバックアップを自動化する
さくらインターネットのレンタルサーバー(スタンダートプラン以上)でデータベースのバックアップを自動化したい!
概要
さくらインターネットのレンタルサーバー(スタンダートプラン以上)で使えるデータベース(MySQL)をバックアップするスクリプトを作り、cronで定期的に実行するようにする。
仕様書
- さくらインターネットのレンタルサーバー(スタンダートプラン以上)
手順書
スクリプトとバックアップファイルを保管するディレクトリを作る
home/<username>
ディレクトリの中にバックアップを実行するスクリプトとデータベースのバックアップファイルを保管するディレクトリを作る。
今回は、スクリプトを保管するディレクトリをscripts
、バックアップファイルを保管するディレクトリをarchives
とした。
下記はディレクトリの配置のイメージです。www
ディレクトリと同じ階層にディレクトリを作る。
home
<username>
archives
scripts
www
バックアップを実行するスクリプトを作る
scripts
ディレクトリにbackup.sh
ファイルを作り、下記のように入力する。
バックアップするデータベースが単数の場合と複数の場合の2パターンを例として載せる。
バックアップするデータベースが単数の場合
#!/bin/sh
period=30
path_archives=/home/<username>/archives
db_name=<dbname>
file_backup="${db_name}_`date +%Y%m%d`.gz"
/usr/local/bin/mysqldump -u <username> -p<password> -h <hostname> --no-tablespaces --single-transaction $db_name | gzip > $path_archives/$file_backup
chmod 0600 $path_archives/$file_backup
$file_old="${db_name}_`date -v-$(($period + 1))d +%Y%m%d`.sql.gz"
rm -f $path_archives/$file_old
db_name
変数にバックアップを行うデータベースの名前を入力する。バックアップファイルの名前にもプレフィックスとして使われる。
period
変数はバックアップファイルを保管しておく日数になる。今回の例だとバックアップファイルを30日間保管し、翌日の31日目に削除する。
バックアップするデータベースが複数の場合
#!/bin/sh
period=30
path_archives=/home/<username>/archives
for db_names in <dbname1> <dbname2> <dbname3>
do
file_backup="${db_names}_`date +%Y%m%d`.gz"
/usr/local/bin/mysqldump -u <username> -p<password> -h <hostname> --no-tablespaces --single-transaction db_names | gzip > $path_archives/$file_backup
chmod 0600 $path_archives/$file_backup
$file_old="${db_names}_`date -v-$(($period + 1))d +%Y%m%d`.sql.gz"
rm -f $path_archives/$file_old
done
period`変数は同上。
for db_names in <dbname1> <dbname2> <dbname3>
の行の<dbname*>
の部分にバックアップするデータベースの名前を入力する。
テストする
puttyなどで接続してスクリプトが正しく動くか実行してみる。
cd scripts
sh backup.sh
cronを設定する
サーバコントロールパネルにログインする。
左のメニューの「スクリプト設定」->「CRON設定」にアクセスする。
「スケジュール一覧」の中の「スケジュール追加」をクリックすると右側に入力フォームが表示される。それぞれ下記のように入力する
項目名 | 値 |
---|---|
実行コマンド | sh /home/<username>/scripts/backup.sh |
コメント(説明) | db backup |
月 | * |
日 | * |
時 | 3 |
分 | 0 |
曜日 | すべてチェックを外す |
上記は毎日3時にバックアップのスクリプトを実行する設定になる。
ちゃんと実行されてるか確認する
3時過ぎに/home/<username>/archives
の中に<db_name>_yyyymmdd.gz
というバックアップファイルが作成されているか確認する。
おまけ:バックアップファイルをインポートする
下記のコマンドでバックアップファイルをデータベースにインポートできる。
mysql -u<username> -p<password> -h <hostname> <dbname> < backup.sql
まとめ(感想文)
何かしらが起きてしまったときのためにバックアップはやっておいた方が良いかもね!
引用・参考文献
下記の記事を参考にさせて頂きました。
ありがとうございました。