MySQL用日次バックアップ用スクリプト(ヘルスチェック付き)
MySQLに登録済みのDB(データ用DB)を日次でダンプ(エクスポート)するためのシェルを作成しました。テキスト形式のsqlで出力しますので、大きなテーブルを含んでいても数分もあれば、処理が完了します。保存先を外付けHDDかcifsでマウントしたNASを指定します。外付けHDDやNASは、fstabに登録しておきます。
参考記事:@sango 「MySQLデータベースを丸ごとお引っ越し。」
#!/bin/bash
# 処理日情報取得
WEEKDAY=`date +%A`
TODAY=`date`
# バックアップ先ディレクトリ(NASの場合)
BACKUP_DIR=/mnt/nas/mysql/
if [ ! -d $BACKUP_DIR$WEEKDAY ]
then
mkdir $BACKUP_DIR$WEEKDAY
fi
# MySQLrootパスワード
ROOTPASS=*******
# MySQLディレクトリ
MYSQL_DIR=/var/lib/mysql
# データベースごとにダンプ
cd $BACKUP_DIR$WEEKDAY
echo “>>> mysqldump start: $TODAY <<<” > mysqldump.log
DBLIST=`ls -p $MYSQL_DIR | grep / | tr -d /`
echo “*—– status check of $dbname —–*” > status_chk.log
for dbname in $DBLIST
do
echo “[ $dbname ]” >> status_chk.log
mysqlcheck $dbname -u root -p$ROOTPASS 2>/dev/null >> status_chk.log
echo “” >> status_chk.log
mysqldump –skip-lock-tables –events -u root -p$ROOTPASS $dbname 2>/dev/null > $dbname.sql
done
echo “*—– mysqldump files are —–*” >> mysqldump.log
ls -la >> mysqldump.log
echo “>>> mysqldump end: $TODAY <<<” >> mysqldump.log
1.パスワードを自動入力すると警告メッセージが出るので、2>/dev/nullで警告メッセージを捨てています。
2.実行結果は以下の通りです。
①実行曜日のフォルダ(自動作成)に各DB名の付いたsqlファイルが生成されます。
②status_chk.logに各DB内の全テーブルのヘルスチェック結果が保存されます。
③mysqldump.logに生成されたファイルの一覧が保存されます。
3.生成されたsqlファイルでインポートを実行すると、既存のテーブルはドロップされ、エクスポート済みのデータに置き換わります。
2.補足:NASの自動マウント(fstab)
1.cifs(samba経由のマウント)インストール。
#apt install -y cifs-utils
2.fstab内に追記
# nas mount for Ubuntu 18.04、ver1.0指定(最新のNASの場合は指定不要)
//192.168.1.xxx/backups /mnt/nas cifs vers=1.0,username=xxxxxxx,password=xxxxxxx,uid=1000,gid=1000 0 0