【さくらインターネット/レンタルサーバー】DBのバックアップを自動化する

ネコニウム研究所

PCを利用したモノづくりに関連する情報を掲載するブログ

【さくらインターネット/レンタルサーバー】DBのバックアップを自動化する

2021-12-24 |

さくらインターネットのレンタルサーバー(スタンダートプラン以上)でデータベースのバックアップを自動化したい!

概要

さくらインターネットのレンタルサーバー(スタンダートプラン以上)で使えるデータベース(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

まとめ(感想文)

何かしらが起きてしまったときのためにバックアップはやっておいた方が良いかもね!

引用・参考文献

下記の記事を参考にさせて頂きました。
ありがとうございました。