签到成功

知道了

CNDBA社区CNDBA社区

mysql 删除 relay log 方法

2018-08-27 21:01 6874 0 原创 mysql
作者: leo

方法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
http://www.cndba.cn/cndba/leo1990/article/2970
http://www.cndba.cn/cndba/leo1990/article/2970 http://www.cndba.cn/cndba/leo1990/article/2970 http://www.cndba.cn/cndba/leo1990/article/2970
http://www.cndba.cn/cndba/leo1990/article/2970
http://www.cndba.cn/cndba/leo1990/article/2970
http://www.cndba.cn/cndba/leo1990/article/2970
http://www.cndba.cn/cndba/leo1990/article/2970 http://www.cndba.cn/cndba/leo1990/article/2970 http://www.cndba.cn/cndba/leo1990/article/2970

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
leo

leo

关注

坚持你的坚持

  • 202
    原创
  • 0
    翻译
  • 39
    转载
  • 16
    评论
  • 访问:765064次
  • 积分:1270
  • 等级:核心会员
  • 排名:第8名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ