Mysql主从同步mysql-bin的log文件过大资源占满(mysql服务器资源爆满)

问题描述:

mysql服务器爆满,资源全部都占用满了,导致页面很卡,什么都无法操作。

执行free -h命令查看缓存使用情况。
执行df -h命令查看硬盘使用情况。
Mysql主从同步mysql-bin的log文件过大资源占满(mysql服务器资源爆满)_第1张图片
mysql的数据存储目录home,内存使用free,cache,各个资源都爆满了!!!

解决方法

先找到大文件目录:
执行du -h命令,每次会显示最大的文件目录,进入目录再次执行du -h,依次找到占用空间最大的目录(与数据库名字一致的文件夹不用看)
Mysql主从同步mysql-bin的log文件过大资源占满(mysql服务器资源爆满)_第2张图片
到目录下执行ll命令,查看文件信息。
Mysql主从同步mysql-bin的log文件过大资源占满(mysql服务器资源爆满)_第3张图片
发现很多mysql-bin.xxxx的文件,这是mysql的操作日志文件,mysql的写操作、更新操作等都会被记录,数据量大的话很快就会写满,这个日志文件如果是单节点的可以通过配置关闭,但是主从同步(和Redis同理)会通过读取这些日志操作文件来一步步同步,所以必须开启着这个配置(配置项是log-bin,mysql的配置文件是/etc/my.cnf文件)。
找到了这些文件后,可以开始进行请理。

数据库还能连接和使用时的请理方式

可以连接上数据库时,通过mysql命令的形式清除日志文件,这种方式如果能成功较为稳妥。
为了数据库文档,将三天前的日志清除就可以。

#将指定时间之前的日志清理
purge binary logs before '2021-12-01 12:00:00';

#.后面的数字是始终顺序递增的,找到三天前的数字最大的一个文件,执行命令将指定日志文件之前的日志清除
purge binary logs to 'mysql-bin.000003';

如果执行以上命令清除失败或对数据库产生了影响,那就恭喜你,中奖了。
可以连接上mysql尝试执行下flush logs命令,所有主从数据库都执行一下,如果恢复正常,就可以了。
如果恢复不了,那么需要重启数据库,service mysqld restart 。

恢复正常后,可以通过执行SQL来临时配置mysql-bin文件只存储三天,重启mysql后该配置会失效:

 set global expire_logs_days = 3;

修改配置为文件可以永久生效,但是需要重启一次mysql服务:

//关闭MySql服务
service mysqld stop
//vi /etc/my.cnf
[mysqld]
...
#开启binary log
log-bin=mysql-bin

#日志超过3天自动过期
expire_logs_days = 3
...

//开启MySql服务
service mysqld start
// 查看mysql状态
service mysqld status

Mysql主从同步mysql-bin的log文件过大资源占满(mysql服务器资源爆满)_第4张图片

连接不上数据库或以上操作失败

使用手动清理的方式(存在风险),将mysql-bin.xxx的文件从小到大手动删除一下,只保留近几天的。
删除完成后同样的设置下日志文件只存储三天,然后重启数据库(如果数据库不能连接,可以连接的话暂时不用重重启),然后同样的和上面一样将日志文件设置为只存储三天。

也可以手动写脚本,执行定时任务去删除日志文件。

如果删除后出现数据无法同步的问题,可以查看从节点mysql的错误日志,将找不到的日志文件手动创建出来并且chomd一下权限。

完美解决!!

男人到死仍是少年!!!

Mysql主从同步mysql-bin的log文件过大资源占满(mysql服务器资源爆满)_第5张图片

你可能感兴趣的:(数据库相关,mysql-bin,mysql资源爆满,mysql日志,mysql主从同步,mysql数据库卡顿)