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 集群包含以下組件:
- MySQL Master:主庫,負(fù)責(zé)讀寫。
- MySQL Slave:一個(gè)或多個(gè)從庫,復(fù)制主庫的數(shù)據(jù)。
- MHA Manager:管理節(jié)點(diǎn)。這是 MHA 的核心,通常部署在一臺(tái)獨(dú)立的服務(wù)器上。它負(fù)責(zé)監(jiān)控所有 MySQL 節(jié)點(diǎn),并在主庫故障時(shí)執(zhí)行故障轉(zhuǎn)移操作。
- 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)控
- Manager 監(jiān)控所有節(jié)點(diǎn):MHA Manager 會(huì)周期性地(例如每秒一次)通過 SSH 連接到所有的 MySQL 節(jié)點(diǎn)(Master 和 Slaves),執(zhí)行
SELECT 1之類的簡單查詢來檢查它們的存活狀態(tài)。 - 收集復(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ì)
- 數(shù)據(jù)一致性高:通過補(bǔ)償未發(fā)送的 binlog,最大程度避免數(shù)據(jù)丟失。
- 故障轉(zhuǎn)移快速:通常在 10-30 秒內(nèi)即可完成自動(dòng)切換。
- 自動(dòng)化和易用性:無需人工干預(yù),提供了完善的管理命令。
- 對(duì)現(xiàn)有環(huán)境無侵入:MHA 只是在現(xiàn)有主從復(fù)制基礎(chǔ)上增加了一個(gè)管理層面,不需要對(duì) MySQL 本身做任何修改。
- 支持 GTID 和傳統(tǒng)復(fù)制:兼容性好。
MHA 的局限性
- 需要腳本和 SSH 信任:部署相對(duì)復(fù)雜,需要配置節(jié)點(diǎn)間的 SSH 免密登錄。
- 單點(diǎn) Manager:MHA Manager 本身是單點(diǎn),需要額外的手段來保證其高可用(比如部署備用 Manager 或使用 Keepalived)。
- 自愈能力有限:通常不提供自動(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.54 | host54 |
| Master | 安裝mysql5.7、MHA node 組件 | 192.168.4.51 | host51 |
| Slave1 | 安裝mysql5.7、MHA node 組件 | 192.168.4.52 | host52 |
| Slave2 | 安裝mysql5.7、MHA node 組件 | 192.168.4.53 | host53 |
關(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...A4.配置 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: Yes7)驗(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)文章
MySql的存儲(chǔ)過程學(xué)習(xí)小結(jié) 附pdf文檔下載
這篇文章主要是介紹mysql存儲(chǔ)過程的創(chuàng)建,刪除,調(diào)用及其他常用命令2012-03-03
mysql數(shù)據(jù)庫視圖和執(zhí)行計(jì)劃實(shí)戰(zhàn)案例
這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫視圖和執(zhí)行計(jì)劃的相關(guān)資料,在使用MySQL過程中視圖和執(zhí)行計(jì)劃是一個(gè)很好的工具,文中通過圖文以及代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
解決mysql數(shù)據(jù)庫數(shù)據(jù)遷移達(dá)夢(mèng)數(shù)據(jù)亂碼問題
最近接手一個(gè)java項(xiàng)目,需要進(jìn)行重構(gòu),使用國產(chǎn)數(shù)據(jù)庫達(dá)夢(mèng)8替換mysql數(shù)據(jù)庫需要滿足這個(gè)要求,在遷移過程中遇到mysql數(shù)據(jù)庫數(shù)據(jù)遷移達(dá)夢(mèng)數(shù)據(jù)亂碼問題,怎么解決呢,下面把過程分享給大家一起看看吧2021-08-08
與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(六)--函數(shù)
這一節(jié)主要介紹MYSQL里的函數(shù),MYSQL里的函數(shù)很多,我這里主要介紹MYSQL里有而SQLSERVER沒有的函數(shù)2014-08-08
查看本地MYSQL數(shù)據(jù)庫IP地址的三種方法
本文介紹了多種方法來查看連接到本地MySQL服務(wù)器的IP地址,括使用SQL查詢從`information_schema.processlist`獲取IP地址,并通過`group by`進(jìn)行統(tǒng)計(jì),以及通過命令行工具如`mysql`和`awk`進(jìn)行過濾和計(jì)數(shù),這些方法有助于監(jiān)控和管理數(shù)據(jù)庫連接,需要的朋友可以參考下2024-10-10
MySQL order by實(shí)現(xiàn)原理分析和Filesort優(yōu)化方式
這篇文章主要介紹了MySQL order by實(shí)現(xiàn)原理分析和Filesort優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
mysql用戶創(chuàng)建與授權(quán)的簡單實(shí)例
MySQL等主流數(shù)據(jù)庫的最高權(quán)限一般是root用戶,有時(shí)我們需要提供數(shù)據(jù)庫的賬號(hào)和密碼以使用某些服務(wù),下面這篇文章主要給大家介紹了關(guān)于mysql用戶創(chuàng)建與授權(quán)的相關(guān)資料,需要的朋友可以參考下2022-03-03

