现象:MySQL服务无法正常启动或者关闭
注:【旧库】指的是带有历史数据的低版本数据库;【新库】当前新版本数据库;
解决方法:
以下步骤如果已完成则跳过
1. 重新安装数据库。
2. 迁移流程详述
2.1 在【旧库】执行语句:生成.cfg + 解锁表
FLUSH TABLE table_name FOR EXPORT; -- 生成.cfg文件
UNLOCK TABLES; -- 解锁但会删除.cfg文件
表多的情况下,在流程上会相对繁琐,因为在Unlock后会清除.cfg文件。 所以当生成.cfg文件后要及时拷贝出来。
可能遇到报错1:
Can't execute the given command because you have active locked tables or an active transaction.
解:因为没有解锁表。(UNLOCK TABLES;)
可能遇到报错2:
Table storage engine for 'sys_code' doesn't have this option.
解:该表的引擎不是InnoDB。
注:.cfp文件包含一个传输密钥和一个加密的表空间密钥。在导入时,InnoDB使用传输密钥来解密表空间密钥。
2.2 导出旧库数据结构,并导入至新库中
导出旧库操作:下图以Navcat为例,从源数据库中导出数据库结构。
在目标环境新建同名【新库】,通过刚刚导出的脚本还原新库;
并还原在目标数据库中。
2.3. 删除表空间
在【新库】中执行删除对应表空间的语句:
Alter Table table_name Discard Tablespace;
附 - 查询所有表名的语句:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE Table_SCHEMA='Schema_Name';
2.4. 关闭【新库】对应的服务,再拷贝ibd和.cfg文件至对应的文件夹下
注:拷贝文件前记得关闭MySQL服务,并在拷贝后记得打开服务。
2.5. 执行还原表空间
ALTER TABLE table_name IMPORT TABLESPACE;