更新 expire_logs_days 参数并重新启动 sql 后多久会删除旧的 binlog?

Mik*_*e B 18 mysql replication mysql-5 mysql-5.1 binlog

MySQL 5.1.x | InnoDB | 视窗

我的 mysql 数据目录开始被 bin 日志填满。

我目前在 Windows mysql 服务器中配置了以下设置:

[mysqld]
log-bin
server-id=1
binlog-do-db=foodb1
binlog-do-db=foodb2
expire_logs_days=25
Run Code Online (Sandbox Code Playgroud)

我打算将 expire_logs_days 设置更改为expire_logs_days=10并退回 mysql 服务。进行此更改后,我希望旧的 bin 日志多久能清除。

这是否仅作为夜间计划任务的一部分完成?或者这应该是立即的?

Rol*_*DBA 32

它将在 mysql 启动时立即处理。

您不必等待 mysql 重新启动。

首先expire_logs_days在/etc/my.cnf中设置为10

[mysqld]
log-bin
server-id=1
binlog-do-db=foodb1
binlog-do-db=foodb2
expire_logs_days=10
Run Code Online (Sandbox Code Playgroud)

接下来,登录mysql并运行这个

PURGE BINARY LOGS BEFORE (date(now()) + interval 0 second - interval 10 day);
Run Code Online (Sandbox Code Playgroud)

注意查询的日期和时间

mysql> select date(now()) + interval 0 second - interval 10 day;
+---------------------------------------------------+
| date(now()) + interval 0 second - interval 10 day |
+---------------------------------------------------+
| 2012-12-11 00:00:00                               |
+---------------------------------------------------+
1 row in set (0.00 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

因此,PURGE BINARY LOGS命令将删除日期时间戳早于 的所有二进制日志2012-12-11 00:00:00

最后,运行这个命令

SET GLOBAL expire_logs_days = 10;
Run Code Online (Sandbox Code Playgroud)

就是这样。安装expire_logs_days不需要重新启动。

至于复制参数,是需要重启。

  • 请注意,现在 MySQL 8.0 中不推荐使用 expire_logs_days(根据@RolandoMySQLDBA 提供的链接中的详细信息)。使用 binlog_expire_logs_seconds 代替前进。 (2认同)