天天看點

Mysql主從架構-主庫當機如何恢複業務最新部落格位址: https://www.dgstack.cn/archives/178.html

在我們日常工作場景,首先要做到架構無單點隐患,其次在優化【安全、性能、高可用、高并發等】,Mysql這款關系型資料庫穩定、高效,是以使用廣泛,如果企業架構是1主多從,那如果Mysql主庫當機,如何解決?

最新部落格位址: https://www.dgstack.cn/archives/178.html

----MySQL 主從同步原理圖

Mysql主從架構-主庫當機如何恢複業務最新部落格位址: https://www.dgstack.cn/archives/178.html

一、Mysql主庫當機情況分類:

1)硬體問題,(伺服器、ecs、虛拟主機等等)當機

2)service問題,Mysql當機,服務異常,端口異常等

二、硬體問題處理思路

硬體問題我們可以檢視IDC巡檢記錄,或通過遠端控制卡檢視硬體運作狀态,根據事實情況就行硬體故障報修進行處理,恢複業務步驟:

1)檢視報警資訊,确認業務是否收到影響,必要時切從庫進行資料互動
2)IDC詢問排查
3)确認硬體故障,短時間無法修複開Case處理
4)通知部門上司,處理進度,并實時記錄
5)事件處理完成後,拟寫故障報告,會議通報。           

三、MySQL service問題處理思路

1)首先要做的就是判斷是否影響業務,是否需要切庫,保證業務運作時首要任務

2)如果此時需要切從庫,安裝如下步驟進行:

1>   先檢視MySQL 從庫狀态
       show processlist\G
##如果看到兩個狀态,說明此時的從庫和主庫是同步的  =====[如果不同步,建議考出binlog進行同步]
#state: waiting for master to send event   I/O線程
#state:has read all relay log;waiting for the slave I/O thread to update it    sql線程

2>   登入從庫分别檢視:【多個從庫 哪個替代主庫呢??】
cat /data/3306/data/master.info
cat /data/3307/data/master.info
##看哪個從庫的哪個master.info哪個更新,就說明哪個從庫一緻性更高,是以此時就确定最新的庫為主庫。
選個pos最大的作為主庫
或利用半同步的功能,直接選擇做實時同步的這個從庫。

3> 確定所有relay log全部更新完畢。
stop slave io_thread;show processlist;    [在每個從庫上執行]
##直到看到has read all relay log;表示從庫更新都執行完畢

4> 登入從庫
mysql -uroot -p您的密碼 -S /data/3306/mysql.sock  #sock路徑根據自己的進行修改
stop slave;
reset master;
quit;

5> 進入資料庫資料目錄,删除master.info relay-log.info
cd /data/3306/data/master
rm -f master.info relay-log.info
## 檢查授權表,類似read-only參數

6>  3306 提升從庫為主庫
vim /data/3306/my.cnf
開啟:
log-bin =/data/3306/mysql-bin
## //如果存在log-slave-updates  read-only等參數一定要注釋掉。
/data/3306/mysql  stop
/data/3306/mysql  start
           

到此,提升主庫完畢

四、所有slave指向新的master

7> 如果主庫伺服器沒down,需要去主庫拉取bin-log補全提升主庫的從庫

8> 其它從庫操作 【指向新的master】

已檢查(同步user rep均存在)
登入從庫
stop slave;
change master to master_host='192.168.1.32'; //如果不同步,就指定位置點
start slave;
show slave status\G;
           

1.MHA 高可用 http://blog.51cto.com/qiuyt/1930629

2.RDS 高可用+自動容災 https://www.aliyun.com/product/rds/mysql【借用圖】

3.快照

方法很多,就看您如何選擇。
           

五、另外關于ECS無法使用 MHA 說法問題解釋

1、mha必須是0.56版本才支援GTID

2、阿裡雲ECS不支援浮動IP  阿裡雲HaVIP禁用
##要注意:阿裡雲的上ECS伺服器跟我們自己的虛拟機不一樣,它不支援浮動IP的

3、阿裡雲伺服器上keepalived隻能設定單點傳播

4、keepalived配置檔案裡加腳本判斷mysql是否啟動需要首尾寫好配置檔案