AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 47046
Accepted
lamp_scaler
lamp_scaler
Asked: 2013-07-27 00:20:49 +0800 CST2013-07-27 00:20:49 +0800 CST 2013-07-27 00:20:49 +0800 CST

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

  • 772

我使用了 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

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

mysql binlog
  • 5 5 个回答
  • 48406 Views

5 个回答

  • Voted
  1. Best Answer
    Abdul Manaf
    2013-07-27T00:42:34+08:002013-07-27T00:42:34+08:00

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

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

    PURGE BINARY LOGS TO 'mysql-bin.000019';
    

    如果您需要清除所有日志,请喜欢

    PURGE BINARY LOGS TO 'mysql-bin.000025';
    

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

    更新

    你可以试试

    RESET MASTER;
    

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

    与 PURGE BINARY LOGS的效果RESET MASTER在两个关键方面有所不同:

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

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

    CAVEAT 来自 RolandoMySQLDBA

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

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

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

    • 12
  2. carla
    2017-07-12T10:20:14+08:002017-07-12T10:20:14+08:00

    就我而言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,重新启动,清除文件(现在成功),再次注释该行,然后重新启动。在此之后,文件被删除并且不再创建。

    • 10
  3. sysadmiral
    2014-08-21T14:48:47+08:002014-08-21T14:48:47+08:00

    我不确定这是否发生在您身上,但在我的情况下,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设置并再次开始正常工作。

    • 8
  4. grobmotoriker
    2014-10-17T05:59:14+08:002014-10-17T05:59:14+08:00

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

    PURGE BINARY LOGS BEFORE NOW();
    

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

    • 6
  5. c ccx
    2018-02-13T01:08:02+08:002018-02-13T01:08:02+08:00

    您可以使用以下命令轻松删除所有日志:

    PURGE BINARY LOGS BEFORE NOW();
    

    或者用引号中的任何日期替换 func NOW():

    PURGE BINARY LOGS BEFORE '2018-02-15 00:00:00';
    

    expire_logs_days = 10或者您可以在 my.cnf中自动执行此操作。默认expire_logs_days为0 = 从不删除日志。

    (来源)

    • 1

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve