平复数据经过,解决MySQL复制出错

一.目的端成立一样的表结构

在A服务器上创建数据库yoon
root(yoon)> show create table yoon\G
*************************** 1. row
***************************
Table: yoon
Create Table: CREATE TABLE `yoon` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

在A服务器上开创数据库lv
root(lv)> show create table lv\G
*************************** 1. row
***************************
Table: lv
Create Table: CREATE TABLE `lv` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

   背景:大家在做多少迁移可能拆分的时候,使用Tablespace transcation
那种消除方案时,很有相当的大可能率就能够遇见 从库复制出错,报: Last_SQL_Errno:
1146

CREATE TABLE `test` (

安排数据
root(yoon)> insert into yoon values (1,’HANK’);
Query OK, 1 row affected (1.01 sec)

 

   那么具体错误内容恐怕会有如下:

      `id` int(11) DEFAULT NULL

root(yoon)> insert into yoon values (2,’YOON’);
Query OK, 1 row affected (0.04 sec)

插入数据
root(lv)> insert into lv values (1,’HANK’);
Query OK, 1 row affected (1.01 sec)

       Last_SQL_Error: Error ‘Table
‘spider.tb_city_population_rank’ doesn’t exist’ on query. Default
database: ‘spider’. Query: ‘alter table tb_city_population_rank
discard tablespace’
       Last_SQL_Error: Error ‘Table
‘spider.tb_city_population_rank’ doesn’t exist’ on query. Default
database: ‘spider’. Query: ‘alter table tb_city_population_rank
import tablespace’

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

root(yoon)> insert into yoon values (3,’GARY’);
Query OK, 1 row affected (0.00 sec)

root(lv)> insert into lv values (2,’lv’);
平复数据经过,解决MySQL复制出错。Query OK, 1 row affected (0.04 sec)

    那么大家遭受这么的难题的时候该怎么样方便的拍卖呢?思量如下几点:

贰.目的端保留.frm文件,删除.ibd文件

root(yoon)> insert into yoon values (4,’NIKO’);
Query OK, 1 row affected (0.02 sec)

root(lv)> insert into lv values (3,’GARY’);
Query OK, 1 row affected (0.00 sec)

        1. 大家整个库的体积有多大?
        二. 业务容忍的最大延迟时间多长期?
997755.com澳门葡京,        3. 我们过来要求多长期?恢复的难易程度怎么着?

alter table tbs.test discard tablespace;    

root(yoon)> select * from yoon;
+——+——+
| id | name |
+——+——+
| 1 | HANK |
| 2 | YOON |
| 3 | GARY |
| 4 | NIKO |
+——+——+
4 rows in set (0.00 sec)

root(lv)> insert into lv values (4,’NIKO’);
Query OK, 1 row affected (0.02 sec)

    通过思念到以上几点,
大家就足以依赖实际处境做出取舍,采Nash么的办法尽快的死灰复燃从库;对于这么的题目,轻易阴毒的方案就是重建从库,当然还有别的方法,
且听小编稳步道来:

三.源端对表加一个读锁

在B服务器上,增添参数innodb_force_recovery=一仁同一视启,成立空数据库yoon,并成立表yoon
mysql> create database yoon;
use yooQuery OK, 1 row affected (1.01 sec)

root(lv)> select * from lv;
+——+——+
| id | name |
+——+——+
| 1 | HANK |
| 2 | lv |
| 3 | GARY |
| 4 | NIKO |
+——+——+
4 rows in set (0.00 sec)

    首先我们先看看大家是什么样通过Transport tablespace
迁移数据的,大致步骤如下:  

flush table tbs.test for export;

mysql> use yoon;
Database changed
mysql> CREATE TABLE `yoon` (
-> `id` int(11) DEFAULT NULL,
-> `name` varchar(20) DEFAULT NULL
-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.09 sec)

 

         壹.库A施行:  show create table xxx一; 获得简表语句;
         二.库B执行:  create table xxx1; 在从库上确立基本的表结构;
         3.库B实行: alter table xxx1 discard tablespace;
让mysql本人删掉ibd文件;
         四.库A实施: flush tables xxxx一,xxxx2 for
export;把内部存款和储蓄器的脏数据刷到磁盘,使得ibd文件数量一致;
         5.库A执行: scp xxxx1.ibd xxx2.ibd xxxx1.cfg xxx2.cfg
slave_host:/data/ 把ibd文件拷贝到从库;
         陆.库B试行: alter table xxx一 import tablespace 导入数据文件。

四.拷贝.cfg和.ibd文件到对象端数据文件地点

将表结会谈空中脱离
mysql> alter table yoon discard tablespace;
Query OK, 0 rows affected (0.02 sec)

在B服务器上,增加参数innodb_force_recovery=一仁同一视启,创设空数据库lv,并成立表lv
mysql> create database lv;
use yooQuery OK, 1 row affected (1.01 sec)

好了我们清楚了百分百搬迁的具体步骤,那么大家就足以轻便的应对在搬迁进程中复制出错的难点了。

scp test.ibd root@192.168.10.101:/usr/local/mysql/data/tbs

将A服务器上的ibd数据文件传输至B服务器上
scp yoon.ibd 182.19.4.7:/export/data/mysql/data/yoon

mysql> use lv;
Database changed
mysql> 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)

      那么我们率先来看一下:

scp test.cfg root@192.168.10.101:/usr/local/mysql/data/tbs

修改权限
chown -R mysql.mysql yoon.ibd

将表结商谈空间脱离
mysql> alter table lv discard tablespace;
Query OK, 0 rows affected (0.02 sec)

Last_SQL_Errno: 1146
Last_SQL_Error: Error ‘Table ‘spider.tb_city_population_rank’
doesn’t exist’ on query. Default database: ‘spider’. Query: ‘alter table
tb_city_population_rank discard tablespace’

5.源端释放锁

将表结议和空间创立关系
mysql> alter table yoon import tablespace;
Query OK, 0 rows affected, 1 warning (0.04 sec)

将A服务器上的ibd数据文件传输至B服务器上
scp lv.ibd 182.19.4.7:/export/data/mysql/data/lv

       其大意的意趣就是大家在从库上未有找到
那个表的完好定义音信,观察一下磁盘上的文书大家就清楚了:

unlock tables;

询问数据
mysql> select * from yoon;
+——+——+
| id | name |
+——+——+
| 1 | HANK |
| 2 | YOON |
| 3 | GARY |
| 4 | NIKO |
+——+——+
4 rows in set (0.00 sec)

修改权限
chown -R mysql.mysql lv.ibd

[root@GZ_NF_DB_RP_002 spider]# ls -lhrt |grep
tb_city_population_rank
-rw-r—– 1 mysql mysql 8.3G Mar 31 20:03
tb_city_population_rank.ibd

陆.目的端文件予以权力

详细步骤如下:
1、停止mysql服务,添加innodb_force_recovery=1 ,启动mysql服务
2、成立新数据库,创设一样表结构的表(表结构必须壹律)
3、执行alter table tb discard tablespace;
四、删除表的ibd文件
伍、跨越服务器务器复制表ibd文件
陆、修改ibd文件权限,实行alter table tb import tablespace;

将表结商谈空中营造关联
mysql> alter table lv import tablespace;
Query OK, 0 rows affected, 1 warning (0.04 sec)

   果然没有 那些表的 frm  文件, 那么怎么办呢?由于是 slave
的sql_thread 线程报错, 那么大家可采取取巧的法子:

chown -R mysql:mysql *

查询数据
mysql> select * from lv;
+——+——+
| id | name |
+——+——+
| 1 | HANK |
| 2 | lv |
| 3 | GARY |
| 4 | NIKO |
+——+——+
4 rows in set (0.00 sec)

    用一流用户登6从库,先备份一下 那么些ibd
文件:[root@GZ_NF_DB_RP_002 spider]# mv
tb_city_population_rank.ibd tb_city_population_rank.ibd.bak

chmod -R 755 *

 

    然后获得这些文件的表结构, 在从库上施行建表语句,那样平等来,
大家从库就有了 ibd frm 文件, 那么 此时我们张开slave
sql_thread,那时就能够进行时主库传过来的 语句:

七.对象端导入表

详细步骤如下:
1、停止mysql服务,添加innodb_force_recovery=1 ,启动mysql服务
2、创造新数据库,创建同样表结构的表(表结构必须1致)
3、执行alter table tb discard tablespace;
4、删除表的ibd文件
伍、跨过服务器务器复制表ibd文件
陆、修改ibd文件权限,施行alter table tb import tablespace;

alter table tb_city_population_rank discard tablespace ;
那么当大家再三回的看看此盘数据文件的时候,ibd 文件又不见了,此时slave
也就曾经出错了,其错误音信如下:

alter table tbs.test import tablespace;

Last_SQL_Errno: 1146
Last_SQL_Error: Error ‘Table ‘spider.tb_city_population_rank’
doesn’t exist’ on query. Default database: ‘spider’. Query: ‘alter table
tb_city_population_rank import tablespace’

      那么我们那儿亟待做的正是: 把刚才mv 的公文 再 mv 回去,
也正是说:[root@GZ_NF_DB_RP_002 spider]# mv
tb_city_population_rank.ibd.bak tb_city_population_rank.ibd ;
完毕那些命令后大家再执行 start slave sql_thread ; 此时这一个表就符合规律了,
大家得以试行select * from tb_city_population_rank limit 拾0;
来验证一下是或不是可读。

   
 那么此时,大家算完整的消除了因一个表导致的复制出错的主题素材,
那么1旦搬迁了多张表(常常是)  ,
那么我们就足以坚守那一个化解方案,一步一步的来消除复制出错。其大意的思绪便是,
缺什么大家补什么,多了什么样大家去掉什么。

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website