mysql 清理relay日志_Mysql 删除从数据库的relay logs最佳方式、最安全方式

  • Post author:
  • Post category:mysql

情景

MySQL数据库主从复制在默认情况下从库的relay logs会在SQL线程执行完毕后被自动删除。但是:在relay_log_purge = 0和MHA集群下,不会被自动删除,需要手动删除。如何安全的删除relay logs就比较关键了!

主要有两种方式:

方式一:

通过MHA中自带的工具 purge_relay_logs 工具来删除。

步骤:

创建工作目录

目的为了提高性能,这个工作目录必须跟mysql在同一个磁盘分区

mkdir -p /data/mha_tmp

purge relay logs

/usr/bin/purge_relay_logs –user=USERNAME –password=PASSWORD –host=Mysql_IP –disable_relay_log_purge –workdir=/data/mha_tmp 2>&1

加入到crontab中

04 * * * /usr/bin/purge_relay_logs –user=USERNAME –password=PASSWORD –host=Mysql_IP –disable_relay_log_purge –workdir=/data/mha_tmp 2>&1

说明:

–disable_relay_log_purge:自动设置 “relay_log_purge = 1”

方式二:

手动删除 relay log

设置relay_log_purge = 1

SET GLOBAL relay_log_purge = 1

flush logs

通过管理员用户登陆从数据库,然后执行下面命令:

flush logs;

可以执行多次!

注意:

观察堆积的relay logs日志是否已经删除,如果删除,直接执行下面第6步“恢复relay_log_purge = 0“;如果未删除,继续从下面第3步”停止slave“往下操作!!!

停止slave

通过管理员用户登陆从数据库,然后执行下面命令:

stop slave;

删除relay logs

可以通过rm直接删除relay logs

通使用下面方式安全删除:

(1) 统计所有关于relay的文件(包括 relay_log_name.index)总个数

ls -A1 |grep relay | sort -rn | wc -l

(2) 列出要删除所有有关relay的文件:

ls -A1 |grep relay | sort -rn | tail -n 100

说明: 100 为要删除的relay logs 数量

(3) 确定没有问题,删除relay logs:

ls -A1 |grep relay|sort -rn|tail -n 100|xargs rm -rf {}

注意:

要保留最新的两个relay log

要保留relay log的index文件

relay log的index一般命名为: relay_log_name.index

例如: relay-bin.index

5. 启动slave

通过管理员用户登陆从数据库,然后执行下面命令:

start slave;

6 . 恢复relay_log_purge = 0

通过管理员用户登陆从数据库,然后执行下面命令:

SET GLOBAL relay_log_purge=0;

扩展

如果你对从数据库要求不高,可以将relay_log_purge = 1


版权声明:本文为weixin_33216825原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。