点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!
前 言binlog日志,即二进制日志(Binary Log),是MySQL数据库中一种用于记录数据库操作的日志文件。它以二进制形式记录了数据库中所有更改数据的操作,包括插入、更新、删除等。1.1 binlog日志的主要作用有以下几点
- 数据恢复当数据库发生故障时,可以通过binlog日志进行数据恢复,将数据库恢复到某个特定的时间点。
- 主从复制在MySQL的主从复制架构中,主服务器会将binlog日志发送给从服务器,从服务器根据这些日志来同步数据,实现数据的一致性。
- 审计通过分析binlog日志,可以查看数据库的操作历史,帮助开发者和运维人员进行问题排查和性能优化。
- 数据变更跟踪binlog日志可以用于跟踪数据库中的数据变更,方便开发者了解数据变化情况。
Binlog是一个很重要的日志,对数据库起着至关重要的影响,前些天跟大家讲过如何使用binlog日志恢复误删的数据,今日本文将介绍在日常操作中如何规范,安全的清理binlog日志。1.2 适用范围场景:binlog日志一直在写入有可能是主库在执行修改操作之后从库一直追数据,或是数据迁移导致binlog不断上涨。
磁盘空间要满了,但是binlog日志还在写,我们可以在确保数据库安全的前提下手动删除一些binlog日志。
操作规范
2.1 查看数据库主从延迟
注意事项:在检查数据库前要检查IP和端口号。切换到teledb用户进库,使用show slave status命令,或者云翼看主从延迟,有主从延迟的机器要先解决主从延迟,不然binlog日志删除了有问题无法恢复会很严重。检查看到库的延迟都为0就可以继续执行后续操作。
2.2 清理binlog日志
注意事项:删除是很危险的操作,操作前要有至少2人以上检查。进入到binlog日志的目录:
/nvme*/teledb_*/mysql_data880*/binlog
LL这个目录,找到7天前的日志的名字记录下:进库后:
purge binary logs to 'mysql-bin.**';
这个命令会清除这一个日志之前的所有日志。遇到一种情况,就是有一次容灾库由于一直在从生产追数据,binlog不停的写入数据,磁盘占用到100%了把库给撑爆了,这种情况我们进不了库去purge binlog,就只能手动删除一些binlog文件等待数据库自动恢复起来了再进数据库去使用purge命令。清理完成后再去确认一下主从库运行状态是否正常就可以了。有时候我们遇到主从关系异常,常规方法修复不了就只能使用重建的方式了。2.3 重建步骤先找到存放数据的目录:然后删掉所有的数据。注意删除操作需要有人陪同的情况下才能做!备库开启端口:在主库执行:从库执行解压:在数据库内执行:设置purge gtid 复制上面xtrabackup_binlog_info文件内容。如果跑错的话跑一遍:
reset master
再执行以上内容。然后指定主从关系:最后开启主从同步:
Start slave;
完成以上操作从库重建就已经完成了。重建之后可以设置binlog日志的存放时间,这样就可以避免再次因为binlog日志过多占用把库给撑爆了。2.4 设置binlog日志的存储时间在MySQL中,可以通过修改`expire_logs_days`参数来设置binlog日志的存储时间。以下是具体操作步骤:1)打开MySQL配置文件`my.cnf`(通常位于`/etc/mysql/`或`/etc/mysql/mysql.conf.d/`目录下)2)在`[mysqld]`部分添加或修改`expire_logs_days`参数,设置为所需的天数例如,将binlog日志的存储时间设置为7天:
```
[mysqld]
expire_logs_days = 7
```
3)保存并关闭配置文件4)重启MySQL服务以使更改生效在Linux系统中,可以使用以下命令重启MySQL服务:
```
sudo service mysql restart
```
完成以上步骤后,MySQL将会根据设置的`expire_logs_days`值自动删除超过指定天数的binlog日志。总之,binlog日志在数据库管理和维护中起着至关重要的作用,对于保证数据安全、提高数据库性能和排查问题具有重要意义。
END