マスターDBのバイナリログ削除を自動化

crontabの整理したらあった。すっかり忘れていたけど前に自動化用shを作っていたようなのでメモメモ。

  1. スレーブDBそれぞれのshow slave statusを確認
  2. スターログのどこまで見てるかを取得
  3. そのうち一番古いバイナリログを求めてpurge master logを実行

みたいなことをやってるね

#!/bin/sh
# 

# slave
h=(1 2)


# mysql dir
mysql_dir=/var/lib/mysql

# それぞれのスレーブDBが見ているバイナリログを取得し配列にする
mysql_bins=`for h in ${h[@]}
do
    mysql -h slave$h -u replication --password=replication -e 'show slave status\G' \
    | grep Master_Log_File \
    | grep -v Relay \
    | awk '{print $2}'
done`

cd $mysql_dir
# バイナリログのうち一番古いバイナリログを保持
target_mysql_bin=`ls -t $mysql_bins | tail -1`

# それ以前のバイナリログをPURGEで削除
mysql -u root -e "PURGE MASTER LOGS TO '$target_mysql_bin'"