項目實戰7—Mysql實現企業級資料庫主從複製架構實戰

来源:http://www.cnblogs.com/along21/archive/2017/12/09/8011596.html
-Advertisement-
Play Games

Mysql實現企業級資料庫主從複製架構實戰 環境背景:公司規模已經形成,用戶數據已成為公司的核心命脈,一次老王一不小心把資料庫文件刪除,通過mysqldump備份策略恢復用了兩個小時,在這兩小時中,公司業務中斷,損失100萬,老王做出深刻反省,公司也因此對於資料庫的性能和可靠性提出更高要求。 要求對 ...


Mysql實現企業級資料庫主從複製架構實戰

  環境背景:公司規模已經形成,用戶數據已成為公司的核心命脈,一次老王一不小心把資料庫文件刪除,通過mysqldump備份策略恢復用了兩個小時,在這兩小時中,公司業務中斷,損失100萬,老王做出深刻反省,公司也因此對於資料庫的性能和可靠性提出更高要求。

要求對資料庫進行改造,使其承載力進行提升,故障修複時間減少,有沒有能實現的方案呢?

Mysql實現資料庫主從複製實戰架構及其原理

1、實驗架構及其原理

資料庫高可用架構分為

主從:一主一從,一主多從,一主從從

雙主

2、過程分析

(1)主資料庫(innodb引擎)的操作:

① 一個寫的請求,先寫到redo事務日誌中,

② mysql的進程讀事務日誌,事務日誌的內容做到資料庫記憶體中;此時可以回覆客戶端,數據為臟數據

③ 請求的操作記錄到二進位日誌

二進位日誌再寫磁碟中寫;優化策略,變隨機寫為順序寫

(2)從資料庫的操作:

I/O thread線程:從主的資料庫上,把二進位文件的內容過來,寫到relay log中繼日誌

SQL thread線程:把relay log內容拉出來,寫到資料庫記憶體

⑦ 從資料庫也可以把執行的操作記錄到自己的二進位文件中,非必須

⑧ 從資料庫的二進位寫到自己的磁碟

 

3、主從的優勢

一個master 寫入,多個slave同時讀出;大大提高了讀的效率

現實中,很多都是讀的請求大,寫的請求相對小的多,如電商網站,大多都是人們去訪問,下單的較少;所以主從的關係已經能很好的提高性能了

 

4、實驗前準備

① iptables -F && setenforce 清空防火牆策略,關閉selinux

② 拿兩台伺服器都使用yum 方式安裝Mysql 服務,要求版本一致

③ 分別啟動兩台伺服器mysql

 

實戰一:Mysql實現資料庫簡單一主多從複製實戰

1、環境準備

centos 系統伺服器3 台、一臺用戶做Mysql 主伺服器,2台用於做Mysql 從伺服器,配置好yum 源、 防火牆關閉、各節點時鐘服務同步、各節點之間可以通過主機名互相通信

機器名稱

IP配置

服務角色

備註

master-mysql

192.168.30.107

主資料庫

二進位日誌

slave-mysql1

192.168.30.7

從資料庫

中繼日誌

slave-mysql2

192.168.30.2

從資料庫

中繼日誌

 

2、在主master 主伺服器上

① vim /etc/my.cnf 修改mysql主配置文件,對master進行配置,包括打開二進位日誌,指定唯一的servr ID

server-id=1             #配置server-id,讓主伺服器有唯一ID號
log-bin=mysql-bin   #打開Mysql日誌,日誌格式為二進位
skip-name-resolve   #關閉名稱解析,(非必須)

systemctl start mariadb 開啟服務

 

創建並授權slave mysql 用的複製帳號

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'192.168.%.%' IDENTIFIED BY 'along';
分析:在Master的資料庫中建立一個備份帳戶:每個slave使用標準的MySQL用戶名和密碼連接master。進行複製操作的用戶會授予REPLICATION SLAVE許可權。

③ 查看主伺服器狀態

在Master的資料庫執行show master status,查看主伺服器二進位日誌狀態,位置號

 

3、在從slave mysql1上

① 修改主配置文件

vim /etc/my.cnf 打開中繼日誌,指定唯一的servr ID,設置只讀許可權

server-id=2       #配置server-id,讓從伺服器有唯一ID號
relay_log = mysql-relay-bin    #打開Mysql日誌,日誌格式為二進位
read_only = 1    #設置只讀許可權
log_bin = mysql-bin         #開啟從伺服器二進位日誌,(非必須)
log_slave_updates = 1  #使得更新的數據寫進二進位日誌中

systemctl start mariadb 開啟服務

 

啟動從伺服器複製線程,讓slave連接master,並開始重做master二進位日誌中的事件。

MariaDB [(none)]> change master to master_host='192.168.30.107',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=245;
MariaDB [(none)]>  start slave;   # 啟動複製線程,就是打開I/O線程和SQL線程;實現拉主的bin-log到從的relay-log上;再從relay-log寫到資料庫記憶體里

③ 查看從伺服器狀態

可使用SHOW SLAVE STATUS\G查看從伺服器狀態,如下所示,也可用show processlist \G查看當前複製狀態:

Slave_IO_Running: Yes #IO線程正常運行

Slave_SQL_Running: Yes #SQL線程正常運行

 

4、測試

① 在主上創建一個along庫

② 從上自動生成along資料庫

 

5、若要繼續添加新salve,實現一主多從

假如master 已經運行很久了,想對新安裝的slave 進行數據同步,甚至它沒有master 的數據。

(1)在主master-mysql 上

① 進行完全備份
mysqldump --all-databases > /backup/mysql-all-backup-`date +%F-%T`.sql
把備份生成的文件發給salve-mysql2機器上
scp /backup/mysql-all-backup-2017-11-20-22\:04\:06.sql @192.168.30.2:  
② 查看現在的二進位文件狀態
MariaDB [(none)]> show master status;

(2)在從slave-mysql2上

① vim /etc/my.cnf 修改主配置文件,設為從

② 進行master的完全備份恢復

mysql -uroot -p < mysql-all-backup-2017-11-20-22\:04\:06.sql

systemctl start mariadb 開啟服務

恢復完後,數據直接與主完全一致

啟動從伺服器複製線程

MariaDB [(none)]> change master to master_host='192.168.30.107',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000003',
    -> master_log_pos=500;

 

6、測試三台機器的一主多從關係

① 在master 上創建home資料庫

② 在slave-mysql1 和2 上自動生成home庫

 

7、解除主從關係,恢復獨立的伺服器

① MariaDB [(none)]> stop slave; 關閉兩個線程

② vim /etc/my.cnf 刪除3行

relay-log =mysql-relay-log
read-only = 1
log_slave_updates = 1

③ systemctl restart mariadb 重啟服務

實戰二:實現主從從架構及複製過濾器

架構原理一個主master,一個從slave1;從slave1再做主,另一個slave2以他為主做從;大體做法與上實驗相似

複製過濾原理:複製過濾器:(黑、白名單)僅複製有限一個或幾個資料庫相關的數據,而非所有;由複製過濾器進行;

有兩種實現思路:

(1) 主伺服器
主伺服器僅向二進位日誌中記錄有關特定資料庫相關的寫操作;
binlog_do_db=      #僅允許從複製這個庫的二進位日誌
binlog_ignore_db=  #除了這個庫,其他都允許複製
(2) 從伺服器
從伺服器的SQL THREAD僅重放關註的資料庫或表相關的事件,並將其應用於本地;
Replicate_Do_DB=       #只複製主的這個資料庫數據
Replicate_Ignore_DB=  #除了這個都複製

1、環境準備

機器名稱

IP配置

服務角色

備註

master-mysql

192.168.30.107

主資料庫

二進位日誌

slave-mysql1

192.168.30.7

從資料庫

中繼日誌

slave-mysql2

192.168.30.2

從資料庫

中繼日誌

2、在主master 主伺服器上

① vim /etc/my.cnf  修改mysql主配置文件,對master進行配置,打開二進位日誌,指定唯一的servr ID,設置複製過濾
server-id=1             #配置server-id,讓主伺服器有唯一ID號
log-bin=mysql-bin   #打開Mysql日誌,日誌格式為二進位
skip-name-resolve   #關閉名稱解析,(非必須)
binlog_ignore_db=home   #除了home資料庫,其他都允許從複製主的二進位文件
#binlog_do_db=along   #僅允許從複製along資料庫的二進位文件

systemctl start mariadb 開啟服務

 

創建並授權slave mysql 用的複製帳號

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'192.168.%.%' IDENTIFIED BY 'along';
分析:在Master的資料庫中建立一個備份帳戶:每個slave使用標準的MySQL用戶名和密碼連接master。進行複製操作的用戶會授予REPLICATION SLAVE許可權。

③ 查看主伺服器狀態

在Master的資料庫執行show master status,查看主伺服器二進位日誌狀態,位置號

 

3、在從slave mysql1上

① 修改主配置文件

vim /etc/my.cnf 打開中繼日誌,指定唯一的servr ID,設置只讀許可權

server-id=2       #配置server-id,讓從伺服器有唯一ID號
relay_log = mysql-relay-bin    #打開Mysql日誌,日誌格式為二進位
read_only = 1    #設置只讀許可權
log_bin = mysql-bin         #開啟從伺服器二進位日誌,(必須)
log_slave_updates = 1  #使得更新的數據寫進二進位日誌中

systemctl start mariadb 開啟服務

 

啟動從伺服器複製線程,讓slave連接master,並開始重做master二進位日誌中的事件。

MariaDB [(none)]> change master to master_host='192.168.30.107',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=245;
MariaDB [(none)]>  start slave;   # 啟動複製線程,就是打開I/O線程和SQL線程;實現拉主的bin-log到從的relay-log上;再從relay-log寫到資料庫記憶體里

③ 查看從伺服器狀態

可使用SHOW SLAVE STATUS\G查看從伺服器狀態,如下所示,也可用show processlist \G查看當前複製狀態:

Slave_IO_Running: Yes #IO線程正常運行

Slave_SQL_Running: Yes #SQL線程正常運行

 

4、測試主從和複製過濾

(1)測試主從關係

在主上創建一個along、home庫;從上自動生成along、home資料庫

(2)測試複製過濾

① 在主上:在along庫中創建一個classes的表;從上自動生成

MariaDB [home]> create table classes (id int not null,name varchar(20));

② 在主上:在home庫中創建一個classes的表;從上沒有生成

MariaDB [home]> create table classes (id int not null,name varchar(20));

slave-mysql1 上,過濾成功

 

5、設置slave-mysql2 為slave-mysql1 的從,且在mysql2 設置複製過濾

(1)在slave-mysql1上,不用怎麼設置

因為上邊主配置文件已經開啟了自己的二進位文件;且slave-mysql1 是從開始就同步master的,所以授權命令也同步過了

MariaDB [home]> select user,host from mysql.user; 可以查看自己授權過的用戶

 

(2)slave-mysql2 上,可以像上實驗一樣,先給主的完全備份在本機恢復一下

① 在主上完備
mysqldump --all-databases > /backup/mysql-all-backup-`date +%F-%T`.sql
scp /backup/mysql-all-backup-2017-11-21-11:14:59.sql @192.168.30.2:  

② 進行master的完全備份恢復
mysql -uroot -p < mysql-all-backup-2017-11-20-22\:04\:06.sql

③ 在slave-mysql2 上
vim /etc/my.cnf  修改主配置文件,設為從;且設置過濾
server-id =3
relay-log =mysql-relay-log
read-only = 1
log-bin = mysql-bin
log_slave_updates = 1
replicate_do_dB=along    #只複製它的主的along資料庫

systemctl start mariadb 開啟服務

 

④ mysql 打開資料庫,查看數據恢覆成功;

啟動從伺服器複製線程,讓slave連接master,並開始重做master二進位日誌中的事件。

MariaDB [(none)]> change master to master_host='192.168.30.107',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000008',
    -> master_log_pos=773;
MariaDB [(none)]> start slave;

⑤ MariaDB [(none)]> show slave status \G; 查看,兩個進程打開,且只複製主的along資料庫

 

6、測試主從從和slave-mysql2的複製過濾

(1)在主上刪除job資料庫,master 和slave-mysql1 都刪除成功

MariaDB [home]> drop database job; 刪除job庫

因為slave-mysql2 只同步slave-mysql1 的along庫,所以沒有刪除

 

(2)在主上的along資料庫,創建一個grade 表,master 和slave-mysql1 都刪除成功

MariaDB [along]> create table grade (id int not null,name varchar(20));

在slave-mysql2 上也自動生成成功

 

實戰三:mysql資料庫雙主的實現

原理:雙主就是雙方互為主從

為瞭解決雙主同時對一個資料庫進行寫入,採用自增長ID來解決,兩個mysql寫入用奇偶ID岔開

① 創建表,設置ID為自增長
create table userInfo (id int PRIMARY KEY AUTO_INCREMENT,name varchar(50) NOT NULL);
② 定義一個節點使用奇數id:從1開始,步長為2,
auto_increment_increment=2   #表示自增長欄位每次遞增的量,步長
auto_increment_offset=1          #表示自增長欄位從那個數開始
③ 另一個節點使用偶數id:從2開始,步長為2,
auto_increment_increment=2
auto_increment_offset=2

應用:只適合小型公司,小併發訪問量,畢竟同時寫入易出錯

 

1、環境準備

機器名稱

IP配置

服務角色

備註

mysql1

192.168.30.107

資料庫

中繼日誌、二進位日誌

mysql2

192.168.30.7

資料庫

中繼日誌、二進位日誌

2、配置總配置文件,除了ID號和起始數,兩邊都是一樣的

vim /etc/my/cnf

server-id =1    #mysql1的配置ID為1,mysql2的ID為2
relay-log =mysql-relay-log
log-bin = mysql-bin
log_slave_updates = 1
auto_increment_increment=2   #表示自增長欄位每次遞增的量,步長
auto_increment_offset=1   #表示自增長欄位從那個數開始,mysql1從1開始;mysql2從2開始

systemctl start mariadb

 

3、互相設為對方的從

1)授權遠程登錄的用戶
mysql1、2 上
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@'192.168.%.%' IDENTIFIED BY 'along';

(2)開啟複製線程
① mysql1 上
MariaDB [(none)]> change master to master_host='192.168.30.7',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000002',
    -> master_log_pos=245;
MariaDB [(none)]>  start slave;   # 啟動複製線程

② mysql2 上
MariaDB [(none)]> change master to master_host='192.168.30.107',
    -> master_user='slave',
    -> master_password='along',
    -> master_log_file='mysql-bin.000002',
    -> master_log_pos=245;
MariaDB [(none)]>  start slave;   # 啟動複製線程

4、測試雙方互為主從的關係

在mysql1上,刪除test資料庫;mysql2 上也自動刪除

在mysql2上,創建xiaohei資料庫;mysql2 上也自動生成

 

5、設置自增長ID的表

MariaDB [along]> create table home (id int PRIMARY KEY AUTO_INCREMENT,name varchar(20));

① 在mysql1上向表中插入數據

MariaDB [along]> insert into home(name) value('mayun'),('mahuateng'),('wangjianlin');

② 在mysql2上向表中插入數據

MariaDB [along]> insert into home(name) value('dinglei'),('liyanhong'),('leijun');

 

實驗四:實現半同步複製的一主多從

  原理:介於非同步複製和全同步複製之間,主庫在執行完客戶端提交的事務後不是立刻返回給客戶端,而是等待至少一個從庫接收到並寫到relay log中才返回給客戶端。相對於非同步複製,半同步複製提高了數據的安全性,同時它也造成了一定程度的延遲,這個延遲最少是一個TCP/IP往返的時間。所以,半同步複製最好在低延時的網路中使用。

註意:本來是應該最少2個從mysql,才能有真正的效果,但是原理都是一樣的,我就只用了一主一從

1、環境準備

機器名稱

IP配置

服務角色

備註

master-mysql

192.168.30.107

主資料庫

二進位日誌

slave-mysql

192.168.30.7

從資料庫

中繼日誌

2、按照實戰一,實現主從

 

3、載入模塊,實現半同步

(1)在主master-mysql 上:

MariaDB [(none)]> install plugin rpl_semi_sync_master soname 'semisync_master.so';  載入模塊
MariaDB [(none)]> show global variables like 'rpl_semi%';  查看是否開啟 
MariaDB [(none)]> set global rpl_semi_sync_master_enabled = on;   開啟

 

(2)在從slave-mysql 上:

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';
set global variables rpl_semi_sync_slave_enabled = on;
為了主從同步,再重啟啟動下slave 兩個進程
MariaDB [(none)]> stop slave;
MariaDB [(none)]> start slave;

 

4、查詢日誌,驗證

cd /var/log/mariadb/

tail mariadb.log

註釋:

① 用於事務的半同步複製。

② 在主伺服器上啟用了半同步複製。

③ 啟動半同步的binlog 轉儲到slave (id:2)上

④ 停止非同步的二進位文件轉儲

 

實驗五:實現MHA 高可用mysql資料庫架構

原理:總之就是當主master mysql宕機時,從slave mysql頂上去的一系列操作

① 從宕機崩潰的master 保存二進位日誌事件(binlog events );

② 識別含有最新更新的slave;

③ 應用差異的中繼日誌(relay log) 到其他slave;

④ 應用從master 保存的二進位日誌事件(binlog events);

提升一個slave 為新master;

⑥ 使用其他的slave 連接新的master

 

架構圖

1、環境準備

機器名稱

IP配置

服務角色

備註

master-mysql

192.168.30.107

主資料庫

二進位日誌、中繼日誌

slave-mysql1

192.168.30.7

從資料庫

二進位日誌、中繼日誌

slave-mysql2

192.168.30.2

從資料庫

二進位日誌、中繼日誌

MHA manager

192.168.30.3

MHA的管理節點

 

2、實現三台伺服器的一主多從

註意點:

① 每個節點都需開啟二進位和中繼日誌,因為主會宕機,當主的機器修複完畢,可以作為從繼續使用,所以中繼日誌是必須的;從也會在主宕機的時候,頂為主,所以二進位日誌也是必須的

② 各從節點必須顯示啟用其read-only 屬性,並關閉relay_log_purge 清理中繼日誌的功能

③ 註意每個mysql 的server-id都不能相同

1)vim  /etc/my.cnf  修改配置文件
① 主的配置文件
server-id=1
log-bin=mysql-bin
relay-log=mysql-relay-log
skip-name-resolve

② 從的配置文件,各個從的配置文件除了ID,其他都相同
server-id =2[/3]    #各自對應自己的id
relay-log =mysql-relay-log
log-bin = mysql-bin
read_only = on
relay_log_purge = 0
skip_name_resolve

systemctl start mariadb   啟動服務

(2)在主上:授權
MariaDB [(none)]> grant replication slave,replication client on *.* to slave@'192.168.30.%' identified by 'along';

(3)在從上:開啟I/O,SQL線程,實現主從
MariaDB [(none)]> change master to master_host='192.168.30.107',
master_user='slave',
master_password='along',
master_log_file='mysql-bin.000001',
master_log_pos=245;
MariaDB [(none)]> start slave ;

 

3、配置MHA的準備

(1)MHA的安裝

需安裝2個包 rz,我已經放到我網盤裡,需要的私聊http://pan.baidu.com/s/1kV8BCJt

mha4mysql-manager-0.56-0.el6.noarch.rpm

mha4mysql-node-0.56-0.el6.noarch.rpm

所有節點,包括Manager都需安裝:

yum -y localinstall mha4mysql-*

 

(2)實現各個節點都基於秘鑰認證

分析:MHA 集群中的各節點彼此之間均需要基於ssh 互信通信,以實現遠程式控制制及數據管理功能。

例:主master 機器:

ssh-keygen -t rsa    生成公私秘鑰對,可以直接敲3個回車,不須加密
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.30.7:  
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.30.2:
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.30.3:   把公鑰發給其他3個機器
註意:每個mysql伺服器都需要發送自己的公鑰

 

(3)給MHA manager授權

MariaDB [(none)]> grant all on *.* to 'mhaadm'@'192.168.30.%' identified by 'along';

註意:MHA manager 需要做很多事,所以給很大的許可權;且已經實現主從,所以只需在master上執行授權命令

 

(4)定義MHA 管理配置文件

mkdir /etc/mha_master 創建配置文件存放目錄

vim /etc/mha_master/app.cnf 設置配置文件,註意註釋不要加在配置文件中,否則檢測不過

[server default]         // 適用於server1,2,3 個server 的配置
user=mhaadm            //mha 管理用戶
password=along         //mha 管理密碼
manager_workdir=/etc/mha_master/app         //mha_master 自己的工作路徑
manager_log=/etc/mha_master/manager.log  // mha_master 自己的日誌文件
remote_workdir=/mydata/mha_master/app     // 每個遠程主機的工作目錄在何處
ssh_user=root                 //  基於ssh 的密鑰認證
repl_user=slave              // 資料庫用戶名
repl_password=along     // 資料庫密碼
ping_interval=1     // ping 間隔時長
[server1]               // 節點1
hostname=192.168.30.107   // 節點1 主機地址
ssh_port=22          // 節點1 的ssh 埠
candidate_master=1            //  將來可不可以成為master 候選節點/ 主節點
[server2]
hostname=192.168.30.7
ssh_port=22
candidate_master=1
[server3]
hostname=192.168.30.2
ssh_port=22
candidate_master=1

4、開啟服務之前的檢測

註意:開啟服務之前的檢查非常有必要,因為mha服務是管理mysql的,所有要求很嚴格,如果檢查通不過,開啟服務時會有一堆錯誤。每次啟動服務之前都需檢測環境。

① 檢測各節點間ssh 互信通信配置是否Ok:

masterha_check_ssh -conf=/etc/mha_master/app.cnf

  輸出信息最後一行類似如下信息,表示其通過檢測。

  [info]All SSH connection tests passed successfully.

② 檢查管理的MySQL 複製集群的連接配置參數是否OK :

masterha_check_repl -conf=/etc/mha_master/app.cnf

  輸出信息最後一行類似如下信息,表示其通過檢測。

  MySQL Replication Health is OK.

 

註意:如果測試時會報錯 ,可能是從節點上沒有賬號,因為這個架構,任何一個從節點,將有可能成為主節點,所以也需要創建賬號。

因此,這裡只要在mater 節點上再次執行以下操作即可:

  MariaDB [(none)]> grant all on *.* to 'mhaadm'@'192.168.30.%' identified by 'along';

  MariaDB [(none)]> FLUSH PRIVILEGES;

Manager 節點上再次運行,就顯示Ok 了。

 

5、啟動MHA

(1)開啟mha服務

nohup masterha_manager -conf=/etc/mha_master/app.cnf &> /etc/mha_master/manager.log &
啟動成功後,可用過如下命令來查看master 節點的狀態:
masterha_check_status -conf=/etc/mha_master/app.cnf

app (pid:3777) is running(0:PING_OK), master:192.168.30.107

上面的信息中"app (pid:3777)is running(0:PING_OK)" 表示MHA 服務運行OK ,否則,則會顯示為類似"app is stopped(1:NOT_RUNNINg)."

(2)如果要停止MHA ,需要使用master_stop 命令。

masterha_stop -conf=/etc/mha_master/app.cnf

 

6、測試MHA 測試故障轉移

(1) 在master 節點關閉mariadb 服務, 模擬主節點數據崩潰

killall -9 mysqld mysqld_safe

rm -rf /var/lib/mysql/*

(2) 在manager 節點查看日誌:

tail -20 /etc/mha_master/manager.log 日誌文件中出現如下信息,表示manager 檢測到192.168.30.107節點故障,而後自動執行故障轉移,將192.168.30.7 提升為主節點。

註意:故障轉移完成後,manager 將會自動停止,此時使用

masterha_check_status 命令檢測將會遇到錯誤提示,如下所示:

 

7、提供新的從節點以修複複製集群

原有 master 節點故障後,需要重新準備好一個新的 MySQL 節點。基於來自於master 節點的備份恢複數據後,將其配置為新的 master 的從節點即可。註意,新加入的節點如果為新增節點,其 IP 地址要配置為原來 master 節點的 IP ,否則,還需要修改 app.cnf 中相應的 ip 地址。隨後再次啟動 manager ,並再次檢測其狀態。

除了增加新的mysql 節點,也可以將壞掉主mysql 修複,再將其作為從加入集群中。由於機器有限,我就用修複好的主作為從,修複複製集群。

(1)修複主mysql

yum -y remove mariadb-server

yum -y install mariadb-server

 

(2)在另兩個機器上備份,在修複好的機器上恢復

① 在另外正常的機器上備份

mysqldump --all-databases > /backup/mysql-all-backup-`date +%F-%T`.sql

scp /backup/mysql-all-backup-2017-11-26-14\:03\:19.sql @192.168.30.107:

 

② 在修複的機器上修複

mysql -uroot -p < mysql-all-backup-2017-11-26-14\:03\:19.sql

 

(3)把修複的機器作為新主的從

① 在新主上查詢二進位日誌和位置號

MariaDB [(none)]> show master status;

② 在新修複的機器上,設為從,啟動線程

MariaDB [(none)]> change master to master_host='192.168.30.7',
master_user='slave',
master_password='along',
master_log_file='mysql-bin.000003	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Elastic 的底層是開源庫 Lucene。但是,你沒法直接用 Lucene,必須自己寫代碼去調用它的介面。Elastic 是 Lucene 的封裝,提供了 REST API 的操作介面,開箱即用。Elastic 的底層是開源庫 。但是,你沒法直接用 Lucene,必須自己寫代碼去調用它的介面。E ...
  • 作者 [email protected] 彭東林 平臺 busybox-1.24.2 Linux-4.10.17 Qemu+vexpress-ca9 概述 在寫驅動的時候,我們經常會向用戶空間導出一些文件,然後用戶空間使用cat命令去讀取該節點,從而完成kernel跟user的通信。但是有 ...
  • 1、啟動vm服務 如果遇到無法啟動時,需要還原vm預設配置解決 2、更改vm設置為NAT模式 3、centOS開啟DHCP ...
  • 1.首先是特殊功能寄存器。 認為指的是P0,P1,P2,P3,P4. 在頭文件<reg52.h>有對特殊功能寄存器的地址分配。 另一個是sbit,是對P0等的8個口的定義。例sbit LED = P0^0,就相當於用LED表示 P0^0. 可以理解成別名。 2.電磁干擾,冬天毛衣靜電,靜電放電ESD ...
  • 1、配置centOS虛擬機網卡 先設置橋接模式 此處的address要和本機的vmware在同一個網段 2、重啟centOS網卡 3、關閉本機和虛擬機防火牆,防止ping不通 centOS命令: firewall-cmd --state #查看預設防火牆狀態(關閉後顯示notrunning,開啟後顯 ...
  • 虛擬機破解秘密碼步驟: 虛擬機(server)的登錄通常需要一個本地用戶,而本地用戶密碼假如不知道或者是已經忘記了,也是有辦法進入的,在Linux系統內就有可以提供這種可以進入的方案,而基本思路就是重置管理員(root)的登錄密碼,具體操作如下: 1、重啟虛擬機 server,出現 GRUB 啟動菜 ...
  • Linux上的文件系統一般來說就是EXT2或EXT3,但這篇文章並不准備一上來就直接講它們,而希望結合Linux操作系統並從文件系統建立的基礎——硬碟開始,一步步認識Linux的文件系統。## 1.機械硬碟的物理存儲機制現代電腦大部分文件存儲功能都是由機械硬碟這種設備提供的。(現在的SSD和快閃記憶體從... ...
  • 上章鏈接入口: http://www.cnblogs.com/lifexy/p/8006748.html 在上章里,我們分析了oops的PC值在哪個函數出錯的 本章便通過棧信息來分析函數調用過程 1.上章的oops棧信息如下圖所示: 9fe0: 代表最初的棧頂SP寄存器位置 9e80:代表函數出錯的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...