gpt4 book ai didi

MySQL:减少 MyISAM 表的 ibdata 文件大小

转载 作者:可可西里 更新时间:2023-11-01 07:28:34 26 4
gpt4 key购买 nike

我的问题实际上与这个问题非常相似,并且还包括一个针对 InnoDB Engine 表的案例的很好的答案:

https://dba.stackexchange.com/questions/8982/is-there-any-best-way-to-reduce-the-size-of-ibdata-in-mysql/8983#8983 ,

我注意到删除模式不会缩小 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 清理

如果你只有 MyISAM 表而没有 InnoDB 表:

首先,消除InnoDB的任何痕迹执行以下操作:

STEP01) 将此添加到 my.cnf

[mysqld]
skip-innodb

STEP02) service mysql restart

STEP03) rm -f/var/lib/mysql/ibdata1/var/lib/mysql/ib_logfile*

完成这些步骤后,您可以像这样对每个 MyISAM 表执行压缩:

对于 MyISAM 的表 mydb.mytable,只需运行以下命令之一:

  • 优化表 mydb.mytable;
  • ALTER TABLE mydb.mytable ENGINE=MyISAM;分析表 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 EDT

我想澄清一下我对 MyISAM 压缩的建议之一

前面说了

  • 优化表 mydb.mytable;
  • ALTER TABLE mydb.mytable ENGINE=MyISAM;分析表 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 文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11635383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com