所以我有一个在复制流上安装的测试数据库服务器。顾名思义,优化过程很快就被填补了从属数据目录上的空间。MySQL尽职尽责地只是在等待更多的空间。
该数据目录是仅用作mysql的数据目录的文件系统,因此没有其他可释放的内容。
我有一个4 gig innodb测试表,它不是复制流的一部分,所以我想尝试一些方法来查看它是否可以工作,并且作为测试环境,我不太担心事情出了什么问题。
这是我采取的步骤
- 弄丢了我要移动的桌子
- 在其上放置一个读锁(即使没有任何写入,并且不在复制流中)
- 将.frm和.ibd复制到带有一些备用空间的文件系统中
- 解锁桌子
- 删减了该表-释放了足够的空间以使优化完成,复制开始重新进行。
- 停止奴隶/关闭mysql
- 将文件从tmp中复制回数据目录
- 重启mysql
.err日志中没有任何显示,一切看起来不错。我连接并使用mydb;并在显示表中查看我正在弄乱的表。但是,如果我尝试
select * from testtable limit 10;
我得到错误
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
从目前为止我所知道的,我可以从其他所有表中读取数据,并且复制开始备份而没有任何抱怨。
从这一点上我有什么办法可以恢复?如果需要,我可以从头开始重建它,但是很好奇其他人对该企业的总体看法。关于我采取的一系列步骤,如果没有更完美的结果,是否有任何结果?
如果这不是测试服务器,我不能只是“实时运行”并看看会发生什么?如果我愿意,最好的方法是暂时释放生产从属服务器上的空间?
Table 'X' doesn't exist in engine
。我是否必须对每个表都执行上述方法,还是有更好的方法来解决此问题?