なんで?
今まで使ってたスクリプトが使えないmysqlのバージョン違いで使えない謎現象が起きたから 5.6で使ってて5.7で使えなかった。 誰が作ったかもわからん難読スクリプトだったので捨てた。
どんなの?
以下のスクリプトをCRONで実行する
特殊な事情としてDRDBを組み込んででマウントしているプライマリーDBホストのみでバックアップを行う セカンダリーでは何もしない。 失敗したらメールする。 アクセス情報は別ファイルから読み込む
<p>
!/bin/sh
ユーザー情報
usercnf='/home/popopo/dbaccess.cnf'
バックアップの保存期間(days)
period=20
バックアップ保存用ディレクトリの指定
dirpath='/data/mysql_backups'
DB名
db='mysql'
送信アドレス
MAILADDR="hoge@hoge.com age@age.com"
ファイル名を指定
filename=mysqldump_prcmndb.date +%Y%m%d%H%M
/data(/dev/drbd1)があればバックアップを行う
df | grep -e "/data$" if [ "$?" -eq 0 ]; then
存在する場合
mysqldump --defaults-file=$usercnf -h localhost $db > $dirpath/$filename.sql 2> /tmp/mysqlbackupErr.log
if [ $? = 0 ]; then
バックアップ処理結果が成功であれば以下
バックアップの圧縮
パーミッション変更
chmod 700 $dirpath/$filename.sql.gz
保存期間を過ぎたバックアップを削除
oldfile=mysqldump_prcmndb.date --date "$period days ago" +%Y%m%d%H%M
rm -f $dirpath/$oldfile.sql.gz
結果をメール送信
echo "hostname=${HOSTNAME} MySQL BackUp OK $dirpath/$filename.sql" | mail -s "${HOSTNAME} MYSQL BackUP success" ${MAILADDR} else
バックアップ処理結果がエラーであれば以下
結果をメール送信
echo "hostname=${HOSTNAME} MySQL BackUp NG cat /tmp/mysqlbackupErr.log
" | mail -s "${HOSTNAME} MYSQL BackUP Faild!!" ${MAILADDR}
fi
else
存在しない場合
: fi </p>
cat dbaccess.cnf
<pre> [mysqldump] user=dbbackup password=pAssWord </pre>
詰まったとこ
mysqldumpの実行結果(失敗時のみ)をメールで送るのに四苦八苦
結果的には別ファイルに出力してそれをメール本文にするだけだったけど。。
本当は別ファイルに出力することなくそのままメールにしたかった。
コマンド 2> /tmp/mysqlbackupErr.log
でエラーだけを出力してる
まとめ
よくある感じになった