方法1 :自动 设置参数 relay_log_purge = 1
1 | SET GLOBAL relay_log_purge = 1; |
这个参数需要重启数据库才可生效。默认情况下relay-log-purge 是开启的。
如果你对从数据库要求不高,可以将relay_log_purge = 1。
如果数据库要手动删除relay log请执行 SET GLOBAL relay_log_purge=0。
或者在/etc/my.cnf
1 | [mysqld]模块下面增加以下内容 |
模拟场景:
1)从库查看relay log情况
1 | [root@aliyun1212 data]# ll |
2)从库执行以下操作:
1 | SET GLOBAL relay_log_purge = 1; |
3)主库执行flush logs;
1 | flush logs; |
生成新的binlog
4)从库查看relay log 情况
1 | [root@aliyun1212 data]# ll |
可以看到从库的relay log 自动删除只保留最近的两个relay log。说明下如果从库同步出现问题,没有应用的relay log 也不会自动删除relay log。直到解决掉错误,否则relay log 会越挤越多。
方法2:手动 rm -rf 删除reloy log
1)查看从库
1 | [root@aliyun1212 data]# ll |
2)从库执行以下操作:
1 | [root@aliyun1212 data]# rm -rf mysqld-relay-bin.000036 mysqld-relay-bin.37 mysqld-relay-bin.38 |
从库操作系统层面rm relay log 主库更新数据从库可以继续同步:
主库操作:
1 | insert into test values(13,'ff'); |
从库可以看到数据被同步
1 | select * from test; |
如果此时 stop slave
然后在执行start slave ,会提示以下错误:
1 | start slave; |
此时要执行步骤3
3)编辑文件mysqld-relay-bin.index 删除刚才删除的relay log mysqld-relay-bin.000039之前的。
1 | [root@aliyun1212 data]# vi mysqld-relay-bin.index |
再次启动start slave
1 | start slave; |
还是会报错。
此时必须重启从库mysql 数据库
1 | [root@aliyun1212 ~]# service mysql restart |