![减少 MySQL 数据库大小的选项](https://linux22.com/image/487435/%E5%87%8F%E5%B0%91%20MySQL%20%E6%95%B0%E6%8D%AE%E5%BA%93%E5%A4%A7%E5%B0%8F%E7%9A%84%E9%80%89%E9%A1%B9.png)
我有一个 88.9 GB 的 MySQL 5.0 数据库,位于一个 90GB 的驱动器上。该数据库包含许多 MyISAM 表,用于我们的(自定义)系统使用情况报告。数据是基于日期的聚合,本质上是 Web 服务器日志。
我考虑将大表转换为 MERGE 存储引擎。这样我就可以把旧数据移到另一个驱动器。但是,我以前从未这样做过,而且对在生产数据库上进行测试有点紧张。
当然,我的时间很紧张。我必须尽快处理上个月的所有报告数据。因此,目前安装更大的驱动器不是一个选择。
有人能分享一些关于减少这个数据库大小的建议或经验吗?
答案1
是否存在一些您实际上并未使用的索引?
答案2
好吧...这篇文章已经很久了...但是...我认为如果它完整的话会更好
当我必须将 mysql 数据库移动到另一个分区时,我会这样做:
/etc/init.d/mysql stop
rsync -avz /var/lib/mysql/ /mnt/anotherdisk/mysql/
mv /var/lib/mysql/ /var/lib/mysql_original/
ln -s /var/lib/mysql/ /mnt/anotherdisk/mysql/
/etc/init.d/mysql start
一天/一周/一个月/WhenIRememberOrCan 之后,我对 /var/lib/mysql_original/ 进行了备份,然后删除了该文件夹。
答案3
如果您已经考虑将数据移至更大的分区,则可以选择性地移动较大的表并将它们符号链接回数据库目录。这样做有一些缺点,但它们已在文档中注明。这样做的好处是可以轻松撤消(假设您的表仍适合旧分区)。
答案4
您准备重写该应用程序吗?
OPTIMIZE TABLE 将重建表以消除“漏洞”。这可能会节省大量空间,也可能根本不节省空间,具体取决于它们已经达到的优化程度。但是,这对于大型表来说非常慢,并且会占用大量临时空间。
删除索引,将 PACK_KEYS 添加到表,这些将减少索引的大小,但同样,这涉及重建并使用临时空间。
您是否查看过索引与数据的大小?
听起来你的服务器已经满了,你实际上无法做任何工作。
解决方案:使用监控来确保您的服务器将来永远不会变得如此满,因为当您到达这个阶段时,它已经无望了。
短期内,将所有东西转移到一个更大的盒子里。