我正在使用MySQL(8.0.33-winx 64,for Windows)和Python 3以及mysql.connector
包。
最初我的mysql-8.0.33-winx64\data
文件夹相当小:〈100 MB。
然后,在对CREATE TABLE...
、INSERT...
和DROP TABLE...
进行了几次测试之后,我注意到即使在我完全删除表之后,data
文件夹仍在继续增长:
#innodb_redo
文件夹似乎保持在最大100 MB#innodb_temp
似乎很小binlog.000001
:这一个似乎是罪魁祸首:即使我把table掉了它也会继续变大!
删除表后如何清理此数据存储,避免MySQL使用未使用的磁盘空间?
是否可以直接从Python3 mysql.connector
API?或者从要执行的SQL命令(我已经尝试了“OPTIMIZE”但没有成功)?或者我需要手动使用OS函数(os.remove(...)
)?
注意:配置文件似乎在可移植Windows版本的mysql-8.0.33-winx64\data\auto.cnf
中(未用作服务,但以mysqld --console
启动)(第一次运行服务器后不会创建默认配置文件,我们可以在mysql-8.0.33-winx64\my.cnf
中创建它)
2条答案
按热度按时间ngynwnxp1#
您可以禁用二进制日志,但只能通过在
my.cnf
文件中设置disable_log_bin
并重新启动MySQL服务器。(请参阅Disable MySQL binary logging with log_bin variable)您不能动态更改二进制日志。请参阅https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_log_bin您可以使二进制日志在滚动到新的binlog文件时自动使旧日志过期。这有助于限制总存储空间。请参阅https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds
在决定禁用二进制日志之前,您确实需要了解它的用途。您可能需要它!
二进制日志通常用于三或四件事:
你能编辑以澄清撤销日志与bin日志之间的区别吗?
二进制日志用于记录对数据的逻辑更改。在COMMIT事务之前,不会向二进制日志中写入任何内容。它不用于回滚,因为根据定义,二进制日志中的任何内容都已提交。二进制日志适用于MySQL中的所有存储引擎。
Undo日志仅适用于InnoDB存储引擎。当您在事务期间对数据进行更改时,旧版本的数据会添加到Undo日志(在某些文档中也称为回滚段)。因此,如果您ROLLBACK,InnoDB可以恢复原始数据。如果您COMMIT,则该事务的Undo日志内容将被丢弃。
备注:
my.cf
中设置disable_log_bin
并重新启动MySQL服务器不会删除旧的binlog。disable_log_bin
并 * 首先 * 重新启动服务器,* 然后 * 执行FLUSH LOGS; PURGE BINARY LOGS BEFORE NOW();
,则不会删除旧的binlogFLUSH LOGS; PURGE BINARY LOGS BEFORE NOW();
,然后才编辑配置mysql-8.0.33-winx64\my.cnf
,包括:然后删除旧的日志,并且不会创建新的binlog。
6jjcrrmo2#
binlog用于存储写入更改。它只存储完整事务,因此不包含部分写入。如果发生意外情况(例如删除表),则binlog将非常有用,以便您能够恢复这些表。它还可用于复制目的。请参阅https://dev.mysql.com/doc/refman/8.0/en/binary-log.html
现在,如果您完全确定不再需要binlog,那么可以清除它们,如
参见https://dev.mysql.com/doc/refman/8.0/en/purge-binary-logs.html