手動保存するのが面倒になるほど、バックアップする案件が増えたので、google先生にデータベースのアックアップの自動化を聞いてみました。
その答えとして、古い記事ですが「さくらインターネット環境でDBデータをcronで自動バックアップする」を参考にさせて頂きました。
記事のプログラムを動かしてみる
参考記事の最終更新日が2016年ですが、問題なくバックアップファイルが作成されました。
ただ、以下のWarningが表示されました。
mysqldump: [Warning] Using a password on the command line interface can be insecure.
コマンドラインにパスワードを入力したら安全でない場合があるよ!との事なので、ユーザーID・パスワード・ホストを別ファイルに記入して、読み込むように変更しました。
ユーザーID・パスワード・ホストを別ファイルに移動
db_dump.sh
# !/bin/sh
# ----- 設定 -----
DBCONF=/home/ユーザー名/scripts/mydb.cnf
DBNAME=データベース名
PATH=/bin:/usr/bin:/usr/local/bin
# 保存する日数
bk_days=7
# ---------- ファイル名を設定 ----------
# タイムスタンプを取得
TSNOW=`date +%Y%m%d`
TSOLD=`date -v -"${bk_days}"d +%Y%m%d`
# バックアップ先のディレクトリ・ファイル
bk_dir=/home/ユーザー名/db_backup/
# ファイル名を設定
file_temp=${DBNAME}_${TSNOW}.sql
file_backup=${DBNAME}_${TSNOW}.tar.gz
file_remove=${DBNAME}_${TSOLD}.tar.gz
# ---------- バックアップ処理 ----------
# バックアップ先のディレクトリに移動
cd ${bk_dir}
if [ $? != 0 ]; then
echo "Backup directory does not exist."
exit 1
fi
# データベースをダンプ
mysqldump --defaults-extra-file=${DBCONF} ${DBNAME} > ${file_temp}
if [ $? != 0 -o ! -e ${file_temp} ]; then
echo "Cannot dump database."
exit 1
fi
# アーカイブを作成
tar cfz ${file_backup} ${file_temp}
if [ $? != 0 -o ! -e ${file_backup} ]; then
echo "Cannot archive files."
exit 1
fi
# テンポラリファイルを削除
rm -f ${file_temp}
# ローテーション処理
if [ -e ${file_remove} ]; then
rm -f ${file_remove}
fi
exit 0
mydb.cnf
[mysqldump]
user=データベースユーザー名
password=データベースパスワード
host=データベースホスト
上記のように、mydb.cnfにデータベース情報を記入し、mysqldumpのオプション--defaults-extra-fileにmydb.cnfの絶対パスを設定しています。
利用するには
「/home/ユーザー名/」に「scripts」「db_backup」フォルダを作成。
scriptsフォルダに上記プログラムを設置。
設置が完了したら下記コマンドでバックアップ。
/home/ユーザー名/scripts/db_dump.sh 1> /dev/null
サーバー管理画面から上記コマンドをcronに設定してやれば、データベースのバックアップ自動化の完成です。