一 MySQL雙主雙從基礎
1.1 介紹
一台主機Master1用于處理所有寫請求,它的從機Slave1和另一台主機Master2還有它的從機Slave2負責所有讀請求,當Master1主機當機後,Master2主機負責寫請求,Master1、Master2互為備機。
1.2 伺服器規劃
編号 | 伺服器IP | 安裝軟體 | 角色 |
1 | 192.168.0.99 | MySQL-8.0.26 | Master1 |
2 | 192.168.0.100 | MySQL-8.0.26 | Slave1 |
3 | 192.168.0.101 | MySQL-8.0.26 | Master2 |
4 | 192.168.0.102 | MySQL-8.0.26 | Slave2 |
二 MySQL雙主雙從安裝
2.1 關閉防火牆
四台伺服器分别執行
systemctl stop firewalld
systemctl disable firewalld
2.2 安裝資料庫環境
四台伺服器分别執行,之前已分享過MySQL的安裝文章,此處不再贅述。
2.3 Master1主庫配置
192.168.0.99伺服器操作
vim /etc/my.cnf
#mysql 服務ID,保證整個叢集環境中唯一,取值範圍:1 – 2^32-1,預設為1
server-id=1
#指定同步的資料庫
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
# 在作為從資料庫的時候,有寫入操作也要更新二進制日志檔案
log-slave-updates
重新開機mysql
systemctl restart mysqld
2.4 Master2主庫配置
192.168.0.101伺服器操作
vim /etc/my.cnf
#mysql 服務ID,保證整個叢集環境中唯一,取值範圍:1 – 2^32-1,預設為1
server-id=3
#指定同步的資料庫
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
# 在作為從資料庫的時候,有寫入操作也要更新二進制日志檔案
log-slave-updates
重新開機mysql
systemctl restart mysqld
2.5 兩台主庫建立賬戶并授權
192.168.0.99和192.168.0.101分别執行
#建立test使用者,并設定密碼,該使用者可在任意主機連接配接該MySQL服務
create user 'test'@'%' identified with mysql_native_password by 'Test@123456';
#為 'test'@'%' 使用者配置設定主從複制權限
grant replication slave on *.* to 'test'@'%';
通過指令檢視兩台主庫的二進制日志坐标
2.6 Slave1從庫配置
192.168.0.100伺服器操作
vim /etc/my.cnf
#mysql 服務ID,保證整個叢集環境中唯一,取值範圍:1 – 232-1,預設為1
server-id=2
重新開機mysql
systemctl restart mysqld
2.7 Slave2從庫配置
192.168.0.102伺服器操作
vim /etc/my.cnf
#mysql 服務ID,保證整個叢集環境中唯一,取值範圍:1 – 232-1,預設為1
server-id=4
重新開機mysql
2.8 兩台從庫分别設定關聯的主庫
需要注意Slave1對應的是Master1,Slave2對應的是Master2。
192.168.0.100資料庫執行如下sql:
change replication source to source_host='192.168.0.99',source_user='test',source_password='Test@123456',source_log_file='binlog.000002',source_log_pos=663;
start slave;
show slave status\G;
192.168.0.102資料庫執行如下sql:
change replication source to source_host='192.168.0.101',source_user='test',source_password='Test@123456',source_log_file='binlog.000002',source_log_pos=663;
start slave;
show slave status\G;
2.9 兩台主庫互相複制
Master2複制Master1,Master1複制Master2
Master1:192.168.0.99執行如下SQL:
change replication source to source_host='192.168.0.101',source_user='test',source_password='Test@123456',source_log_file='binlog.000002',source_log_pos=663;
start slave;
show slave status\G;
Master2:192.168.0.101執行如下SQL:
change replication source to source_host='192.168.0.99',source_user='test',source_password='Test@123456',source_log_file='binlog.000002',source_log_pos=663;
start slave;
show slave status\G;
2.10 測試
分别在兩台主庫Master1、Master2上執行DDL、DML語句,檢視涉及到的資料庫伺服器的資料同步情況。
在Master1建立資料庫db01,發現其它三台資料庫都會同步
create database db01;
在Master1建立表,發現其它三台資料庫也會同步
use db01;
create table tb_user(
id int(11) not null,
name varchar(50) not null,
sex varchar(1),
primary key (id)
)engine=innodb default charset=utf8;
在Master2插入資料,發現其它三台資料庫也會同步
insert into tb_user(id,name,sex) values(1,'Cat','1');
insert into tb_user(id,name,sex) values(2,'Lucy','0');
insert into tb_user(id,name,sex) values(3,'Candy','1');
至此,MySQL雙主雙從安裝完成,感謝觀看。