为什么清除或刷新后 MySQL bin 日志文件仍然存在?

lam*_*ler 14 mysql binlog mysqlbinlog

我使用过 PURGE BINARY LOGS 和 FLUSH LOGS,但 mysql 目录仍然包含这些文件:

mysql-bin.000025
mysql-bin.000024
mysql-bin.000023
mysql-bin.000022
mysql-bin.000021
mysql-bin.000020
mysql-bin.000019
mysql-bin.index
Run Code Online (Sandbox Code Playgroud)

是否有使用命令不起作用的原因?这些文件占用了大量空间。我想安全地摆脱它们。

Abd*_*naf 11

PURGE BINARY LOGS语句删除指定日志文件名或时间戳之前的日志索引文件中列出的所有二进制日志文件。删除的日志文件也会从索引文件中记录的列表中删除,以便给定的日志文件成为列表中的第一个。

我希望你已经mysql-bin.000019使用命令清除了二进制日志

PURGE BINARY LOGS TO 'mysql-bin.000019';
Run Code Online (Sandbox Code Playgroud)

如果您需要清除所有日志,请执行以下操作

PURGE BINARY LOGS TO 'mysql-bin.000025';
Run Code Online (Sandbox Code Playgroud)

这将删除二进制日志多达mysql-bin.000025.

更新

你可以试试

RESET MASTER;
Run Code Online (Sandbox Code Playgroud)

RESET MASTER 删除索引文件中列出的所有二进制日志文件,将二进制日志索引文件重置为空,并创建一个新的二进制日志文件

的影响RESET MASTER从2种键方式对这些PURGE二进制日志的不同:

  1. RESET MASTER 删除索引文件中列出的所有二进制日志文件,只留下一个数字后缀为 .000001 的空二进制日志文件,而编号不会被 PURGE BINARY LOGS 重置。

  2. RESET MASTER不打算在任何复制从站运行时使用。RESET MASTER当从属运行时使用的行为未定义(因此不受支持),而PURGE BINARY LOGS在复制从属运行时可以安全使用。

RolandoMySQLDBA 的警告

如果在RESET MASTERSlaves 连接并运行的情况下运行,每个 Slave 的 IO 线程将立即失去位置。复制因此被破坏,您将不得不花时间再次同步所有 Slaves 上的数据。如果你想在不破坏复制完整性的情况下安全地从 Master 中删除二进制日志,你可以这样做:

  • SHOW SLAVE STATUS\G在每个 Slave 上运行。
  • 注意Relay_Master_Log_File. 这是其最新语句在 Slave 中成功执行的二进制日志)。
  • 从 的所有显示中SHOW SLAVE STATUS\G,确定哪个Relay_Master_Log_File是最旧的(例如,'mysql-bin.00123')。
  • 你可以跑PURGE BINARY LOGS TO 'mysql-bin.00123';没有一个奴隶会失去它的位置。

整体效果?这将在 Master 上留下二进制日志,其语句尚未在所有 Slaves 上执行。


car*_*rla 9

就我而言,PURGE BINARY根本没有删除任何内容。

我的分区使用率为 100%(我必须稍微清理我的慢查询日志,以便有足够的空间重新启动 mysql),所以我做的第一件事是更改/etc/my.cnf注释该行log-bin=mysql-bin(不需要它)在这台服务器上,我忘了删除它),然后我重新启动了 mysql (这是必需的,因为有排队的查询阻止PURGE BINARY执行)。

之后,我跑了,PURGE BINARY但什么也没发生。所以我阅读了手册并发现:

如果服务器未使用 --log-bin 选项启动以启用二进制日志记录,则此语句无效。

所以我log-bin=mysql-bin在我的/etc/my.cnf. 在此之后,文件被删除并且不再创建。


小智 7

我不确定这是否发生在您身上,但在我的情况下,MySQL 已停止“循环”日志,并且 mysql-bin.index 文件因无效的 binlog 文件条目而“损坏”。

具体来说,索引文件从 mysql-bin.000001 开始,然后到达 mysql-bin.000220,但不知何故又从 001 开始。当我将其与服务器上的文件进行比较时,我可以看到我的文件从 001 到022.

起初我尝试过,PURGE LOGS TO 'mysql-bin.000022';但这不起作用。

最后,我停止了 MySQL 并手动编辑了索引文件,直到它与我服务器上的文件匹配为止。当我重新启动 MySQL 时,它会清理 binlog 文件以尊重expire_logs_days设置并再次开始正常工作。


小智 5

这对我有用:(MySQL 服务器版本:5.6.14)

PURGE BINARY LOGS BEFORE NOW();
Run Code Online (Sandbox Code Playgroud)

删除我系统上的所有二进制日志。