国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

MySQL數據庫雙主同步異常故障處理

IT那活兒 / 3029人閱讀
MySQL數據庫雙主同步異常故障處理
[
概述
]

在企業中,數據庫高可用一直是企業的重中之重,中小企業很多都是使用mysql主從方案,一主多從,讀寫分離等,但是單主存在單點故障,從庫切換成主庫需要作改動。因此,如果是雙主或者多主,就會增加mysql入口,增加高可用。不過多主需要考慮自增長ID問題,這個需要特別設置配置文件,比如雙主,可以使用奇偶,總之,主之間設置自增長ID相互不沖突就能完美解決自增長ID沖突問題。

[
故障背景
]

Linux系統環境:SUSE12.4

MySQL數據庫版本:5.7.29

Mysql數據庫架構:雙主

由于業務側在做雙主架構選擇的時候,沒有做VIP高可用冗余,所以只能實現普通的雙主基本復制功能,分別基于maser01和master02之間的讀寫同步復制。


[
故障發現
]


生產中經監控平臺發現MySQL數據庫雙主復制中SQL復制線程斷開,經排查發現雙主復制出現了異常,具體報錯信息如下圖所示:在master02數據庫服務器上發現,同步master01數據庫服務器的SQL線程斷開了,截圖如下:


此時,檢查master01數據庫服務器的同步情況,發現master01同步master02的復制目前是正常顯示的。


[
故障分析
]


4.1日志分析

通過查看日志文件發現如下報錯信息:

通過上面日志分析,發現雙主同步復制異常存在兩種情況:

A:master01的表數據可能被truncate導致master02同步異常中斷;


B:或者是master01和master02之間數據復制過程中主鍵沖突導致同步異常中斷。最后我們來清查一下對應報錯的表數據在master01和master02兩個庫中的數據是否一致,如果不一致,那就說明其中一個庫中的數據被清理了,或者另一個庫中的表數據同步一直不一致導致同步異常。


4.2表數據核對

1)經報錯信息查詢該表數據統計記錄master02的表數據量為:462740條。


2)同時也記錄了master01數據庫上,該表的數據量為:462733條。與master02對比發現數據量少了7條。


4.3主鍵沖突

將master02上的這個表全表導出備份后,再將該表數據導入到master01中,最后還是報該表存在數據主鍵沖突,報錯如下:


[
故障處理
]


5.1表數據恢復

在導入過程中,需要關閉binlog的記錄setsql_log_bin=0,避免導入數據表時報ID主鍵列沖突數據刷新到日志中,這樣master01的表數據就會被master02的表數據全部置換,在主主同時寫同時復制的情況下,之前一樣的數據就沒有了,最后剩下的是7條不一致的數據。雖然把主主復制功能恢復了,但是這個cer_work_order_temp表數據被新的二進制文件數據置換掉了,最終導致這表數據丟失。


5.2全量和增量恢復

通過全備+增量備份在測試環境對cer_work_order_temp表進行數據恢復,先找到增量起始點position812016541結合二進制日志進行恢復該表在master02服務器上的數據。


第一個binlog日志恢復命令如下:

mysql-bin.000025一次執行不完,分兩次執行:

第一次:

mysqlbinlog --no-defaults --start-position="812016541" --stop-position="883789149" mysql-bin.000025 |mysql --login-path=myconn

第二次:

mysqlbinlog --no-defaults --start-position="883789256" mysql-bin.000025 |mysql --login-path=myconn


第二個binlog日志恢復命令如下:

因第二個日志mysql-bin.000026事務量比較大,如果像第一個binlog那樣恢復的話,時間會很慢,所以第二個日志binlog我們采用sql文件導入方式:

根據發生的故障時間點,進行二進制日志數據的提取,提取方式如下所示:

mysqlbinlog   --stop-datetime=2020-07-07 23:59:59   mysql-bin.000026   > new_026.sql


5.3主鍵修復

刪除原表主鍵,再重建新表及1條索引,目的為了導入數據不沖突,并且導入速度快。

刪除主鍵并建索引:

alter table cer_work_order_temp drop primary key;

create index aa on cer_work_order_temp(serial_no);

創建新的aa表并把cer_work_order_temp信息同步:

create table aa as

select *,count(distinct serial_no) from cer_work_order_temp group by serial_no;


5.4導入修復好的表數據

再把new_026.sql數據導入數據庫即可

[mysql@vgasmrzfaceresource02 ~]$cat mysql_in.sh

mysql --login-path=myconn<

use smzrz;

set names utf8mb4;

select database();

set sql_log_bin=0;

source /data/backup/new_026.sql

EOF


5.5校驗數據

最終數據查詢,如下查詢已經恢復到原始數據量。

最后把這個表數據mysqldump到master01/master02數據庫,再把雙主復制功能恢復就可以了。


[
故障總結
]


此次故障恢復還是算流暢的,沒有遇到較大的難點,數據庫服務器恢復正常后,也通知業務側那邊進行數據校驗,同時得到他們的認可數據恢復一致,沒有問題再現。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/130108.html

相關文章

  • MySQL集群搭建(3)-MMM高可用架構

    摘要:上個文章集群搭建主主從模式中我們知道如何搭建主主從模式,今天這個文章正式進入高可用的架構。由開發,用來管理和監控雙主復制,雖然是雙主架構,但是業務上同一時間只允許一個節點進行寫入操作。包含兩類角色和分別對應讀寫節點和只讀節點。 上個文章 MySQL集群搭建(2)-主主從模式 中我們知道如何搭建 MySQL 主主從模式,今天這個文章正式進入 MySQL 高可用的架構。 1 MMM 介紹 ...

    _ivan 評論0 收藏0
  • MySQL高可用方案測試

    MySQL高可用方案測試 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; margin...

    IT那活兒 評論0 收藏2496

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<