mysql清除relay-log⽂件⽅法详解
mysql 清除relay-log⽂件⽅法详解
今天在本机的mysql数据⽬录下发现了许多类似hostname-relay-bin.0000*的⽂件,该⽂件⼀般是在mysql slave实例上存在。主要⽤途是记录主从同步的信息,正常情况下会⾃动删除的。
本机未配置过master、slave,对于其来源还真不太清楚。既然是⽤在slave上的,那就可以放⼼的删除。删除master实例上的⽇志⽂件⽤reset master,对于slave实例就使⽤命令:
代码如下复制代码
reset slave
Relay Log⽆法⾃动删除的问题
综合分析后发现和以下原因有关。
61该实例原先是⼀个Slave  -------导致relay-log 和 relay-log.index的存在
61该实例⽬前已经不是Slave  -------由于没有了IO-Thread,导致relay-log-purge 没有起作⽤(这也是其
他Slave实例没有这种情况的原因,因为IO-thread会做⾃动rotate操作)。
61该实例每天会进⾏⽇常备份  -------Flush logs的存在,导致每天会⽣成⼀个relay-log
61该实例没有配置expire-logs-days ------导致flush logs时,也不会做relay-log清除
简⽽⾔之就是:⼀个实例如果之前是Slave,⽽之后停⽤了(stop slave),且没有配置expire-logs-days的情况下,会出现relay-log堆积的情况。
顺带也和⼤家分享下MySQL 内部Logrotate的机制
Binary Log rotate机制:
61Rotate:每⼀条binary log写⼊完成后,都会判断当前⽂件是否超过 max_binlog_size,如果超过则⾃动⽣成⼀个binlog file
61Delete:expire-logs-days 只在实例启动时和 flush logs 时判断,如果⽂件访问时间早于设定值,则purge file
Relay Log rotate 机制:
mysql下载之后是个文件夹
61Rotate:每从Master fetch⼀个events后,判断当前⽂件是否超过 max_relay_log_size 如果超过则⾃动⽣成⼀个新的relay-log-file
61Delete:purge-relay-log 在SQL Thread每执⾏完⼀个events时判断,如果该relay-log 已经不再需要则⾃动删除
61Delete:expire-logs-days 只在实例启动时和 flush logs 时判断,如果⽂件访问时间早于设定值,则purge file  (同Binlog file)(updated: expire-logs-days和relaylog的purge没有关系)
PS:因此还是建议配置 expire-logs-days ,否则当我们的外部脚本因意外⽽停⽌时,还能有⼀层保障。
因此建议当slave不再使⽤时,通过reset slave来取消relaylog
删除 mysql bin-log
⾸先说明,mysql-bin.00000*类似的⽂件是mysql的⽇志⽂件。
通过命令
代码如下复制代码
du -h –max-depth=1 /
查看根⽬录下每个⽂件夹所占⽤存储的⼤⼩,发现/var占⽤了G,进⼀步使⽤du命令,发现是存放mysql数据⽂件的⽂件夹占⽤了绝⼤部分空间,进⼊该⽂件夹,发现有很多mysql-bin.00000开头的⽂件,⽽且其中的某些达到了1G以上,google发现原来这些⽤户是mysql记录的⽇志⽂件,⽤于崩溃后恢复数据和主从进⾏数据同步的。如果没有进⾏主从数据库,可以通过修改配置⽂件让mysql关闭记录操作⽇志功能,关闭只需要在log-bin=mysql-bin前加上⼀个“#”即可,不要忘记重启mysql服务。
清理⽇志⽅法为:
另外可以通过 RESET MASTER 来删除整个⽇志⽂件,注意,如果使⽤主从数据库,在操作前先确保从数据库已经完全同步了主数据库的数据。
上述命令都是登陆到mysql后执⾏的。
很多⼈安装的mysql是开启了⽇志⽂件记录的,⼀般有⽐较频繁的mysql数据库操作就会产⽣⼤量的⽇志⽂件在/usr/local/mysql/var/下⾯,⼀般产⽣的⽇志⽂件都类似如下:
-rw-rw—- 1 mysql mysql 2.0M Sep 28 17:08 mysql-bin.000001
-rw-rw—- 1 mysql mysql 1.1G Nov 13 14:43 mysql-bin.000002
-rw-rw—- 1 mysql mysql 1.1G Nov 13 15:17 mysql-bin.000003
-rw-rw—- 1 mysql mysql 561M Nov 13 15:52 mysql-bin.000004
-rw-rw—- 1 mysql mysql 904K Nov 13 16:07 mysql-bin.000005
-rw-rw—- 1 mysql mysql 194M Nov 16 16:40 mysql-bin.000006
-rw-rw—- 1 mysql mysql 123M Nov 18 19:18 mysql-bin.000007
-rw-rw—- 1 mysql mysql  456 Nov 16 16:41 mysql-bin.index
从上⾯可以看到,这些mysql-bin.00000* 类似的⽂件有的体积⾮常⼤,⽽且⼀般都在⼏⼗MB到⼏个GB,更甚会吃掉整个硬盘空间,从来导致mysql⽆法启动或报错,所以在没有必要的情况下我们是可
以不⽤开启⽇志⽂件的。
先说下删除mysql⽇志的⽅法:
执⾏:/usr/local/mysql/bin/mysql -u root -p
输⼊密码登录后再执⾏:
代码如下复制代码
reset master;
这样就可以了,当然也可以⼿动删除,但是可能会产⽣⼀些副作⽤,我没去证实过。
这些⽂件是mysql记录的⽇志⽂件,⽤于数据库崩溃后恢复数据和主从数据库进⾏数据同步的。如果没有进⾏主从数据库,可以通过修改配置⽂件让mysql关闭记录操作⽇志功能,那如何避免以后再产⽣这些⽂件呢,如何关闭mysql的⽇志功能呢?
⽅法如下:
代码如下复制代码
vi /etc/myf
到:
代码如下复制代码
log-bin=mysql-bin
将这⾏注释掉,前⾯加上#,再重启mysql就可以了。
假如说你是⼿⼯删除的mysql⽇志⽂件(mysql-bin.00000*)发现mysql启动不了,那么你看⼀下mysql-bin.index这个⽂件是否还存在,如果还存在的话就将mysql-bin.index也删除,然后就可以正常启动了。
其他清理⽅法(登录数据库情况下):

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。