MySQL:减少MyISAM表的ibdata文件大小
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL:减少MyISAM表的ibdata文件大小,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2457字,纯文字阅读大概需要4分钟。
内容图文
![MySQL:减少MyISAM表的ibdata文件大小](/upload/InfoBanner/zyjiaocheng/910/993f6d96882145198f6cb3f8ce7e63ba.jpg)
我的问题实际上非常类似于此问题,并且对于InnoDB Engine表的案例也包含了一个很好的答案:
我注意到drop schema不会缩小ibdata文件,所以我已经找到了一种配置数据库的方法,以便在删除模式后减小大小.
我发现许多链接谈论InnoDB和每个文件保存表的方式,以便它自己的.frm文件将包含表数据,它将被减少.
但是MyISAM表会发生什么(表大小超过5G).
解决方法:
ibdata1和MyISAM是互斥的.
您应该做的第一件事是计算有多少表使用两个存储引擎:
SELECT COUNT(1) EngineCount,engine
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema','performance_schema','mysql')
GROUP BY engine;
如果有些表是InnoDB:
执行我的InnoDB清理
> Howto: Clean a mysql InnoDB storage engine?
> https://dba.stackexchange.com/questions/8982/is-there-any-best-way-to-reduce-the-size-of-ibdata-in-mysql/8983#8983
如果您只有MyISAM表而没有InnoDB表:
首先,消除InnoDB的任何痕迹
请执行下列操作:
STEP01)将此添加到my.cnf
[mysqld]
skip-innodb
STEP02)服务mysql重启
STEP03)rm -f / var / lib / mysql / ibdata1 / var / lib / mysql / ib_logfile *
完成这些步骤后,您可以执行每个MyISAM表的压缩,如下所示:
对于mydb.mytable表是MyISAM,只需运行以下命令之一:
> OPTIMIZE TABLE mydb.mytable;
> ALTER TABLE mydb.mytable ENGINE = MyISAM; ANALYZE TABLE mydb.mytable;
如果要对所有MyISAM表进行碎片整理,这里有一个shell脚本…
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SELECT CONCAT('OPTIMIZE TABLE ',table_schema,'.',table_name,';') "
SQL="${SQL} FROM information_schema.tables "
SQL="${SQL} WHERE engine='MyISAM' AND table_schema NOT IN "
SQL="${SQL} ('information_schema','performance_schema','mysql')"
mysql ${MYSQL_CONN} -ANe"${SQL}" > GlobalMyISAMOptmizeTable.sql
less GlobalMyISAMOptmizeTable.sql
一旦您可视地信任脚本,就可以运行它
mysql ${MYSQL_CONN} < GlobalMyISAMOptmizeTable.sql
试试看 !!!
更新2012-07-25 09:52美国东部时间
我想澄清一下我对压缩MyISAM的建议
我刚才说过
> OPTIMIZE TABLE mydb.mytable;
> ALTER TABLE mydb.mytable ENGINE = MyISAM; ANALYZE TABLE mydb.mytable;
这些命令在机械上是相同的OPTIMIZE TABLE执行MyISAM表的碎片整理,然后运行ANALYZE TABLE以计算新的索引统计信息.
从机械上讲,这就是ALTER TABLE mydb.mytable ENGINE = MyISAM;作用:
CREATE TABLE mydb.mytabletmp LIKE mydb.mytable;
INSERT INTO mydb.mytabletmp SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable RENAME mydb.mytablezap;
ALTER TABLE mydb.mytabletmp RENAME mydb.mytable;
DROP TABLE mydb.mytablezap;
内容总结
以上是互联网集市为您收集整理的MySQL:减少MyISAM表的ibdata文件大小全部内容,希望文章能够帮你解决MySQL:减少MyISAM表的ibdata文件大小所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。