MySQL 中 expire_logs_days 可以小于 1 天吗?

MySQL 中 expire_logs_days 可以小于 1 天吗?

所以……昨天我收到了一封“事后邮件”,内容是有关我运行的一项服务已启动的活动。现在数据库服务器正在遭受重击,二进制日志复制的速度大约为 300mb/分钟。你可以想象,这会以相当快的速度占用空间。

我通常的二进制日志有效期是 7 天,这根本不够。我只能截断日志,只保留最后 4 个小时的日志(我正在使用以下命令验证复制是否是最新的mk-heartbeat):

PURGE MASTER LOGS BEFORE DATE_SUB( NOW(), INTERVAL 4 HOUR);

我只是每隔几个小时从 cron 运行一次以度过难关,但它让我对的最小值产生了疑问expire_logs_days。我还没有遇到小于 1 的值,但这并不意味着不可能。http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_expire_logs_days给出的类型为数字,但没有表明它是否需要整数。

答案1

事实上,有一种方法可以模拟它。

以下是清除二进制日志至 1 小时的步骤。

步骤 01)创建一个 SQL 脚本,删除所有时间戳超过一小时的二进制日志:

echo "FLUSH LOGS;" > /usr/bin/purge.sql
echo "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 1 HOUR;" >> /usr/bin/purge.sql

步骤 02)创建一个 shell 脚本(/usr/bin/purge.sh)来mysql调用purge.sql

mysql -uroot -p... < /usr/bin/purge.sql

步骤 03) 使/usr/bin/purge.sh可执行文件

chmod +x /usr/bin/purge.sh

步骤 04)添加usr/bin/purge.sh到 crontab 中,每小时启动一次

0 * * * * /usr/bin/purge.sh

试一试 !!!

答案2

实验是当晚的重点......

mysql> 设置@@global.expire_logs_days=0.75;
错误 1232 (42000):变量“expire_logs_days”的参数类型不正确
mysql> 设置@@global.expire_logs_days=.75;
错误 1232 (42000):变量“expire_logs_days”的参数类型不正确
mysql> 设置@@global.expire_logs_days=3.4;
错误 1232 (42000):变量“expire_logs_days”的参数类型不正确
mysql> 设置@@global.expire_logs_days=3/4;
错误 1232 (42000):变量“expire_logs_days”的参数类型不正确
mysql> 设置@@global.expire_logs_days=F;
错误 1232 (42000):变量“expire_logs_days”的参数类型不正确
mysql> 设置@@global.expire_logs_days=0xF;
错误 1232 (42000):变量“expire_logs_days”的参数类型不正确
mysql> 设置@@global.expire_logs_days=1;
查询成功,影响 0 行(0.00 秒)

答案3

该页面确实说范围是 0-99..所以是的,它是一个整数。

0 = 没有过期..

你让我想知道 0.5 会做什么。我想它会忽略 .5 部分并且不会使它们过期。

答案4

Mysql(社区)版本 8.0.17-1.sles12 - OpenSUSE tumbleweed 2019.10.02

mysql> SET GLOBAL expire_logs_days = 4;

ERROR 3683 (HY000): The option expire_logs_days and binlog_expire_logs_seconds
cannot be used together. Please use binlog_expire_logs_seconds to set the expire
time (expire_logs_days is deprecated)

..

SET PERSIST binlog_expire_logs_seconds = 86400;

我添加了这个 my.cnf 文件

[mysqld]
binlog_expire_logs_seconds = 86400
expire_logs_days = 1

相关内容