一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - mysql 主從復制如何跳過報錯

mysql 主從復制如何跳過報錯

2021-02-23 17:20星火燎愿 Mysql

這篇文章主要介紹了mysql 主從復制如何跳過報錯,幫助大家更好的理解和使用MySQL 數據庫,感興趣的朋友可以了解下

一、傳統binlog主從復制,跳過報錯方法

?
1
2
3
4
mysql> stop slave;
mysql> set global sql_slave_skip_counter = 1;
mysql> start slave;
mysql> show slave status \G

二、GTID主從復制,跳過報錯方法

?
1
2
3
mysql> stop slave; #先關閉slave復制;
mysql> change master to ...省略... #配置主從復制;
mysql> show slave status\G #查看主從狀態;

發現報錯:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
mysql> show slave status\G
*************************** 1. row ***************************
        Slave_IO_State: Waiting for master to send event
         Master_Host: 172.19.195.212
         Master_User: master-slave
         Master_Port: 3306
        Connect_Retry: 60
       Master_Log_File: mysql-bin.000021
     Read_Master_Log_Pos: 194
        Relay_Log_File: nginx-003-relay-bin.000048
        Relay_Log_Pos: 454
    Relay_Master_Log_File: mysql-bin.000016
       Slave_IO_Running: Yes
      Slave_SQL_Running: No
       Replicate_Do_DB:
     Replicate_Ignore_DB:
      Replicate_Do_Table:
    Replicate_Ignore_Table:
   Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
          Last_Errno: 1007
          Last_Error: Error 'Can't create database 'code'; database exists' on query. Default database: 'code'. Query: 'create database code'
         Skip_Counter: 0
     Exec_Master_Log_Pos: 8769118
       Relay_Log_Space: 3500
       Until_Condition: None
        Until_Log_File:
        Until_Log_Pos: 0
      Master_SSL_Allowed: No
      Master_SSL_CA_File:
      Master_SSL_CA_Path:
       Master_SSL_Cert:
      Master_SSL_Cipher:
        Master_SSL_Key:
    Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
        Last_IO_Errno: 0
        Last_IO_Error:
        Last_SQL_Errno: 1007
        Last_SQL_Error: Error 'Can't create database 'code'; database exists' on query. Default database: 'code'. Query: 'create database code'
 Replicate_Ignore_Server_Ids:
       Master_Server_Id: 100
         Master_UUID: fea89052-11ef-11eb-b241-00163e00a190
       Master_Info_File: /usr/local/mysql/data/master.info
          SQL_Delay: 0
     SQL_Remaining_Delay: NULL
   Slave_SQL_Running_State:
      Master_Retry_Count: 86400
         Master_Bind:
   Last_IO_Error_Timestamp:
   Last_SQL_Error_Timestamp: 201022 09:31:29
        Master_SSL_Crl:
      Master_SSL_Crlpath:
      Retrieved_Gtid_Set: fea89052-11ef-11eb-b241-00163e00a190:8-5617
      Executed_Gtid_Set: a56c9b04-11f1-11eb-a855-00163e128853:1-11224,
fea89052-11ef-11eb-b241-00163e00a190:1-5614
        Auto_Position: 1
     Replicate_Rewrite_DB:
         Channel_Name:
      Master_TLS_Version:
1 row in set (0.01 sec)

可以看到 Slave_SQL_Running 為 NO,表示運行取回的二進制日志出了問題;
在 Last_Error 中也可以看到大概的報錯;(因為我之前的操作,大概可以判斷出 是因為主庫的二進制日志中有創建code庫的sql,而從庫上我已經創建了這個庫,應該是產生了沖突;)

解決方法:

1、如果清楚自己之前的操作,可以將從庫中產生沖突的庫刪除;
2、或者通過跳過GTID報錯的事務的方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
--- 通過 Last_SQL_Errno 報錯編號查詢具體的報錯事務
mysql> select * from performance_schema.replication_applier_status_by_worker where LAST_ERROR_NUMBER=1007\G
*************************** 1. row ***************************
     CHANNEL_NAME:
      WORKER_ID: 0
      THREAD_ID: NULL
    SERVICE_STATE: OFF
LAST_SEEN_TRANSACTION: fea89052-11ef-11eb-b241-00163e00a190:5615
  LAST_ERROR_NUMBER: 1007
  LAST_ERROR_MESSAGE: Error 'Can't create database 'code'; database exists' on query. Default database: 'code'. Query: 'create database code'
 LAST_ERROR_TIMESTAMP: 2020-10-22 09:31:29
1 row in set (0.00 sec)
 
mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)
 
--- 跳過查找到報錯的事務(LAST_SEEN_TRANSACTION 的值)
mysql> set @@session.gtid_next='fea89052-11ef-11eb-b241-00163e00a190:5615';
Query OK, 0 rows affected (0.00 sec)
 
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
 
--- 提交一個空的事務,因為設置gtid_next后,gtid的生命周期開始了,必須通過顯性的提交一個事務來結束;
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
 
--- 設置回自動模式;
mysql> set @@session.gtid_next=automatic;
Query OK, 0 rows affected (0.00 sec)
 
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

通過以上步驟,就跳過了這次的GTID報錯的事務,如果 start slave 之后還是有報錯,那么就按照此步驟繼續跳過;

經驗豐富的話,基本不用查詢事務,通過 Executed_Gtid_Set 就可以判斷出報錯的事務是 fea89052-11ef-11eb-b241-00163e00a190:5615 了;因為執行事務,到 fea89052-11ef-11eb-b241-00163e00a190:1-5614 的時候報錯了,應該可以判斷是 5615事務出現的錯誤;

以上就是mysql 主從復制如何跳過報錯的詳細內容,更多關于MySQL 跳過報錯的資料請關注服務器之家其它相關文章!

原文鏈接:http://blog.v587xpt.top/archives/mysql%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6%E6%8A%A5%E9%94%99%E8%B7%B3%E8%BF%87%E6%96%B9%E6%B3%95?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: sss在线观看免费视频 | 天干夜天天夜天干天ww | 日本动漫打扑克动画片樱花动漫 | 从后面撕开老师的丝袜动态图 | 成人性用品 | 天天操夜夜操狠狠操 | 久久免费观看视频 | 日韩成人在线免费视频 | 四虎884aa永久播放地址http | 催眠 迷j系列小说 | 魔兽官方小说 | 太粗 好紧 使劲舒服 | 精品国产91久久久久久久a | 成人网中文字幕色 | 男人捅女人动漫 | 咪咪爱在线视频 | 国产精品久久久久久久人人看 | 日韩欧美在线观看综合网另类 | 成人伊人青草久久综合网破解版 | 色婷婷综合缴情综六月 | 色淫影院 | 99re热这里只有精品视频 | 国产精品亚洲片在线观看麻豆 | 精品网站一区二区三区网站 | 久久九九久精品国产尤物 | 国产精品合集久久久久青苹果 | 日本免费三片在线播放 | 久久99热在线观看7 久久99精品涩AV毛片观看 | 久久草福利自拍视频在线观看 | 免费精品国产在线观看 | 三级全黄裸体 | 人人人人看人人人做人人 | 青青热久免费精品视频网站 | 1769亚洲资源站365在线 | 4虎影视国产在线观看精品 4s4s4s4s色大众影视 | 99在线免费观看 | 欧美日韩一区二区三区久久 | 成人在线视频国产 | 波多洁野衣一二区三区 | 99精品在线视频 | 亚洲天堂在线视频观看 |