mysql 主從複製如何跳過報錯

2022-09-25 05:54:11 字數 4383 閱讀 1574

一、傳統binlog主從複製,跳過報錯方法

mysql> stop sl**e;

mysql> set global sql_sl**e_skip_counter = 1;

mysql> start sl**e;

mysql> show sl**e status \g

二、gtid主從複製,跳過報錯方法

mysql> stop sl**e; #先關閉sl**e複製;

mysql> change master to ...省略... #配置主從複製;

mysql>程式設計客棧 show sl**e status\g #檢視主從狀態;

發現報錯:

mysql> show sl**e status\g

*************************** 1. row ***************************

sl**e_io_state: waiting for master to send event

master_host: 172.19.195.212

master_user: master-sl**e

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

sl**e_io_running: yes

sl**e_sql_running: no

replicate_do_db:

replicate_ignore_db:

replicate_do_twww.cppcns.comable:

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

sl**e_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)

可以看到 sl**e_sql_running 為 no,表示執行取回的二進位制日誌**jyc出了問題;

在 last_error 中也可以看到大概的報錯;(因為我之前的操作,大概可以判斷出 是因為主庫的二進位制日誌中有建立code庫的sql,而從庫上我已經建立了這個庫,應該是產生了衝突;)

解決方法:

1、如果清楚自己之前的操作,可以將從庫中產生衝突的庫刪除;

2、或者通過跳過gtid報錯的事務的方法

--- 通過 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-b24

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 sl**e;

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 sl**e;

query ok, 0 rows affected (0.00 sec)

通過以上步驟,就跳過了這次的gtid報錯的事務,如果 start sl**e 之後還是有報錯,那麼就按照此步驟繼續跳過;

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

mysql主從複製

罪過啊,博主最近好久沒有更新部落格了,轉有道雲筆記了,筆記裡還有些乾貨,最近慢慢分享出來吧。博主最近發現有好多想學,但是發現精力有限啊,博主本來是搞個開發的,但是偏偏想把運維,dba的技術全都學了 mysql集群,nginx等等等 但是發現精力有限,所以簡單了解一下,mysql的主從複製,後面還有m...

MySQL 主從複製

1.概念 將主伺服器的資料複製到另外一台或多台伺服器的過程。也即將主資料庫的ddl和dml操作通過二進位制日誌傳到復 務器上,然後在從伺服器上對這些日誌進行重新執行,從而 保持資料同步。2.作用 降低主伺服器的訪問壓力 避免主伺服器因故障導致資料丟失。3.操作步驟 1 主伺服器將資料的改變記錄到二進...

MySQL 主從複製

資料分布。負載均衡 備份高可用性和故障切換 mysql公升級測試 mysql實現複製可以看做是三個步驟 在主庫上把資料更改記錄到二進位制日誌 binary log 中 這些記錄被稱為二進位制日誌事件 在每次準備提交事務完成資料更新前,主庫將資料更新的事件記錄到二進位制日誌中,在記錄二進位制日誌後,主...