1. HOME
  2. Webサイト関連
  3. 備忘録:MySQLのバックアップ、シェルスクリプトの覚書

今年の初めに新しいサーバーに乗り換えてから今日まで「ずぅーっと」、MySQLデータベースのバックアップファイルは作成されていると思っていた。
が、バックアップファイルのバックアップファイルを取ろうと思ったら・・・、1個もない!

ははは、旧サーバーのシェルスクリプトを新しいサーバーに置いて、そのまま実行していたことが原因だった。もう、笑うほかないww

と言うことで、新しいシェルスクリプトの作成をおこなったので備忘録として残しておく。

これまでは、次のコードでシェルスクリプトを作成し Cron で定期実行していた。

 !/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

KEEPDAY=5
TODAY=date +'%y%m%d'
DBDUMP_FILE=mysql.$TODAY
RMFILE=mysql.date -v -"$KEEPDAY"d +%y%m%d.gz
HOME_DIR=/home/<データベースユーザー名>
BACKUP_DIR=$HOME_DIR/<保存ディレクトリ名>

cd $BACKUP_DIR

mysqldump -Q --host=[データベースサーバー名] --user=[データベースユーザー名] --password=[パスワード] [データベース名] > $DBDUMP_FILE

gzip $DBDUMP_FILE >/dev/null 2>&1

if [ $? != 0 -o ! -e $DBDUMP_FILE ]; then
echo "SUCCESS! MAYBE!"
rm -f $RMFILE
exit 0
fi

・・・で、
上のコードを新しいサーバー側にあわせて実行したら、mysqldump: [Warning] Using a password on the command line interface can be insecure. が出るようになり、メールで飛んでくるようになった。今まで飛んでこなかったのは分からないけど、Warningの内容から「不味いよなー」と感じて次のコードに変更した。

 !/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

KEEPDAY=5
TODAY=date +'%y%m%d'
DBDUMP_FILE_1=mysql.$TODAY.db1
DBDUMP_FILE_2=mysql.$TODAY.db2
RMFILE_1=mysql.date -v -"$KEEPDAY"d +%y%m%d.db1.gz
RMFILE_2=mysql.date -v -"$KEEPDAY"d +%y%m%d.db2.gz
HOME_DIR=/home/<データベースユーザー名>
BACKUP_DIR=$HOME_DIR/<保存ディレクトリ名>

cd $BACKUP_DIR

mysqldump --defaults-extra-file=mysql_db.conf --default-character-set=utf8mb4 [データベース名] > $DBDUMP_FILE_1
gzip $DBDUMP_FILE_1 >/dev/null 2>&1

mysqldump --defaults-extra-file=mysql_db.conf --default-character-set=utf8mb4 [データベース名] > $DBDUMP_FILE_2
gzip $DBDUMP_FILE_2 >/dev/null 2>&1

if [ $? != 0 -o ! -e $DBDUMP_FILE_1 ]; then
echo "SUCCESS! MAYBE!"
rm -f $RMFILE_1
rm -f $RMFILE_2
exit 0
fi

Warning の忠告に従って新しいシェルスクリプトでは、 .conf ファイル(400)を作って接続情報を読み込む方式にした。
-character-set=utf8mb4 は文字化け対策。動作テストをしていた時、SQLの内容が文字化けしたので、utf8mb4 に固定して作成するようにした。SQLが文字化けするとテーブルにインポートする時に面倒になるから。多少ファイルサイズが大きくなるけど、インポート時に影響はないサイズだから気にしない。
それから、2つめのデータベースを一緒にバックアップすることにした。

mysqldump のコマンドラインのオプション設定はもう少し見直そうかと思ってる。
ただ、オプション設定が多いのでちょっと勉強してから再設定するつもり。

以上、覚書でした。(^^ゞ