MySQL 删除 relay log 的方法

方法1 :自动 设置参数 relay_log_purge = 1
1
2
3
4
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

1
2
# [mysqld]模块下面增加以下内容
relay-log-purge = 0

模拟场景:
1)从库查看relay log情况

1
2
3
4
5
6
7
8
[root@aliyun1212 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 mysqld-relay-bin.000032
-rw-r----- 1 mysql mysql 344 Aug 23 18:14 mysqld-relay-bin.000033
-rw-r----- 1 mysql mysql 207 Aug 23 18:14 mysqld-relay-bin.000034
-rw-r----- 1 mysql mysql 321 Aug 23 18:14 mysqld-relay-bin.000035
-rw-r----- 1 mysql mysql 100 Aug 23 18:14 mysqld-relay-bin.index

2)从库执行以下操作:

1
2
3
4
5
6
7
8
9
10
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;

1
2
mysql> flush logs;
Query OK, 0 rows affected (0.12 sec)

生成新的binlog
4)从库查看relay log 情况

1
2
3
4
5
6
[root@aliyun1212 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 mysqld-relay-bin.000036
-rw-r----- 1 mysql mysql 369 Aug 26 03:16 mysqld-relay-bin.000037
-rw-r----- 1 mysql mysql 50 Aug 26 03:16 mysqld-relay-bin.index

可以看到从库的relay log 自动删除只保留最近的两个relay log。说明下如果从库同步出现问题,没有应用的relay log 也不会自动删除relay log。直到解决掉错误,否则relay log 会越挤越多。

方法2:手动 rm -rf 删除reloy log

1)查看从库

1
2
3
4
5
6
7
8
9
10
11
12
[root@aliyun1212 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 mysqld-relay-bin.000036
-rw-r----- 1 mysql mysql 422 Aug 26 03:27 mysqld-relay-bin.000037
-rw-r----- 1 mysql mysql 255 Aug 26 03:27 mysqld-relay-bin.000038
-rw-r----- 1 mysql mysql 683 Aug 26 03:27 mysqld-relay-bin.000039
-rw-r----- 1 mysql mysql 255 Aug 26 03:27 mysqld-relay-bin.000040
-rw-r----- 1 mysql mysql 683 Aug 26 03:27 mysqld-relay-bin.000041
-rw-r----- 1 mysql mysql 255 Aug 26 03:27 mysqld-relay-bin.000042
-rw-r----- 1 mysql mysql 369 Aug 26 03:27 mysqld-relay-bin.000043
-rw-r----- 1 mysql mysql 200 Aug 26 03:27 mysqld-relay-bin.index

2)从库执行以下操作:

1
2
3
4
5
6
7
8
9
10
[root@aliyun1212 data]# rm -rf mysqld-relay-bin.000036 mysqld-relay-bin.37 mysqld-relay-bin.38
[root@aliyun1212 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 mysqld-relay-bin.000039
-rw-r----- 1 mysql mysql 255 Aug 26 03:27 mysqld-relay-bin.000040
-rw-r----- 1 mysql mysql 683 Aug 26 03:27 mysqld-relay-bin.000041
-rw-r----- 1 mysql mysql 255 Aug 26 03:27 mysqld-relay-bin.000042
-rw-r----- 1 mysql mysql 369 Aug 26 03:27 mysqld-relay-bin.000043
-rw-r----- 1 mysql mysql 200 Aug 26 03:27 mysqld-relay-bin.index

从库操作系统层面rm relay log 主库更新数据从库可以继续同步:
主库操作:

1
2
mysql> insert into test values(13,'ff');
Query OK, 1 row affected (0.44 sec)

从库可以看到数据被同步

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 ,会提示以下错误:

1
2
mysql> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

此时要执行步骤3
3)编辑文件mysqld-relay-bin.index 删除刚才删除的relay log mysqld-relay-bin.000039之前的。

1
2
3
4
5
6
[root@aliyun1212 data]# vi mysqld-relay-bin.index 
./mysqld-relay-bin.000039
./mysqld-relay-bin.000040
./mysqld-relay-bin.000041
./mysqld-relay-bin.000042
./mysqld-relay-bin.000043

再次启动start slave

1
2
mysql> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

还是会报错。
此时必须重启从库mysql 数据库

1
2
3
4
5
6
[root@aliyun1212 ~]# service mysql restart
Shutting down MySQL.. [ OK ]
Starting MySQL.... [ OK ]
# 查看从库状态正常

mysql> show slave status/G
  • 作者: Sam
  • 发布时间: 2020-03-15 14:35:19
  • 最后更新: 2020-12-18 21:59:10
  • 文章链接: https://ydstudios.gitee.io/post/da13f861.html
  • 版权声明: 本网所有文章除特别声明外, 禁止未经授权转载,违者依法追究相关法律责任!