在我們日常工作場景,首先要做到架構無單點隱患,其次在優化【安全、性能、高可用、高併發等】,Mysql這款關係型數據庫穩定、高效,所以使用廣泛,如果企業架構是1主多從,那如果Mysql主庫宕機,如何解決?
最新博客地址: https://www.dgstack.cn/archives/178.html
----MySQL 主從同步原理圖
一、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 高可用 https://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是否啓動需要首尾寫好配置文件
阿里雲工單反饋截圖