マスターDBのバイナリログ削除を自動化
crontabの整理したらあった。すっかり忘れていたけど前に自動化用shを作っていたようなのでメモメモ。
- スレーブDBそれぞれのshow slave statusを確認
- マスターログのどこまで見てるかを取得
- そのうち一番古いバイナリログを求めて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'"