方法1 :自动 设置参数 relay_log_purge = 1
mysql> SET GLOBAL relay_log_purge = 1;
Query OK, 0 rows affected (0.00 sec)
或者在/etc/my.cnf [mysqld]模块下面增加以下内容
relay-log-purge = 1
这个参数需要重启数据库才可生效。默认情况下relay-log-purge 是开启的。
如果你对从数据库要求不高,可以将relay_log_purge = 1。
如果数据库要手动删除relay log请执行 SET GLOBAL relay_log_purge=0。
或者在/etc/my.cnf [mysqld]模块下面增加以下内容
relay-log-purge = 0
模拟场景:
1)从库查看relay log情况
[root@cndba data]# ll
total 5255240
-rw-r----- 1 mysql mysql 56 Aug 18 15:40 auto.cnf
-rw-r----- 1 mysql mysql 207 Aug 23 16:06 cndba-relay-bin.000032
-rw-r----- 1 mysql mysql 344 Aug 23 18:14 cndba-relay-bin.000033
-rw-r----- 1 mysql mysql 207 Aug 23 18:14 cndba-relay-bin.000034
-rw-r----- 1 mysql mysql 321 Aug 23 18:14 cndba-relay-bin.000035
-rw-r----- 1 mysql mysql 100 Aug 23 18:14 cndba-relay-bin.index
2)从库执行以下操作:
mysql> SET GLOBAL relay_log_purge = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'relay_log_purge';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| relay_log_purge | ON |
+-----------------+-------+
1 row in set (0.00 sec)
3)主库执行flush logs;
mysql> flush logs;
Query OK, 0 rows affected (0.12 sec)
生成新的binlog
4)从库查看relay log 情况
[root@cndba data]# ll
total 5255232
-rw-r----- 1 mysql mysql 56 Aug 18 15:40 auto.cnf
-rw-r----- 1 mysql mysql 255 Aug 26 03:16 cndba-relay-bin.000036
-rw-r----- 1 mysql mysql 369 Aug 26 03:16 cndba-relay-bin.000037
-rw-r----- 1 mysql mysql 50 Aug 26 03:16 cndba-relay-bin.index
可以看到从库的relay log 自动删除只保留最近的两个relay log。说明下如果从库同步出现问题,没有应用的relay log 也不会自动删除relay log。直到解决掉错误,否则relay log 会越挤越多。
方法2:手动 rm -rf 删除reloy log
1)查看从库
[root@cndba data]# ll
total 5255256
-rw-r----- 1 mysql mysql 56 Aug 18 15:40 auto.cnf
-rw-r----- 1 mysql mysql 255 Aug 26 03:16 cndba-relay-bin.000036
-rw-r----- 1 mysql mysql 422 Aug 26 03:27 cndba-relay-bin.000037
-rw-r----- 1 mysql mysql 255 Aug 26 03:27 cndba-relay-bin.000038
-rw-r----- 1 mysql mysql 683 Aug 26 03:27 cndba-relay-bin.000039
-rw-r----- 1 mysql mysql 255 Aug 26 03:27 cndba-relay-bin.000040
-rw-r----- 1 mysql mysql 683 Aug 26 03:27 cndba-relay-bin.000041
-rw-r----- 1 mysql mysql 255 Aug 26 03:27 cndba-relay-bin.000042
-rw-r----- 1 mysql mysql 369 Aug 26 03:27 cndba-relay-bin.000043
-rw-r----- 1 mysql mysql 200 Aug 26 03:27 cndba-relay-bin.index
2)从库执行以下操作:
[root@cndba data]# rm -rf cndba-relay-bin.000036 cndba-relay-bin.37 cndba-relay-bin.38
[root@cndba data]# ll
total 5255244
-rw-r----- 1 mysql mysql 56 Aug 18 15:40 auto.cnf
-rw-r----- 1 mysql mysql 683 Aug 26 03:27 cndba-relay-bin.000039
-rw-r----- 1 mysql mysql 255 Aug 26 03:27 cndba-relay-bin.000040
-rw-r----- 1 mysql mysql 683 Aug 26 03:27 cndba-relay-bin.000041
-rw-r----- 1 mysql mysql 255 Aug 26 03:27 cndba-relay-bin.000042
-rw-r----- 1 mysql mysql 369 Aug 26 03:27 cndba-relay-bin.000043
-rw-r----- 1 mysql mysql 200 Aug 26 03:27 cndba-relay-bin.index
从库操作系统层面rm relay log 主库更新数据从库可以继续同步:
主库操作:
mysql> insert into test values(13,'ff');
Query OK, 1 row affected (0.44 sec)
从库可以看到数据被同步
mysql> select * from test;
+----+------+
| id | name |
+----+------+
| 1 | abc |
| 4 | cc |
| 5 | dd |
| 6 | ee |
| 7 | ee |
| 8 | ee |
| 9 | ff |
| 10 | ff |
| 11 | ff |
| 12 | ff |
| 13 | ff |
+----+------+
如果此时 stop slave
然后在执行start slave ,会提示以下错误:
mysql> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
此时要执行步骤3
3)编辑文件cndba-relay-bin.index 删除刚才删除的relay log cndba-relay-bin.000039之前的。
[root@cndba data]# vi cndba-relay-bin.index
./cndba-relay-bin.000039
./cndba-relay-bin.000040
./cndba-relay-bin.000041
./cndba-relay-bin.000042
./cndba-relay-bin.000043
再次启动start slave
mysql> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
还是会报错。
此时必须重启从库mysql 数据库
[root@cndba ~]# service mysql restart
Shutting down MySQL.. [ OK ]
Starting MySQL.... [ OK ]
查看从库状态正常。
mysql> show slave status/G;
......
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
版权声明:本文为博主原创文章,未经博主允许不得转载。