/var/lib/mysql 文件夹中有多个 binlog

/var/lib/mysql 文件夹中有多个 binlog

最近我做了一个网站和服务器迁移。一开始运行良好,但最近我发现服务器已经消耗了 100% 的存储空间,并且/var/lib/mysql目录中有多个 bin 文件:

binlog.000418
binlog.000591
binlog.000328
binlog.000264
.......

其消耗的大小几乎是30GB

有人能帮助我了解这个问题的根本原因并找到解决方案吗?

答案1

什么是 binlog?

引自https://dev.mysql.com/doc/refman/8.0/en/binary-log.html

二进制日志包含描述数据库更改(例如表创建操作或对表数据的更改)的“事件”。它还包含可能已进行更改的语句的事件(例如,未匹配任何行的 DELETE),除非使用基于行的日志记录。二进制日志还包含有关每个语句更新数据所用时间的信息。二进制日志有两个重要用途:

  • 对于复制,复制源服务器上的二进制日志提供了要发送到副本的数据更改记录。源服务器将其二进制日志中包含的信息发送到其副本服务器,副本服务器会重现这些事务,以进行与源服务器上相同的数据更改。请参见第 17.2 节“复制实现”。

  • 某些数据恢复操作需要使用二进制日志。恢复备份后,将重新执行备份后记录的二进制日志中的事件。这些事件使数据库从备份点开始保持最新状态。请参见第 7.5 节“时间点(增量)恢复”。

删除旧的binlog:

要删除旧的 binlog,你可以使用PURGE BINARY LOGS语句。打开mysql并运行此语句(将日期替换为您所需的日期):

PURGE BINARY LOGS BEFORE '2023-11-17 08:00:00';

禁用 binlog:

打开该文件/etc/mysql/my.cnf并在文件底部添加以下行:

[mysqld]
skip-log-bin

不要忘记重新启动 MySQL 服务:

sudo service mysql restart

限制 binlog 大小:

打开该文件/etc/mysql/my.cnf并在文件底部添加以下行:

[mysqld]
binlog_expire_logs_seconds = 86400  # 1 day
max_binlog_size = 104857600         # 100M

不要忘记重新启动 MySQL 服务:

sudo service mysql restart

相关内容