背景:我们在做数据迁移或者拆分的时候,使用Tablespace transcation 这种解决方案时,很有可能就会遇到 从库复制出错,报: 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'
       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'

那么我们遇到这样的问题的时候该如何恰当的处理呢?考虑如下几点:

1. 我们整个库的容量有多大?
        2. 业务容忍的最大延迟时间多久?
        3. 我们恢复需要多久?恢复的难易程度如何?

通过考虑到以上几点, 我们就可以根据实际情况做出抉择,采用什么样的办法尽快的恢复从库;对于这样的问题,简单粗暴的方案就是重建从库,当然还有别的办法, 且听我慢慢道来:

首先我们先看看我们是如何通过Transport tablespace 迁移数据的,大概步骤如下:

1.库A执行:  show create table xxx1; 拿到简表语句;
         2.库B执行:  create table xxx1; 在从库上建立基本的表结构;
         3.库B执行: alter table xxx1 discard tablespace; 让mysql自己删掉ibd文件;
         4.库A执行: flush tables xxxx1,xxxx2 for export;把内存的脏数据刷到磁盘,使得ibd文件数据一致;
         5.库A执行: scp xxxx1.ibd xxx2.ibd xxxx1.cfg xxx2.cfg slave_host:/data/ 把ibd文件拷贝到从库;
         6.库B执行: alter table xxx1 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 discard tablespace'

其大概的意思就是我们在从库上没有找到 这个表的完整定义信息,观察一下磁盘上的文件我们就明白了:

[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

果然没有 这个表的 frm  文件, 那么怎么办呢?由于是 slave 的sql_thread 线程报错, 那么我们可采取取巧的办法:

用超级用户登录从库,先备份一下 这个ibd 文件:[root@GZ_NF_DB_RP_002 spider]# mv tb_city_population_rank.ibd tb_city_population_rank.ibd.bak

然后拿到这个文件的表结构, 在从库上执行建表语句,这样一样来, 我们从库就有了 ibd frm 文件, 那么 此时我们开启slave sql_thread,这时就会执行时主库传过来的 语句:

alter table tb_city_population_rank discard tablespace ; 那么当我们再一次的观看此盘数据文件的时候,ibd 文件又不见了,此时slave 也就已经出错了,其错误信息如下:

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 100; 来验证一下是否可读。

那么此时,我们算完整的解决了因一个表导致的复制出错的问题, 那么如果迁移了多张表(经常是)  , 那么我们就可以按照这个解决方案,一步一步的来解决复制出错。其大概的思路就是, 缺什么我们补什么,多了什么我们去掉什么。

解决MySQL复制出错 Last_SQL_Errno:1146的更多相关文章

  1. [MySQL] 号称永久解决了复制延迟问题的并行复制,MySQL5.7

    一.缘由: 某天看到主从复制延时的告警有点频繁,就想着是不是彻底可以解决一下. 一般主从复制,有三个线程参与,都是单线程:Binlog Dump(主) ----->IO Thread (从) - ...

  2. service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误

    service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误的方法如下: [root@ctohome.com ~]# service ...

  3. [Linux]Service mysql start出错(mysql: unrecognized service)解决方法

    service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误的方法如下: [hitony ~]# service mysql star ...

  4. 【mysql】service mysql start出错,mysql启动不了,解决mysql: unrecognized service错误

    service MySQL start出错,mysql启动不了,解决mysql: unrecognized service错误的方法如下: [root@ctohome.com ~]# service ...

  5. MySQL复制 -- 复制出错怎么办?

    假如我们生产环境复制出错?该怎么办呢? 下面提供几种办法: 1. 手工处理,补回不一致数据(可以利用主库来补数据.也可以利用binlog来补数据) 2.用开源工具来解决一致性问题 3.自己造轮子,解决 ...

  6. 31.Mysql复制

    31.Mysql复制复制是指将主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后在从数据库上对重做日志,从而使从库与主库保持同步.Mysql支持一台主库同时向多台从库复制,从库也可以作为其 ...

  7. replicate-do-db参数引起的MySQL复制错误及处理办法

    replicate-do-db配置在MySQL从库的my.cnf文件中,可以指定只复制哪个库的数据.但是这个参数有个问题就是主库如果在其他的schema环境下操作,其binlog不会被从库应用,从而出 ...

  8. MySQL复制应用中继日志解析

    前言:SQL线程应用中继日志,在binlog_format是row格式的时候,是居于主键更新,下面结合一张图来证明 1.从一个大神那边得到一张图片,SQL线程应用中继日志流程,下面就实验验证一下:(P ...

  9. 深入MySQL复制(一)

    本文非常详细地介绍MySQL复制相关的内容,包括基本概念.复制原理.如何配置不同类型的复制(传统复制)等等.在此文章之后,还有几篇文章分别介绍GTID复制.半同步复制.实现MySQL的动静分离,以及M ...

随机推荐

  1. target属性用于返回最初触发事件的DOM元素。

    target属性用于返回最初触发事件的DOM元素. 在HTML文档中,我们为<p>元素绑定点击事件("click"),由于DOM元素的事件冒泡机制,我们点击<p& ...

  2. $.ready和onload 区别

    1.jq ready()的方法就是Dom Ready 他的作用或者意义就是:在DOM加载完成后就可以可以对DOM进行操作. 一般情况先一个页面响应加载的顺序是,域名解析-加载html-加载js和css ...

  3. Redis之数据类型大全

    一:String类型 1.set方法:设置key对应的值为string类型的value,如果该key已经存在,则覆盖key对应的value值.所以在redis中key只能有一个. 127.0.0.1: ...

  4. pygrib学习

    pygrib-2.0.3/docs/index.html 导入pygrib模块 >>> import pygrib 打开grib文件,获取grib消息迭代器 >>> ...

  5. SQL常见面试题

    1.用一条SQL 语句 查询出每门课都大于80 分的学生姓名 name   kecheng   fenshu张三    语文       81张三     数学       75李四     语文   ...

  6. [Unity Shader] 常用的数值类型和语义

    书看到第八章,跟随写了一些例子,但有些数值类型的使用还是需要特别注意,经常需要查阅,在这里做一下总结. 1 ShaderLab属性类型和Cg变量类型的匹配关系 Color.Vector:float4, ...

  7. Visionpro介绍和下载安装视频教程

    ------------------------Halcon,Visionpro高清视频教程,点击下载视频--------------------------

  8. MySQL基础练习(三)

    经过之前两次的学习,这次用MySQL进行略微复杂的操作练习 各部门工资最高的员工 首先创建表employee和表department.如下 我们需要查询每个部门工资最高的员工 select a.Nam ...

  9. date命令详解

    基础命令学习目录首页 原文链接:https://www.cnblogs.com/qmfsun/p/4598650.html date "+今天是%Y-%d-%m,现在是%H:%M:%S&qu ...

  10. nginx keepalived 高可用方案(转)

    转自: https://www.cnblogs.com/leeSmall/p/9356535.html 一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含 ...