修改InnoDB表列属性时终止phpMyAdmin/MySQL是否安全?进度如何判断?
InnoDB表修改列属性慢的问题解答
为什么25000条记录的表修改属性耗时这么久?
InnoDB修改列属性(比如添加UNSIGNED ZEROFILL)时,并不是直接修改字段定义这么简单,它会触发全表重建:创建一个符合新结构的临时表,把原表的所有数据逐条复制到临时表,完成后再替换原表。你的原.idb文件有6GB,说明单条记录包含大字段(比如TEXT、BLOB),加上Win7 XAMPP的MySQL性能有限,数据复制过程会很慢,硬盘闪烁就是在持续写入临时表数据。
强行停止MySQL会不会损坏表?
- 如果是正常停止(比如通过XAMPP控制面板停止MySQL服务,或者执行
mysqladmin shutdown命令):InnoDB的事务日志会保证数据一致性,未完成的表重建操作会被回滚,下次启动MySQL时会自动执行崩溃恢复,一般不会损坏表,但恢复过程可能需要一些时间。 - 如果是强制终止进程/断电:风险会高一些,但InnoDB自带崩溃恢复机制,大概率能修复损坏的部分,但不排除极端情况下出现表损坏的可能。
关于临时.idb文件的疑问
那个临时.idb文件就是重建过程中的新表数据文件,但不能用文件大小比例判断进度。InnoDB会预分配文件空间,而且数据复制过程中还会处理索引、碎片等,临时文件的大小增长和实际数据复制进度不是线性对应的,610MB/6GB的比例不能代表完成了10%。
内容的提问来源于stack exchange,提问作者Zoe Ballz
相关产品推荐
相关产品推荐

