MySQL 根据ibd文件还原数据库

现象:MySQL服务无法正常启动或者关闭

注:【旧库】指的是带有历史数据的低版本数据库;【新库】当前新版本数据库;

解决方法:

以下步骤如果已完成则跳过

1. 重新安装数据库。

附教程:MySQL - 8.0.16 - winx64 安装教程_快乐的肉球的博客-CSDN博客1.下载并解压缩解压缩 mysql-8.0.16-winx64.zip我的目录是D:\Program Files\mysql-8.0.16-winx642.自制一个配置文件在解压的根目录内创建一个文本文件,命名为:my.ini内容如下:[mysql]# 设置mysql客户端默认字符集default-character-set=utf8 [mysqld]# 服...https://blog.csdn.net/iceagezh/article/details/92799848

2. 迁移流程详述

英文OK 建议直接看官方原版教程icon-default.png?t=N7T8https://dev.mysql.com/doc/refman/8.0/en/innodb-table-import.html#innodb-table-import-example

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;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值