我将localhost中的MySQL用作在R中执行统计信息的“查询工具”,也就是说,每次运行R脚本时,我都会创建一个新的数据库(A),创建一个新的表(B),然后将数据导入B ,提交查询以获取所需信息,然后删除B并删除A。
对于我来说,它工作正常,但是我意识到ibdata文件的大小正在迅速增加,我没有在MySQL中存储任何内容,但是ibdata1文件已超过100 MB。
我在设置中使用了或多或少的默认MySQL设置,是否可以在固定的时间后自动收缩/清除ibdata1文件?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这ibdata1并没有减少,这是MySQL的一个特别令人讨厌的功能。该ibdata1文件实际上不能缩小,除非你删除所有数据库,删除文件并重新加载转储。
但是您可以配置MySQL,以便将每个表(包括其索引)存储为单独的文件。这样ibdata1就不会增长那么大。根据Bill Karwin的评论,默认情况下从MySQL 5.6.6版本开始启用此功能。
不久前我做了这个。但是,要将服务器设置为对每个表使用单独的文件,您需要进行更改my.cnf才能启用此功能:
[mysqld] innodb_file_per_table=1 http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html
当您要回收空间时,ibdata1实际上必须删除文件:
对和数据库以外的mysqldump所有数据库,过程,触发器等执行amysqlperformance_schema 删除除上述2个数据库以外的所有数据库 停止mysql 删除ibdata1和ib_log文件 启动mysql 从转储还原 当您在步骤5中启动MySQL时,ibdata1和ib_log文件将被重新创建。
现在您可以出发了。创建新数据库进行分析时,这些表将位于单独的ibd文件中,而不是中ibdata1。由于通常在不久之后ibd删除数据库,因此文件将被删除。
http://dev.mysql.com/doc/refman/5.1/zh-CN/drop-database.html
您可能已经看到了:http : //bugs.mysql.com/bug.php?id=1341
通过使用该命令ALTER TABLE ENGINE=innodb或OPTIMIZE TABLE 一个命令,可以将数据和索引页面从ibdata1提取到单独的文件。但是,除非执行上述步骤,否则ibdata1将不会收缩。
关于information_schema,这是不必要的,也没有可能删除。实际上,它只是一堆只读视图,而不是表。而且没有与之关联的文件,甚至没有数据库目录。在informations_schema使用内存数据库引擎和被丢弃,一旦停止再生/重启mysqld的。参见https://dev.mysql.com/doc/refman/5.7/en/information-schema.html。来源:stack overflow