将列添加到MyISAM表时,MySQL将创建>复制>删除>重命名。我有一个足够大的表,它不能在服务器的剩余可用空间中复制。尝试添加列会导致磁盘填充。时间不是问题,表可用性也不是磁盘空间。
如果没有将数据复制到另一台服务器,截断,更改和复制,有没有办法将列添加到MyISAM表而不用创建临时表并复制所有数据?
答案 0 :(得分:3)
您可以创建一个新的空表,手动移动数据块(INSERT为new,DELETE从旧的一定数量的行),删除旧表并重命名新表。基本上是MySQL的作用,但是移动数据而不是复制它,这应该允许你使用更少的空间。
答案 1 :(得分:1)
一般情况下,我会尝试保留足够的可用空间,以便能够重建我最大的表格。这样,我就可以在必要时运行OPTIMIZE TABLE
或ALTER TABLE
。
您的服务器上是否安装了另一个磁盘?
当空间太紧而不能重建给定的表时,我首选的解决方法是暂时将其他一些表移动到单独的磁盘卷。我这样做是通过停止MySQL,移动相关数据文件(MYD和MYI或ibd),然后在指向新位置的原始位置创建符号链接,然后启动MySQL。表格重建完成后,我将该过程反转,将其他表格移回原来的位置。