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 / 问题 / 281289
Accepted
ParoX
ParoX
Asked: 2020-12-11 09:53:17 +0800 CST2020-12-11 09:53:17 +0800 CST 2020-12-11 09:53:17 +0800 CST

我可以禁用二进制日志以暂时节省空间吗

  • 772

我正在使用 percona mysql 8。

我不使用任何类型的复制,但我读到二进制日志对于数据恢复很有用。我想在运行pt-online-schema-change不影响 OPTIMIZE 表时关闭 binlogging 并刷新它们。

完成后,我想重新打开 binlogging(然后努力移动到有更多空间的服务器)。

这是安全和推荐的吗?我需要优化一个表并且不能脱机,除非我删除 50GB 的二进制日志,否则制作表的副本会使我空间不足

mysql percona
  • 3 3 个回答
  • 1489 Views

3 个回答

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2020-12-11T10:20:22+08:002020-12-11T10:20:22+08:00

    当您使用set-vars启动 pt-online-schema-change 时,您需要做的是设置sql_log_bin为 0

    pt-online-schema-change --set-vars sql_log_bin=0
    

    您的二进制日志永远不会知道其中的区别。

    请确保您有足够的空间用于临时表 ( _tablename_new)。

    更新 2020-12-10 14:45 EST

    如果您不在此服务器上进行备份,那么您可以运行

    PURGE BINARY LOGS BEFORE CURDATE() - INTERVAL 5 DAY;
    

    保留最后 5 天的二进制日志,或者如果您希望所有二进制日志都消失,然后运行

    RESET MASTER;
    

    警告 !!!

    在此之前,请确定服务器是否作为主服务器运行复制。

    更新 2020-12-10 16:05 EST

    由于您正在运行 pt-online-schema-change,因此您应该像这样运行它

    pt-online-schema-change --set-vars sql_log_bin=0 --alter "ENGINE=InnoDB"
    

    这只会创建一个碎片整理的临时表。碰巧--analyze-before-swap是默认值。这意味着ANALYZE TABLE在交换旧表和新表之前,临时表已对其执行。OPTIMIZE TABLE这与InnoDB 表具有完全相同的效果。

    正如nbk 的评论中提到的,您应该确保有备份。通过设置复制并从从属设备进行备份,您还可以为自己创造一个美好的世界。

    • 3
  2. Jehad Keriaki
    2020-12-11T13:22:32+08:002020-12-11T13:22:32+08:00

    简短的回答是,不,它不安全,不推荐。

    我了解这些日志不是用于复制,而是用于数据恢复。这些对于执行“时间点”恢复很有用。但是,您必须有一个有效的先前完整备份才能使二进制日志有用。

    我的建议:

    1. 对您的数据库进行完整备份 [使用 mysqldump 或任何其他方式]
    2. 刷新日志[并标记时间]
    3. 将 binlogs 文件复制到安全的地方 [备份它们]
    4. 在标记时间之前清除二进制日志
    5. 运行您的优化语句。在此期间,binlogs 仍然会被写入,但大小会最小

    高温高压

    • 0
  3. Rick James
    2020-12-20T10:17:57+08:002020-12-20T10:17:57+08:00

    当删除一张大表的很多行时,这样做效率更高

    CREATE TABLE new LIKE real;
    INSERT INTO new
        SELECT ... (the rows to keep);  -- the slow part
    RENAME TABLE real TO old,
                 new TO real;    -- fast, atomic
    DROP TABLE old;
    

    如果原始表是用 构建的innodb_file_per_table=ON,那么这个过程将把空闲空间还给操作系统;不需要OPTIMIZE。

    比INSERT..SELECT(每行)快得多DELETE。

    如果您要删除“旧”数据并且需要再次清除,请考虑分区。

    有关这些和其他删除技术的更多详细信息:http: //mysql.rjweb.org/doc.php/deletebig

    binlog中的空间——

    • DELETEwith binlog_format = ROW: 每行删除一个条目。
    • DELETEwith STATEMENT:整个语句的一个条目。
    • INSERT: 每行一个条目。
    • OPTIMIZE:(我认为)整个声明的一个条目。

    也就是说,这就是DELETE使二进制日志膨胀的原因。OPTIMIZE很长一段时间都在锁定桌子。

    • 0

相关问题

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

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

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

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

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

Sidebar

Stats

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

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 3 个回答
  • Marko Smith

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

    • 4 个回答
  • 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
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • 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
    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