マスター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'"