MySQL資料庫主從複製在缺省情況下從庫的relay logs會在SQL線程執行完畢後被自動刪除,但是對於MHA場景下,對於某些滯後從庫的恢復依賴於其他從庫的relay log,因此採取停用自動刪除功能以及定期清理的辦法。對於清理過多過大的relay log需要注意引起的複製延遲資源開銷等。 MHA可透過purge_relay_logs腳本及配合cronjob來完成此項任務,具體描述如下。
1、purge_relay_logs的功能
a、为relay日志创建硬链接(最小化批量删除大文件导致的性能问题) b、SET GLOBAL relay_log_purge=1; FLUSH LOGS; SET GLOBAL relay_log_purge=0; c、删除relay log(rm –f /path/to/archive_dir/*)
2、purge_relay_logs的用法及相關參數
###用法
# purge_relay_logs --help
Usage:
purge_relay_logs --user=root --password=rootpass --host=127.0.0.1
###參數描述
3、客製清理relay log cronjob
--user mysql 用户名,缺省为root --password mysql 密码 --port 端口号 --host 主机名,缺省为127.0.0.1 --workdir 指定创建relay log的硬链接的位置,默认是/var/tmp,成功执行脚本后,硬链接的中继日志文件被删除 由于系统不同分区创建硬链接文件会失败,故需要执行硬链接具体位置,建议指定为relay log相同的分区 --disable_relay_log_purge 默认情况下,参数relay_log_purge=1,脚本不做任何处理,自动退出 设定该参数,脚本会将relay_log_purge设置为0,当清理relay log之后,最后将参数设置为OFF(0)
4、手動清理範例
pureg_relay_logs脚本在不阻塞SQL线程的情况下自动清理relay log。对于不断产生的relay log直接将该脚本部署到crontab以实现按天或按小时定期清理。 $ crontab -l # purge relay logs at 5am 0 5 * * * /usr/bin/purge_relay_logs --user=root --password=PASSWORD --disable_relay_log_purge >> /var/log/masterha/purge_relay_logs.log 2>&1 更正,移除多余字符app @20150515