记一次innobackupex导致的从库无法同步的问题
时间:2022-07-23
本文章向大家介绍记一次innobackupex导致的从库无法同步的问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 现象
一套MySQL主从复制出现异常
start slave 时报错
[ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000077' position 1027952423.
2. 原因查找
2.1 查看error日志
首先我们查看error日志
发现如下报错
[ERROR] Slave SQL for channel '': Could not execute Write_rows event on
table safe.safelog; Duplicate entry '6101370' for key 'PRIMARY',
Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's
master log mysql-bin.000077, end_log_pos 1027953607, Error_code: 1062
可以看到报错原因为主键冲突
2.2 查看复制状态
我们执行
show slave statusG
可以看出是同样的报错
2.3 继续分析
一般这种情况是从库没有设置只读,检查过已经设置为只读
同时确认了该重复值在开始复制前就已存在,所以可能为复制的起始点错误导致
备份主库时一般使用mysqldump命令 加上--master-data参数可得到起始点
该主从使用的是innobackupex 工具
备份
innobackupex --parallel=16 --throttle=4000 --user=root --password=XXXX --slave-info /data/
还原
innobackupex --defaults-file=/etc/my.cnf --apply-log /data/2019-01-24_13-56-05
innobackupex --defaults-file=/etc/my.cnf --copy-back /data/2019-01-24_13-56-05
使用的复制起始点是 xtrabackup_binlog_pos_innodb 文件的内容
cat xtrabackup_binlog_pos_innodb
mysql-bin.000077 1027950562
一切看起来都设正常的,问题出在哪里呢
3. 问题解决
上面获取复制点的 xtrabackup_binlog_pos_innodb 文件引起了注意
一般我们用的xtrabackup_binlog_info 这个文件
这2个文件有什么区别呢
xtrabackup_binlog_pos_innodb 只记录innodb引擎的变化,而不会记录其他的引擎
接下来我们查询这2个文件的信息是否相同
最后发现xtrabackup_binlog_info的值要略大于xtrabackup_binlog_pos_innodb的值
这时原因找到了 是由于该数据库同时还有MyISAM引擎的表导致这2个文件的值不相同
最后我们使用xtrabackup_binlog_info里面的值,复制正常
5. 参考链接
https://blog.51cto.com/jschu/1704848
https://www.percona.com/doc/percona-xtrabackup/2.3/howtos/setting_up_replication.html
- Python标准库笔记(2) — re模块
- Python爬虫—破解JS加密的Cookie
- Go语言中json转成map结构
- rpc-dubbo简单入门
- Django 1.10中文文档-第一个应用Part3-视图和模板
- Go语言对JSON进行编码和解码
- [Go 语言社区]服务器自测JS 工程
- Django 1.10中文文档-第一个应用Part2-模型和管理站点
- 亿以内所有素数(Go语言版)
- Django 1.10中文文档-第一个应用Part1-请求与响应
- 三步学会用spring开发OSGI——(第二步:工程篇)
- Golang语言 控制结构
- Python标准库笔记(1) — string模块
- 曲线点抽稀算法-Python实现
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Ubuntu18.04 一键升级Python所有第三方包 及安装python包的方法
- 详解centos7上elastic search安装及填坑记
- Linux利用Sysctl命令调整内核参数
- 在ubuntu16.04上创建matlab的快捷方式(实现方法)
- CentOS 7.6 Telnet服务搭建过程(Openssh升级之战 第一任务备用运输线搭建)
- Ubuntu18.04下安装MySQL(图文教程)
- 基于 ffmpeg+Webassembly 实现视频帧提取
- Ubuntu14.04 opencv2.4.8和opencv3.3.1多版本共存的实现方法
- 解决Unixbench安装报错信息的问题
- 关于安装LNMP集成包后上传图片报500错误的解决方法
- linux下SVN配置实现项目目录自动更新以及源码安装的操作方法
- linux安装redis和mysql的实例讲解
- tomcat服务器如何配置字符集为utf-8彻底解决中文乱码的问题详解
- Linux下Android开发环境搭建的操作方法
- liunx 时间函数与时间格式与字符串之间的转化方法