在A服务器上创建数据库lv
root(lv)> show create table lv\G*************************** 1. row *************************** Table: lvCreate Table: CREATE TABLE `lv` ( `id` int(11) DEFAULT NULL, `name` varchar(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8插入数据root(lv)> insert into lv values (1,'HANK');Query OK, 1 row affected (1.01 sec) root(lv)> insert into lv values (2,'lv');Query OK, 1 row affected (0.04 sec) root(lv)> insert into lv values (3,'GARY');Query OK, 1 row affected (0.00 sec) root(lv)> insert into lv values (4,'NIKO');Query OK, 1 row affected (0.02 sec) root(lv)> select * from lv;+------+------+| id | name |+------+------+| 1 | HANK || 2 | lv || 3 | GARY || 4 | NIKO |+------+------+4 rows in set (0.00 sec)
在B服务器上,添加参数innodb_force_recovery=1并重启,创建空数据库lv,并创建表lvmysql> create database lv;use yooQuery OK, 1 row affected (1.01 sec) mysql> use lv;Database changedmysql> CREATE TABLE `lv` ( -> `id` int(11) DEFAULT NULL, -> `name` varchar(20) DEFAULT NULL -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;Query OK, 0 rows affected (0.09 sec) 将表结构和空间脱离mysql> alter table lv discard tablespace;Query OK, 0 rows affected (0.02 sec) 将A服务器上的ibd数据文件传输至B服务器上scp lv.ibd 182.19.4.7:/export/data/mysql/data/lv 修改权限chown -R mysql.mysql lv.ibd 将表结构和空间建立关系mysql> alter table lv import tablespace;Query OK, 0 rows affected, 1 warning (0.04 sec) 查询数据mysql> select * from lv;+------+------+| id | name |+------+------+| 1 | HANK || 2 | lv || 3 | GARY || 4 | NIKO |+------+------+4 rows in set (0.00 sec)
详细步骤如下:1、停止mysql服务,添加innodb_force_recovery=1 ,启动mysql服务2、创建新数据库,创建相同表结构的表(表结构必须相同)3、执行alter table tb discard tablespace;4、删除表的ibd文件5、跨服务器复制表ibd文件6、修改ibd文件权限,执行alter table tb import tablespace;