我在 localhost 中使用 MySQL 作为在 R 中执行统计的“查询工具”,也就是说,每次我运行 R 脚本时,我都会创建一个新数据库(A),创建一个新表(B),将数据导入 B ,提交查询得到我需要的,然后我丢B,丢A。
它对我来说工作正常,但我意识到 ibdata 文件大小正在迅速增加,我在 MySQL 中没有存储任何内容,但 ibdata1 文件已经超过 100 MB。
我正在使用或多或少的默认 MySQL 设置进行设置,有没有办法在固定时间后自动收缩/清除 ibdata1 文件?
ibdata1不缩小是 MySQL 的一个特别烦人的特性。除非您删除所有数据库,删除文件并重新加载转储,否则该ibdata1文件实际上无法缩小。
ibdata1
但是您可以配置 MySQL,以便将每个表(包括其索引)存储为单独的文件。这样ibdata1就不会长得那么大,从 MySQL 的 5.6.6 版开始默认启用此功能。
不久前我做了这个。但是,要将您的服务器设置为对每个表使用单独的文件,您需要更改my.cnf以启用此功能:
my.cnf
[mysqld] innodb_file_per_table=1
https://dev.mysql.com/doc/refman/5.6/en/innodb-file-per-table- tablespaces.html
由于您想从中回收空间,因此ibdata1实际上必须删除该文件:
mysqldump
mysql``performance_schema
ib_log
当您在步骤 5 中启动 MySQL 时,将重新创建ibdata1和文件。ib_log
现在你可以走了。当您为分析创建新数据库时,表将位于单独的ibd*文件中,而不是位于ibdata1. 由于您通常会在不久之后删除数据库,因此ibd*文件将被删除。
ibd*
http://dev.mysql.com/doc/refman/5.1/en/drop- database.html
你可能已经看到了: http ://bugs.mysql.com/bug.php?id=1341
通过使用命令ALTER TABLE <tablename> ENGINE=innodb或OPTIMIZE TABLE <tablename>可以从 ibdata1 中提取数据和索引页面到单独的文件中。但是,除非您执行上述步骤,否则 ibdata1 不会缩小。
ALTER TABLE <tablename> ENGINE=innodb
OPTIMIZE TABLE <tablename>
关于information_schema,没有必要也不可能放弃。它实际上只是一堆只读视图,而不是表。并且没有与它们关联的文件,甚至没有数据库目录。它informations_schema正在使用内存数据库引擎,并在 mysqld 停止/重新启动时被删除并重新生成。请参阅https://dev.mysql.com/doc/refman/5.7/en/information- schema.html。
information_schema
informations_schema