最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL MHA 高可用集群搭建過程詳解

 更新時(shí)間:2025年10月27日 14:22:17   作者:云邊有個(gè)小代碼  
MHA 是一套優(yōu)秀的、開源的 MySQL 高可用性解決方案,它的核心目標(biāo)是在 MySQL 主從復(fù)制環(huán)境中,實(shí)現(xiàn)主庫故障時(shí)的自動(dòng)故障轉(zhuǎn)移和快速切換,盡可能保證數(shù)據(jù)庫服務(wù)的連續(xù)性,這篇文章主要介紹了MySQL MHA 高可用集群搭建指南,需要的朋友可以參考下

一、MHA 是什么?

MHA 是一套優(yōu)秀的、開源的 MySQL 高可用性解決方案。它的核心目標(biāo)是在 MySQL 主從復(fù)制環(huán)境中,實(shí)現(xiàn)主庫故障時(shí)的自動(dòng)故障轉(zhuǎn)移和快速切換,盡可能保證數(shù)據(jù)庫服務(wù)的連續(xù)性。

MHA 的組成

一個(gè)典型的 MHA 集群包含以下組件:

  1. MySQL Master:主庫,負(fù)責(zé)讀寫。
  2. MySQL Slave:一個(gè)或多個(gè)從庫,復(fù)制主庫的數(shù)據(jù)。
  3. MHA Manager管理節(jié)點(diǎn)。這是 MHA 的核心,通常部署在一臺(tái)獨(dú)立的服務(wù)器上。它負(fù)責(zé)監(jiān)控所有 MySQL 節(jié)點(diǎn),并在主庫故障時(shí)執(zhí)行故障轉(zhuǎn)移操作。
  4. MHA Node數(shù)據(jù)節(jié)點(diǎn)。由主庫以及從庫共同組成,這是一個(gè)運(yùn)行在每個(gè) MySQL 服務(wù)器(無論是主庫還是從庫)上的腳本集合。它負(fù)責(zé)執(zhí)行 Manager 發(fā)出的具體命令,比如切換虛擬 IP、對(duì)比日志等。

MHA 的核心工作原理

MHA 的工作原理可以概括為:一個(gè)聰明的“大腦”(Manager)時(shí)刻監(jiān)控著整個(gè) MySQL 集群,一旦“首領(lǐng)”(Master)倒下,它會(huì)立刻根據(jù)數(shù)據(jù)的新舊程度選出一個(gè)最合適的“新首領(lǐng)”,并設(shè)法找回“老首領(lǐng)”沒來得及交代的“遺言”(未同步的日志),最終讓所有“部下”(Slaves)效忠于“新首領(lǐng)”,從而快速恢復(fù)秩序。

MHA 的工作流程可以分為兩大階段:日常監(jiān)控階段故障轉(zhuǎn)移階段。

階段一:日常監(jiān)控

  1. Manager 監(jiān)控所有節(jié)點(diǎn):MHA Manager 會(huì)周期性地(例如每秒一次)通過 SSH 連接到所有的 MySQL 節(jié)點(diǎn)(Master 和 Slaves),執(zhí)行 SELECT 1 之類的簡單查詢來檢查它們的存活狀態(tài)。
  2. 收集復(fù)制拓?fù)湫畔?/strong>:Manager 會(huì)從各個(gè)節(jié)點(diǎn)獲取關(guān)鍵的復(fù)制信息,如:
    • 誰是當(dāng)前的主庫?
    • 誰是從庫?
    • 每個(gè)從庫的復(fù)制位置(Master_Log_File, Read_Master_Log_Pos)是多少?

這個(gè)階段,Manager 對(duì)整個(gè)集群的健康狀況和結(jié)構(gòu)了如指掌。

階段二:故障轉(zhuǎn)移(核心)

當(dāng) Manager 檢測(cè)到主庫無法連接或已經(jīng)宕機(jī)時(shí),它會(huì)自動(dòng)觸發(fā)故障轉(zhuǎn)移流程。這個(gè)過程非常精細(xì),是其高可靠性的關(guān)鍵。

第1步:驗(yàn)證主庫故障

  • Manager 會(huì)多次嘗試連接故障的主庫,確認(rèn)其是否真的不可用,而不是因?yàn)榫W(wǎng)絡(luò)抖動(dòng)。

第2步:選擇新的主庫

  • Manager 會(huì)根據(jù)預(yù)設(shè)的規(guī)則,從存活的從庫中選舉出一個(gè)新的主庫。
  • 選舉策略通?;冢?ul>
  • 配置優(yōu)先級(jí):在配置文件中明確指定候選主庫的優(yōu)先級(jí)。
  • 數(shù)據(jù)最新程度:比較所有從庫的復(fù)制位置,選擇擁有最新數(shù)據(jù)的從庫(即延遲最小的那個(gè))作為新主庫。這是 MHA 最關(guān)鍵的特性之一,它最大程度地保證了數(shù)據(jù)不丟失。

第3步:補(bǔ)償丟失的數(shù)據(jù)(關(guān)鍵步驟)

  • 這是 MHA 的精髓所在。由于主庫是突然宕機(jī)的,可能有一些已經(jīng)提交的二進(jìn)制日志事件(binlog events)沒有被任何從庫接收到。這些數(shù)據(jù)就“丟失”了。
  • MHA 會(huì)嘗試從宕機(jī)主庫的服務(wù)器上直接拷貝這些未發(fā)送的二進(jìn)制日志(如果服務(wù)器磁盤可訪問,比如硬件故障但磁盤完好)。
  • 然后,MHA 將這些獲取到的二進(jìn)制日志應(yīng)用到新選出的主庫上。這樣就最大限度地保證了數(shù)據(jù)的一致性,將數(shù)據(jù)丟失降到最低。

第4步:切換從庫到新主庫

  • Manager 通過 MHA Node 命令所有的其他從庫指向新的主庫,并重新開始復(fù)制(CHANGE MASTER TO ...)。

第5步:虛擬 IP 切換(可選但常用)

  • 為了使應(yīng)用程序無感知,通常會(huì)配合使用虛擬 IP。
  • Manager 會(huì)將原來指向舊主庫的虛擬 IP 重新綁定到新的主庫上。這樣,應(yīng)用程序無需修改任何配置,就能自動(dòng)連接到新的主庫。

第6步:通知管理員(可選)

  • 故障轉(zhuǎn)移完成后,MHA 可以通過郵件、短信等方式通知管理員,以便進(jìn)行后續(xù)的檢查和維護(hù)。

至此,整個(gè)故障轉(zhuǎn)移過程完成,集群恢復(fù)了服務(wù)。

MHA 的優(yōu)勢(shì)

  1. 數(shù)據(jù)一致性高:通過補(bǔ)償未發(fā)送的 binlog,最大程度避免數(shù)據(jù)丟失。
  2. 故障轉(zhuǎn)移快速:通常在 10-30 秒內(nèi)即可完成自動(dòng)切換。
  3. 自動(dòng)化和易用性:無需人工干預(yù),提供了完善的管理命令。
  4. 對(duì)現(xiàn)有環(huán)境無侵入:MHA 只是在現(xiàn)有主從復(fù)制基礎(chǔ)上增加了一個(gè)管理層面,不需要對(duì) MySQL 本身做任何修改。
  5. 支持 GTID 和傳統(tǒng)復(fù)制:兼容性好。

MHA 的局限性

  1. 需要腳本和 SSH 信任:部署相對(duì)復(fù)雜,需要配置節(jié)點(diǎn)間的 SSH 免密登錄。
  2. 單點(diǎn) Manager:MHA Manager 本身是單點(diǎn),需要額外的手段來保證其高可用(比如部署備用 Manager 或使用 Keepalived)。
  3. 自愈能力有限:通常不提供自動(dòng)將舊主庫重新拉回集群的功能,需要管理員手動(dòng)處理。

二、搭建MHA

實(shí)驗(yàn)思路:
1.MHA架構(gòu)
1)數(shù)據(jù)庫安裝
2)一主兩從
3)MHA搭建

2.故障模擬
1)主庫失效
2)備選主庫成為主庫
3)原故障主庫恢復(fù)重新加入到MHA成為從庫

架構(gòu)圖

1.環(huán)境準(zhǔn)備

節(jié)點(diǎn)服務(wù)器 所需服務(wù)及組件 IP地址 主機(jī)名

角色安裝組件IP地址主機(jī)名
MHA manager安裝MHA node 和 manager 組件192.168.4.54host54
Master安裝mysql5.7、MHA node 組件192.168.4.51host51
Slave1安裝mysql5.7、MHA node 組件192.168.4.52host52
Slave2安裝mysql5.7、MHA node 組件192.168.4.53host53

關(guān)閉防火墻,selinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.配置主機(jī)名和 Hosts 解析

分別編輯主機(jī)名

hostnamectl set-hostname host51 #4.51主機(jī)上執(zhí)行
hostnamectl set-hostname host52 #4.52主機(jī)上執(zhí)行
hostnamectl set-hostname host53 #4.53主機(jī)上執(zhí)行
hostnamectl set-hostname host54 #4.54主機(jī)上執(zhí)行

編輯所有節(jié)點(diǎn)的 /etc/hosts 文件,添加以下內(nèi)容

echo "192.168.4.51 host51" >> /etc/hosts
echo "192.168.4.52 host52" >> /etc/hosts
echo "192.168.4.53 host53" >> /etc/hosts
echo "192.168.4.54 host54" >> /etc/hosts

3.在所有數(shù)據(jù)庫節(jié)點(diǎn)安裝MySQL

示范在host51節(jié)點(diǎn)安裝,另外兩個(gè)節(jié)點(diǎn)同理

    [root@host51 ~]# tar -xvf mysql-5.7.17.tar   #v:顯示詳細(xì)信息
    [root@host51 ~]# yum -y install mysql-community-*.rpm
    [root@host51 ~]# systemctl restart mysqld         #啟動(dòng)服務(wù)
    [root@host51 ~]# systemctl enable mysqld
    [root@host51 ~]# ss -antlp | grep 3306
    [root@host51 ~]# ps -C mysqld         #查看進(jìn)程

連接數(shù)據(jù)庫
使用初始密碼登錄

    [root@host51 ~]# grep password /var/log/mysqld.log   #獲取初始密碼
    #重置密碼
    [root@host51 ~]# mysqladmin -uroot -p'qg1wpZ;G+deg' password '123qqq...A'   
    [root@host51 ~]# mysql -uroot -p123qqq...A

4.配置 SSH 免密登錄

在 MHA Manager 節(jié)點(diǎn)上生成密鑰對(duì),并分發(fā)到所有 MySQL 節(jié)點(diǎn)。

[root@host54 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@host54 ~]# ssh-copy-id root@host51
[root@host54 ~]# ssh-copy-id root@host52
[root@host54 ~]# ssh-copy-id root@host53

MHA Manager 需要通過 SSH 連接到所有 MySQL 節(jié)點(diǎn)執(zhí)行管理命令(如啟動(dòng)、停止、復(fù)制狀態(tài)檢查等),免密登錄是必須的。

數(shù)據(jù)庫節(jié)點(diǎn)之間也必須配置 SSH 免密碼登錄,這是 MHA 正常工作的關(guān)鍵要求。

[root@host51 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@host51 ~]# ssh-copy-id root@host52
[root@host51 ~]# ssh-copy-id root@host53
[root@host52 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@host52 ~]# ssh-copy-id root@host51
[root@host52 ~]# ssh-copy-id root@host53
[root@host53 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@host53 ~]# ssh-copy-id root@host51
[root@host53 ~]# ssh-copy-id root@host52

5.配置 MySQL Master 節(jié)點(diǎn)

1)修改 MySQL 配置文件 /etc/my.cnf

在mysqld下添加兩行

[mysqld]
server_id=51
log_bin=master51
relay-log-purge = 0  # 禁止自動(dòng)刪除中繼日志(控制是否自動(dòng)刪除不再需要的中繼日志)

重啟mysqld服務(wù)

systemctl restart mysqld

2)創(chuàng)建授權(quán)用戶

mysql> grant replication slave on *.* to repluser@"%" identified by '123qqq...A';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master51.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

6.配置 MySQL Slave 節(jié)點(diǎn) (host52 & host53)

1)修改 MySQL 配置文件 /etc/my.cnf:

在mysqld下添加server_id
host52:

[mysqld]
server_id=52
log_bin=master52
relay-log-purge = 0  # 禁止自動(dòng)刪除中繼日志(控制是否自動(dòng)刪除不再需要的中繼日志)

host53:

[mysqld]
server_id=53
log_bin=master53
relay-log-purge = 0  # 禁止自動(dòng)刪除中繼日志(控制是否自動(dòng)刪除不再需要的中繼日志)

重啟mysqld服務(wù)

[root@host52 ~]# systemctl restart mysqld
[root@host53 ~]# systemctl restart mysqld

2)指定主服務(wù)器信息并啟動(dòng)slave

host52:

mysql> change master to master_host='192.168.4.51',master_user='repluser',master_password='123qqq...A',master_log_file='master51.000001',master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.4.51
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master51.000001
          Read_Master_Log_Pos: 441
               Relay_Log_File: host52-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master51.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
....................

host53:

mysql> change master to master_host="192.168.4.51",master_user="repluser",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.4.51
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master51.000001
          Read_Master_Log_Pos: 441
               Relay_Log_File: host53-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master51.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
....................            

在所有slave節(jié)點(diǎn)也授權(quán)

grant replication slave on *.* to repluser@"%" identified by "123qqq...A";

7.安裝 MHA Node

MHA Node 需要在所有 MySQL 數(shù)據(jù)庫節(jié)點(diǎn)上安裝
MHA Node 是運(yùn)行在每臺(tái) MySQL 服務(wù)器上的代理。
mha-node資源包網(wǎng)址:
https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm

# 安裝依賴
# 如果 ncftp 不可用,可以跳過
[root@host51 mysql]# yum -y install perl-DBD-MySQL ncftp perl-DBIx-Simple
[root@host52 mysql]# yum -y install perl-DBD-MySQL nfctp perl-DBIx-Simple
[root@host53 mysql]# yum -y install perl-DBD-MySQL nfctp perl-DBIx-Simple
# 使用 Yum 安裝 MHA Node
[root@host51 mysql]# yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@host52 mysql]# yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm
[root@host53 mysql]# yum -y install mha4mysql-node-0.58-0.el7.centos.noarch.rpm

MHA Node 包含了 save_binary_logs, apply_diff_relay_logs 等關(guān)鍵腳本,用于故障切換時(shí)保存和應(yīng)用日志。

8.在Manager節(jié)點(diǎn)上啟用epel倉庫:

為什么需要 EPEL?
perl-Parallel-ForkManager、perl-Config-IniFiles、ncftp 這些包在 CentOS 默認(rèn)倉庫中不可用
EPEL 倉庫提供了這些額外的軟件包
先啟用 EPEL 可以避免 “No package available” 錯(cuò)誤

注意!下載epel倉庫需要聯(lián)網(wǎng),可以給manage節(jié)點(diǎn)設(shè)置雙網(wǎng)卡,其中一個(gè)網(wǎng)卡設(shè)置為NAT模式
下載 EPEL 的 RPM 包
EPEL 的官方地址可能會(huì)變,但你可以去這個(gè)鏈接下載最新的適用于 CentOS 7 的 EPEL 包:
安裝包下載:https://pan.quark.cn/s/956399e9b728

啟用 EPEL 倉庫
yum -y install epel-release-latest-7.noarch.rpm
yum clean all
yum repolist

9.安裝 MHA Manager

僅在 mha-manager 節(jié)點(diǎn)上執(zhí)行
MHA Manager 是管理核心。
mha-manager資源包網(wǎng)址:
https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
mha-node資源包網(wǎng)址:
https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm

# 安裝依賴
yum install -y perl-DBD-MySQL perl-Config-IniFiles perl-Time-HiRes perl-Parallel-ForkManager ncftp perl-Log-Dispatch perl-DBI mha4mysql-node-0.58-0.el7.centos.noarch.rpm
yum -y install mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

Manager 會(huì)監(jiān)控 Node 的狀態(tài),并在 Master 故障時(shí)協(xié)調(diào)故障切換過程

10.配置 MHA

創(chuàng)建 MHA 工作目錄和配置文件
在 mha-manager 節(jié)點(diǎn)上操作。

mkdir -p /etc/mha
mkdir -p /var/log/mha

創(chuàng)建主配置文件 /etc/mha/app1.cnf:

[server default]
# [server default] 段 - 全局默認(rèn)配置
# MySQL 用戶和密碼
# MHA Manager 連接 MySQL 節(jié)點(diǎn)時(shí)使用的用戶名和密碼
# 需要在所有 MySQL 節(jié)點(diǎn)上創(chuàng)建這個(gè)用戶并授予相應(yīng)權(quán)限
user=mha
password=123qqq...A
# MySQL 主從復(fù)制使用的用戶名和密碼
# 用于在故障切換時(shí)在新主庫上配置復(fù)制關(guān)系
repl_user=repluser
repl_password=123qqq...A
# SSH 配置
ssh_user=root
# MHA Manager 工作目錄
manager_workdir=/var/log/mha
manager_log=/var/log/mha/manager.log
# 遠(yuǎn)程工作目錄(在 MySQL 節(jié)點(diǎn)上)
remote_workdir=/var/log/mha
# 主從復(fù)制相關(guān)配置
ping_interval=3
# 二次檢查,防止腦裂
secondary_check_script=masterha_secondary_check -s host52 -s host53 -s host51
master_binlog_dir=/var/lib/mysql
# 故障切換腳本(可選)
#master_ip_failover_script=/etc/mha/master_ip_failover
[server1]
hostname=host51
candidate_master=1
[server2]
hostname=host52
candidate_master=1
[server3]
hostname=host53
no_master=1 # 這個(gè)節(jié)點(diǎn)永遠(yuǎn)不會(huì)被提升為新的 Master

解釋:
[server default]:全局默認(rèn)配置。
secondary_check_script:非常重要,通過多個(gè) Slave 來確認(rèn) Master 是否真的宕機(jī),防止網(wǎng)絡(luò)分區(qū)導(dǎo)致的腦裂。
candidate_master=1:優(yōu)先級(jí)高,在故障切換時(shí)優(yōu)先被提升為新主。
no_master=1:標(biāo)記該節(jié)點(diǎn)不應(yīng)被提升為主庫(例如,配置較低或用于備份)。

在master主庫授權(quán)mha用戶

mysql> grant all on *.* to mha@"%" identified by '123qqq...A';
Query OK, 0 rows affected, 1 warning (0.03 sec)

11.檢查 MHA 配置

# 檢查 SSH 連接
masterha_check_ssh --conf=/etc/mha/app1.cnf
# 檢查主從復(fù)制狀態(tài)
masterha_check_repl --conf=/etc/mha/app1.cnf

12.啟動(dòng) MHA Manager

mkdir -p /var/log/mha
nohup masterha_manager --conf=/etc/mha/app1.cnf < /dev/null > /var/log/mha/manager.log 2>&1 &

13.檢查 MHA 狀態(tài)

[root@host54 ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:12835) is running(0:PING_OK), master:host51

14.故障切換流程(無 VIP 版本)

自動(dòng)切換過程
MHA 檢測(cè)到 Master 宕機(jī)
自動(dòng)選擇最優(yōu) Slave(host52)提升為新 Master
其他 Slave(host53)重新指向新 Master
MHA Manager 記錄切換日志并自動(dòng)停止

1)手動(dòng)宕機(jī)master

停止 host51 的 MySQL 服務(wù)

在master節(jié)點(diǎn)執(zhí)行
systemctl stop mysqld

2)查看管理節(jié)點(diǎn)日志

在 host54 上驗(yàn)證
[root@host54 ~]# tail -f /var/log/mha/manager.log
Started automated(non-interactive) failover.
The latest slave host52(192.168.4.52:3306) has all relay logs for recovery.
Selected host52(192.168.4.52:3306) as a new master.
host52(192.168.4.52:3306): OK: Applying all logs succeeded.
host53(192.168.4.53:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
host53(192.168.4.53:3306): OK: Applying all logs succeeded. Slave started, replicating from host52(192.168.4.52:3306)
host52(192.168.4.52:3306): Resetting slave info succeeded.
Master failover to host52(192.168.4.52:3306) completed successfully.

3)檢查新主庫狀態(tài)

[root@host53 mysql]# mysql -h host52 -u mha -p123qqq...A -e "show master status"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master52.000001 |      441 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+

4)檢查從庫復(fù)制狀態(tài)

[root@host52 mysql]# mysql -h host53 -u mha -p123qqq...A -e "show slave status\G"
mysql: [Warning] Using a password on the command line interface can be insecure.
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.4.52
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master52.000001
          Read_Master_Log_Pos: 441
               Relay_Log_File: host53-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master52.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
..............................        

5)插入數(shù)據(jù)測(cè)試驗(yàn)證

在新主庫 host52 上插入數(shù)據(jù)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
mysql> create database d2;
Query OK, 1 row affected (0.02 sec)
mysql> create table d2.student(name char(10),number int default 10);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into d2.student values("bob",1);
Query OK, 1 row affected (0.01 sec)

在從庫 host53 上驗(yàn)證數(shù)據(jù)同步

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |                |
| d2                 |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)
mysql> select * from d2.student;
+------+--------+
| name | number |
+------+--------+
| bob  |      1 |
+------+--------+
1 row in set (0.00 sec)

6)恢復(fù)舊 Master

因?yàn)樵趆ost51宕機(jī)期間,現(xiàn)在的master節(jié)點(diǎn)插入了數(shù)據(jù),它們之間有數(shù)據(jù)差異,所以這里需要先同步數(shù)據(jù)
備份數(shù)據(jù)

[root@host52 ~]# mysqldump -uroot -p123456 --all-databases --master-data=1 > backup.sql
[root@host52 ~]# scp backup.sql host51:/root/

host51同步數(shù)據(jù)

[root@host51 ~]# systemctl start mysqld
[root@host51 ~]# mysql -uroot -p123456 < backup.sql 
[root@host51 ~]# mysql -uroot -p123456
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |               |
| d2                 |               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
7 rows in set (0.00 sec)
mysql> select * from d2.student;
+------+--------+
| name | number |
+------+--------+
| bob  |      1 |
+------+--------+
1 row in set (0.00 sec)

查看當(dāng)前master host52的status

mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master52.000001 |     1046 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

host51配置為當(dāng)前 Master 的從庫:

-- 在舊 Master 上執(zhí)行
mysql> change master to master_host="192.168.4.52", master_user="repluser", master_password="123qqq...A", master_log_file="master52.000001", master_log_pos=1046;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.4.52
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master52.000001
          Read_Master_Log_Pos: 1046
               Relay_Log_File: host51-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master52.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

7)驗(yàn)證舊master

在host52上插入數(shù)據(jù)

mysql> create database d3;
Query OK, 1 row affected (0.01 sec)
mysql> create table d3.student(name char(10),number int default 10);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into d3.student values("tom",2);
Query OK, 1 row affected (0.00 sec)

在host51上檢查數(shù)據(jù)

mysql> select * from d3.student;
+------+--------+
| name | number |
+------+--------+
| tom  |      2 |
+------+--------+
1 row in set (0.01 sec)

到此,mha高可用集群搭建完畢

到此這篇關(guān)于MySQL MHA 高可用集群搭建指南的文章就介紹到這了,更多相關(guān)MySQL MHA 高可用集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

海晏县| 莱阳市| 柞水县| 望城县| 惠安县| 资阳市| 鄂托克前旗| 娄底市| 北京市| 南宁市| 安顺市| 新干县| 祁东县| 高雄市| 天祝| 景东| 大同市| 温宿县| 新野县| 浦北县| 温泉县| 建宁县| 来宾市| 霞浦县| 黑河市| 临湘市| 射阳县| 松桃| 塔河县| 宽城| 根河市| 修文县| 池州市| 行唐县| 佛教| 汉中市| 龙山县| 浦城县| 呼伦贝尔市| 含山县| 千阳县|