
这
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
所有数据库,过程,触发器等执行amysql``performance_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 <tablename> ENGINE=innodb或
OPTIMIZE TABLE<tablename>一个命令,可以将数据和索引页面从ibdata1提取到单独的文件。但是,除非执行上述步骤,否则ibdata1将不会收缩。
关于
information_schema,这是不必要的,也没有可能删除。实际上,它只是一堆只读视图,而不是表。而且没有与之关联的文件,甚至没有数据库目录。在
informations_schema使用内存数据库引擎和被丢弃,一旦停止再生/重启mysqld的。参见https://dev.mysql.com/doc/refman/5.7/en/information-
schema.html。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)