mysql 通过.ibd恢复数据 整库、单表转移

文章介绍了如何在不使用Navicat或mysqldump导致锁表的情况下,将MySQL大表数据迁移到另一环境。主要步骤包括:对ibd文件进行打包传输,删除目标库中对应ibd文件,赋予新ibd文件正确的权限,以及使用ALTERTABLE命令导入表空间。在遇到错误时,可能需要检查文件权限或调整innodb_force_recovery配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单表 多个表转移 

       最近要表数据转移到演示环境奈何表比较大 Navicat导出老是罢工,线上mysqldump 会锁表。

数据端mysql版本8.0.22  恢复端mysql 8.0.17   大版本差不太多 即可,操作时未截图,现在拿数据恢复到本地给大家演示一下

1. 把要恢复的表ibd 打一下tar包,压缩一下 减少传输时间。(替换ibd无需重启mysql)

        

2.要恢复的库,需要创建一下表,会自动生成ibd,(表自己创这里就不做展示了)执行以下命令 删除生成的ibd文件

        执行:ALTER TABLE table_name DISCARD TABLESPACE;

 3.把要恢复的表解压完成后,给解压的ibd赋权mysql 

    chown -R mysql:mysql serviceorproductinfo.ibd

4.改完权限打命令 恢复表空间

ALTER TABLE table_name IMPORT TABLESPACE;

到这一步数据已经恢复咯!

下面说一下碰到的错误,网上查出来两种意思的

 ERROR 1812 (HY000): Tablespace is missing for table

覆盖的文件没改权限

ERROR 1015 (HY000): Can't lock file (errno: 165 - Table is read only)
配置文件innodb_force_recovery。

整库恢复

    这里不做具体描述,记录以下当时恢复的操作哈

环境:数据库A  和数据库B  mysql date位置,bin位置一致。

        

 

1.拷贝A 数据整个data  到B,先把B停掉,完成替换在重启B,即可。

恢复 MySQL 8.0 的表空间,你可以按照以下步骤进行操作: 1. 停止 MySQL 服务器:使用适当的方式停止 MySQL 服务器,确保在进行任何操作之前数据库处于离线状态。 2. 备份原始表空间:在进行任何更改之前,强烈建议备份原始表空间文件。这样,即使操作出现问题,你也可以还原到先前的状态。 3. 删除或移动损坏的表空间:如果你已经确定哪个表空间损坏或丢失,可以删除或移动它。你可以使用以下两种方法之一来完成此操作: - 使用 DROP TABLESPACE 命令删除表空间。例如:`DROP TABLESPACE your_tablespace;` - 使用 ALTER TABLE ... REMOVE PARTITIONING 命令移除分区,并将数据从损坏的表空间转移到其他有效的表空间。例如:`ALTER TABLE your_table REMOVE PARTITIONING;` 4. 创建新的表空间:使用 CREATE TABLESPACE 命令创建一个新的表空间。指定正确的数据文件路径和名称。例如:`CREATE TABLESPACE your_tablespace ADD DATAFILE 'path/to/your_tablespace.ibd';` 5. 将表移回新的表空间:使用 ALTER TABLE ... TABLESPACE 命令将表移回新的表空间。例如:`ALTER TABLE your_table TABLESPACE your_tablespace;` 6. 启动 MySQL 服务器:启动 MySQL 服务器,并确保能够正常访问恢复的表空间和数据。 请注意,这些步骤仅适用于恢复表空间而不是数据库。如果你需要恢复数据库,请参考 MySQL 官方文档或与专业数据库管理员联系以获取更多帮助。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值