这篇文章主要介绍了MySQL复制出错 Last_SQL_Errno:1146的解决方法,需要的朋友可以参考下

背景:我们在做数据迁移或者拆分的时候,使用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

错误信息:

Last_Errno: 1146

Last_Error: Error 'Table 'test.user' doesn't exist' on query. Default database: 'test'. Query: 'insert into user values(20,'在库')'

解决方法:

mysql> set global sql_slave_skip_counter=20;

mysql> STOP SLAVE;

mysql> START SLAVE;

问题解决

mysql导出数据库1146_MySQL复制出错 Last_SQL_Errno:1146的解决方法相关推荐

  1. mysql errno 1146_Mysql学习MySQL复制出错 Last_SQL_Errno:1146的解决方法

    <MysqL学习MysqL复制出错 Last_sql_Errno:1146的解决方法>要点: 本文介绍了MysqL学习MysqL复制出错 Last_sql_Errno:1146的解决方法, ...

  2. mysql errno : 1146_MySQL_MySQL复制出错 Last_SQL_Errno:1146的解决方法,背景:我们在做数据迁移或者 - phpStudy...

    MySQL复制出错 Last_SQL_Errno:1146的解决方法 背景:我们在做数据迁移或者拆分的时候,使用Tablespace transcation 这种解决方案时,很有可能就会遇到 从库复制 ...

  3. mysql errno: 1146_解决MySQL复制出错 Last_SQL_Errno:1146

    背景:我们在做数据迁移或者拆分的时候,使用Tablespace transcation 这种解决方案时,很有可能就会遇到 从库复制出错,报: Last_SQL_Errno: 1146 那么具体错误内容 ...

  4. 使用MySQL Workbench导出数据库脚本以及出错时的解决办法

    使用MySQL Workbench导出数据库脚本以及出错时的解决办法 正常做法 打开workbench,选择左上角的菜单栏,选择Server->Data 之后出现如下界面 一般情况下,这样就导出 ...

  5. mysql导出数据库数据及表结构

    mysql导出数据库数据及表结构 1,导出远程数据库数据到本地 mysql -A wj_sms -h192.168.1.105 -uroot -p4321 -ss -e "set NAMES ...

  6. mysql导出数据库数据字典

    mysql导出数据库数据字典,执行如下查询导出到excel即可 SELECT tc.TABLE_SCHEMA 数据库, tc.TABLE_NAME 表名, tt.TABLE_COMMENT, tc.C ...

  7. mysql导出数据库报错,navicat 导入导出数据库报错的解决

    在使用navicat导入导出数据功能时,导出没问题,导入总是报错,还遇到了中文乱码.在网上查了很多资料,比如使用了navicat的数据传输功能,但仍然报错,弄了几个小时都没解决. 最后换了种思路,我直 ...

  8. Linux系统下MySQL导出数据库和导入数据库的命令

    一.MySQL导出数据库用mysqldump命令 注意mysql的安装路径,即此命令的路径,如果你只要查询mysql的运行文件所在地址,直接用下面的命令就可以了,再切换到mysql的运行文件的路径 w ...

  9. MySQL导出数据库、数据库表结构、存储过程及函数【用】

    一.导出数据库 我的mysql安装目录是D:\Program Files\MySQL\MySQL Server 5.5\bin\,导出文件预计放在D:\sql\ 在mysql的安装目录执行命令: my ...

最新文章

  1. 新手科普 | 探索机器学习模型,保障账户安全
  2. 【Groovy】自定义 Xml 生成器 BuilderSupport ( 构造 Xml 节点类 | 封装节点名称、节点值、节点属性、子节点 | 将封装的节点数据转为 Xml 字符串 )
  3. 神圣的NLP!一文理解词性标注、依存分析和命名实体识别任务
  4. php不能加载extension的奇怪问题
  5. 编译原理--NFA/DFA
  6. vue-router和react-router嵌套路由layout配置方案的区别
  7. C++的new、delete需要注意的一点:使用危险函数导致的越界CRT detected that the application wrote to memory after end of heap
  8. jboss默认进程名称_快速指南:剖析JBoss BPM跨进程通信
  9. MFC制作打地鼠小游戏
  10. 二倍图css,css二倍图的使用
  11. 借助 Resharper 和 StyleCop 让代码更整洁
  12. 带你实现完整的视频弹幕系统
  13. 上海电力大学计算机专业全国排名,上海电力大学有哪些专业 上海电力大学专业排名...
  14. java左移和右移_java 位运算 之 左移和右移理解
  15. Cadence PSpice 仿真8:带阻滤波器温度分析仿真实战图文教程
  16. 转行做数据分析的心路历程
  17. 重庆SEO优化高手更新网站文章的窍门
  18. QQ空间首页模仿制作——HTML布局练习
  19. 盘点北京周边最适合爬的10座山
  20. TIL:创建Java线程的两种方法

热门文章

  1. indexOf 的使用
  2. VMWare 卡顿优化详解
  3. 华为手机鸿蒙更新时间,华为手机版鸿蒙系统更新时间介绍
  4. 【Matlab系列】Matlab信号添加噪声及信噪比SNR的计算
  5. PyQt5自定义无边框窗口
  6. 计算机毕业设计ssm青岛恒星科技学院机房管理系统0k0u9系统+程序+源码+lw+远程部署
  7. 【Android 进程保活】应用进程拉活 ( 应用进程拉活简介 | 广播拉活 | 显示广播与隐式广播 | 全家桶拉活 )
  8. 机器学习——信用卡反欺诈案例
  9. 千万别活成自己最讨厌的样子
  10. 阿里云盾AliYunDun服务IO超高