2&>1

AWSとかGCPとかGolangとかとか

MySQLバックアップスクリプトを試す(mysql ver=5.7)

なんで?

今まで使ってたスクリプトが使えない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

バックアップ処理結果が成功であれば以下

バックアップの圧縮

gzip $dirpath/$filename.sql

パーミッション変更

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 でエラーだけを出力してる

まとめ

よくある感じになった