首頁 資料庫 mysql教程 Mysql slave 同步错误解决_MySQL

Mysql slave 同步错误解决_MySQL

May 30, 2016 pm 05:10 PM
錯誤

分析解决

master 数据库提供服务,slave数据库作报表服务器,通过mysqlbin log做主从同步。

 

从报表数据来看,缺少了从10/28到现在(11/18)之前的数据,比对master、slave数据库主要表数据,发现:

 

10/28之后的slave库数据缺失,一致未同步。

 

查看slave mysql同步状态:

 

Mysql slave 同步错误解决_MySQL

关注图中黄色字段:

 

Slave_IO_Running: Yes

Slave_SQL_Running: No --- 表示sql进程未工作,问题就处在这。

 

图中粉色背景,Last_Error: ....

 

'Duplicate entry '1169595' for key 'PRIMARY'' on query. Default database: ''. Query: 'insert into  user。。。

 

这个错误很简单,违反主键唯一约束。

 

2. mysql 错误日志 通过my.conf 确定出错误日志文件,vi 查看,根据日志151028搜索到以下:

Mysql slave 同步错误解决_MySQL

 

 

从日志中,看到10/28 1:28:55 mysql 非正常关闭; 1:29 重启后,开始recovery。 1:29:16s 后I/O errror; 1:30:19s SQL error, slave SQL thread aborted(停止工作)。

 

mysql也给出了解决办法:

 

Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000274' position 504869752

 

重启,并告诉sql 执行的binlog 文件设置position, 重启slave. 错误仍存在,如下

 

 View Code

 

 

错误原因仍是

 

Last_SQL_Error: Error 'Duplicate entry '1169595' for key 'PRIMARY'' on query. Default database: ''. Query: 'insert into user (type,lang,ipAddr,activityStatus,extUserId,endpoint,createTime, email, userName, mobile, storageSize, tuner

)values ('normal','zh-xx','xxxx','active','913151000777430','xxx',now(),null,null,null,0,0)'

 

至此看来,虽然找到问题原因必须解决以上这个问题。 进一步了解mysql 同步机制及bin log, 原理:slave 获取master的binlog, 并执行,执行报错说明数据库已有这条记录,可能原因是日志中的position不准确,只能从binlog入手分析,

 

binlog查看参考: MySQL的binlog日志

 

这里通过第二种方式查看:

 

 mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

 

             选项解析:

               IN 'log_name'   指定要查询的binlog文件名(不指定就是第一个binlog文件)

               FROM pos        指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)

               LIMIT [offset,] 偏移量(不指定就是0)

               row_count       查询总条数(不指定就是所有行)

log_name, pos 错误日志已知道,查询如下:

Mysql slave 同步错误解决_MySQL

 

 

binlog 包括所有数据库操作的sql,每条记录包含1个数据库操作。

 

在bin log 中,很容易找到出错的语句,现在问题是:找到slave SQL线程执行到哪个position. 这里只能采用最笨的办法,根据sql 语句,查看slave库中的数据,如:

 

Query | 1 | 504873619 | replace into content_preference(userId,contentId,playRecordId,status,createTime) 

values (587658,15308,1544691,0,now())

 

此sql语句为向content_preference 插入一条记录,那么在salve库中content_preference 表中确定是否有id=587658,contentId=15308的记录,如果有,表示此语句已执行。

 

一直向下查找,最终找到没有执行的sql 的记录, 找到position。

 

至此,可以判断出slave库中执行binlog 的position, 重新设定slave库的binlog position ,启动slave, 查看执行状态,running, 见下:

 

 

mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000274',MASTER_LOG_POS=504873114;
Query OK, 0 rows affected (1.98 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)


mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Queueing master event to the relay log
                  Master_Host: 172.17.128.15
                  Master_User: xxx
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000274
          Read_Master_Log_Pos: 693913486
               Relay_Log_File: app3-relay-bin.000002
                Relay_Log_Pos: 1819098
        Relay_Master_Log_File: mysql-bin.000274
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

登入後複製

 

在备份执行完毕后,报表导出数据正常,问题解决。

 

反思

 mysql在11/28日重启,原因是当天线上服务出现异常,无法解决,重启了机器,当时没考虑到报表数据库也在此机器上,重启后也未检查数据库备份情况,直到用户使用才发现问题。

 

mysql意外重启,虽然在下次重启启动后,记录了异常信息,和备份的binlog 日志文件及位置。如果是正在执行binlog SQL,但此时mysql意外关闭,记录的position 较旧,导致下次启动时,

 

会有部分binlog 日志重复执行导致。 此问题,不能说是mysql bug,这种机制,可以保证slave数据不至于丢失,但需要人工找到posion,即可。

 

后续:

 

1. 对于机器重启情况, 可手动执行stop slave.  在正常关闭mysql, 重启后,手动start slave, 应该就可以正常同步。

 

2. 线上系统,重启一定要小心, 重启后监控相关模块是否启动,可以增加mysql slave工作监控。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

揭秘HTTP狀態碼460的出現原因 揭秘HTTP狀態碼460的出現原因 Feb 19, 2024 pm 08:30 PM

揭秘HTTP狀態碼460的出現原因

無法完成操作(錯誤0x0000771)印表機錯誤 無法完成操作(錯誤0x0000771)印表機錯誤 Mar 16, 2024 pm 03:50 PM

無法完成操作(錯誤0x0000771)印表機錯誤

Windows沙盒啟動失敗-存取被拒絕 Windows沙盒啟動失敗-存取被拒絕 Feb 19, 2024 pm 01:00 PM

Windows沙盒啟動失敗-存取被拒絕

解決電腦寬頻連線錯誤代碼651的方法 解決電腦寬頻連線錯誤代碼651的方法 Dec 24, 2023 am 11:19 AM

解決電腦寬頻連線錯誤代碼651的方法

Windows Update 更新提示Error 0x8024401c錯誤的解決方法 Windows Update 更新提示Error 0x8024401c錯誤的解決方法 Jun 08, 2024 pm 12:18 PM

Windows Update 更新提示Error 0x8024401c錯誤的解決方法

解決win11安裝autocad時遇到的錯誤 解決win11安裝autocad時遇到的錯誤 Dec 30, 2023 pm 03:23 PM

解決win11安裝autocad時遇到的錯誤

解決Tomcat 404錯誤:快速實用技巧 解決Tomcat 404錯誤:快速實用技巧 Dec 28, 2023 am 08:05 AM

解決Tomcat 404錯誤:快速實用技巧

伺服器在建立新的虛擬機器時遇到錯誤,0x80070003 伺服器在建立新的虛擬機器時遇到錯誤,0x80070003 Feb 19, 2024 pm 02:30 PM

伺服器在建立新的虛擬機器時遇到錯誤,0x80070003

See all articles