Steve Dekart Asked: 2023-05-24 03:41:08 +0800 CST2023-05-24 03:41:08 +0800 CST 2023-05-24 03:41:08 +0800 CST 巨大的 /mysql/ 文件夹大小 - 大约 289gb 772 该站点有 504 个错误,我发现这是由于内存不足造成的。该站点本身重 54GB,磁盘空间为 500GB。 我发现该/var/lib/mysql/文件夹的重量高达 289GB。据我了解,很难称之为常态。 如何解决? mysql 1 个回答 Voted Best Answer Bill Karwin 2023-05-24T05:23:02+08:002023-05-24T05:23:02+08:00 你问: 如何减少生成的 binlog 数量。它们每 5-7 分钟创建 1 GB 二进制日志是根据您执行的 INSERT/UPDATE/DELETE 的速率在源实例上生成的。写入数据库的次数越多,二进制日志积累的速度就越快。 首先:问问自己是否真的需要二进制日志。如果您禁用对二进制日志的写入,这当然会 100% 消除它们。 https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#option_mysqld_log-bin 要禁用二进制日志记录,您可以在启动时指定--skip-log-bin或--disable-log-bin选项。如果指定并且还指定了这些选项中的任何一个--log-bin,则以后指定的选项优先。禁用二进制日志记录时,log_bin系统变量设置为OFF. 在 MySQL 5.x 中,禁用它的方式有所不同:删除(或至少注释掉)log_binmy.cnf 中的变量并重新启动 MySQL 服务器。 第二:binlog_format=STATEMENT如果您决定确实需要二进制日志,则可以使用or减小大小binlog_format=MIXED。基于 ROW 的二进制日志格式有很多优点,如果可能的话我更喜欢它。但是这种日志格式往往会导致日志变大。 第三:如果您确实需要 binlogs 为 ROW 格式,您可以使用binlog_row_image=MINIMALwhich 方法来省略未从每个记录的 UPDATE 或 DELETE 事件的事件中更改的列。INSERT 事件的日志中仍然需要所有列。 第四:你为什么要写那么多数据库?您的应用程序是否可以重新设计以仅在缓存中进行内存中的某些更新?这样只有一小部分数据更改会提交到数据库,并且二进制日志的增长速度会更低。 第五:如果你不能做任何其他的改变,那么增加你的存储卷的大小,直到它适应你的二进制日志的需要。如果您的流量很大,您确实需要基础架构资源来支持它。
你问:
二进制日志是根据您执行的 INSERT/UPDATE/DELETE 的速率在源实例上生成的。写入数据库的次数越多,二进制日志积累的速度就越快。
首先:问问自己是否真的需要二进制日志。如果您禁用对二进制日志的写入,这当然会 100% 消除它们。
https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#option_mysqld_log-bin
在 MySQL 5.x 中,禁用它的方式有所不同:删除(或至少注释掉)
log_bin
my.cnf 中的变量并重新启动 MySQL 服务器。第二:
binlog_format=STATEMENT
如果您决定确实需要二进制日志,则可以使用or减小大小binlog_format=MIXED
。基于 ROW 的二进制日志格式有很多优点,如果可能的话我更喜欢它。但是这种日志格式往往会导致日志变大。第三:如果您确实需要 binlogs 为 ROW 格式,您可以使用
binlog_row_image=MINIMAL
which 方法来省略未从每个记录的 UPDATE 或 DELETE 事件的事件中更改的列。INSERT 事件的日志中仍然需要所有列。第四:你为什么要写那么多数据库?您的应用程序是否可以重新设计以仅在缓存中进行内存中的某些更新?这样只有一小部分数据更改会提交到数据库,并且二进制日志的增长速度会更低。
第五:如果你不能做任何其他的改变,那么增加你的存储卷的大小,直到它适应你的二进制日志的需要。如果您的流量很大,您确实需要基础架构资源来支持它。