目錄
- 一、MySQL主從復制原理
- 二、MySQL一主一從搭建
- 1.master
- 2.slave
- 3.驗證主從同步
- 三、MyCat一主一從讀寫分離
- 1.讀寫分離原理
- 2.讀寫分離配置
- 3.驗證讀寫分離
- 四、MySQL雙主雙從搭建
- 1.架構
- 2.雙主雙從配置
- 五、MyCat雙主雙從讀寫分離
- 1.配置
- 2. 讀寫分離驗證
- 3.可用性驗證
一、MySQL主從復制原理
復制是指將主資料庫的 DDL 和 DML 操作通過二進制日志傳到從庫服務器中,然后在從庫上對這些日志重新執行(也叫重做),從而使得從庫和主庫的資料保持同步,
MySQL支持一臺主庫同時向多臺從庫進行復制, 從庫同時也可以作為其他從服務器的主庫,實作鏈狀復制,
MySQL主從復制的原理如下 :

從上層來看,復制分成三步:
- Master 主庫在事務提交時,會把資料變更作為時間 Events 記錄在二進制日志檔案 Binlog中,
- 主庫推送二進制日志檔案 Binlog 中的日志事件到從庫的中繼日志 Relay Log ,
- slave重做中繼日志中的事件,將改變反映它自己的資料,
MySQL 復制的優點:
- 主庫出現問題,可以快速切換到從庫提供服務,
- 可以在從庫上執行查詢操作,從主庫中更新,實作讀寫分離,降低主庫的訪問壓力,
- 可以在從庫中執行備份,以避免備份期間影響主庫的服務,
二、MySQL一主一從搭建
準備的兩臺機器:

1.master
- 在master 的組態檔(
/usr/my.cnf)中,配置如下內容:
#mysql 服務ID,保證整個集群環境中唯一
server-id=1
#mysql binlog 日志的存盤路徑和檔案名
log-bin=/var/lib/mysql/mysqlbin
#設定logbin格式
binlog_format=STATEMENT
#是否只讀,1 代表只讀, 0 代表讀寫
read-only=0
#忽略的資料, 指不需要同步的資料庫
#binlog-ignore-db=mysql
#指定同步的資料庫
binlog-do-db=db01
- 執行完畢之后,需要重啟Mysql:
service mysql restart ;
- 創建同步資料的賬戶,并且進行授權操作:
grant replication slave on *.* to 'itcast'@'192.168.192.158' identified by 'itcast';
flush privileges;
- 查看master狀態:
show master status;

欄位含義:
File : 從哪個日志檔案開始推送日志檔案
Position : 從哪個位置開始推送日志
Binlog_Ignore_DB : 指定不需要同步的資料庫
2.slave
- 在 slave 端組態檔
/usr/my.cnf中,配置如下內容:
#mysql服務端ID,唯一
server-id=2
#指定binlog日志
log-bin=/var/lib/mysql/mysqlbin
#啟用中繼日志
relay-log=mysql-relay
- 執行完畢之后,需要重啟Mysql:
service mysql restart;
- 執行如下指令 :
change master to master_host= '192.168.192.157', master_user='itcast',
master_password='itcast', master_log_file='mysqlbin.000001', master_log_pos=413;
指定當前從庫對應的主庫的IP地址,用戶名,密碼,從哪個日志檔案開始的那個位置開始同步推送日志,
- 開啟同步操作
start slave;
show slave status;

5. 停止同步操作
stop slave;
3.驗證主從同步
- 在主庫中創建資料庫,創建表,并插入資料 :
create database db01;
user db01;
create table user(
id int(11) not null auto_increment,
name varchar(50) not null,
sex varchar(1),
primary key (id)
)engine=innodb default charset=utf8;
insert into user(id,name,sex) values(null,'Tom','1');
insert into user(id,name,sex) values(null,'Trigger','0');
insert into user(id,name,sex) values(null,'Dawn','1');
- 在從庫中查詢資料,進行驗證 :
在從庫中,可以查看到剛才創建的資料庫:

在該資料庫中,查詢user表中的資料:

參考資料:
《開源資料庫中間件MyCat實戰筆記》
想要快速獲取資料的同學:請添加助理VX:C18173184271,備注一下CSDN+作業年限!免費獲取
不要再猶猶豫豫了,不然就要錯過金三銀四春招了!
三、MyCat一主一從讀寫分離
1.讀寫分離原理

讀寫分離,簡單地說是把對資料庫的讀和寫操作分開,以對應不同的資料庫服務器,主資料庫提供寫操作,從資料庫提供讀操作,這樣能有效地減輕單臺資料庫的壓力,
通過MyCat即可輕易實作上述功能,不僅可以支持MySQL,也可以支持Oracle和SQL Server,
MyCat控制后臺資料庫的讀寫分離和負載均衡 由 schema.xml檔案datahost標簽 的balance屬性控制,
2.讀寫分離配置
配置如下:
- 檢查MySQL的主從復制是否運行正常 .
- 修改MyCat 的
conf/schema.xml配置如下:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="ITCAST" checkSQLschema="true" sqlMaxLimit="100">
<table name="user" dataNode="dn1" primaryKey="id"/>
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db01" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.192.157:3306" user="root" password="itcast">
<readHost host="hostS1" url="192.168.192.158:3306" user="root" password="itcast" />
</writeHost>
</dataHost>
</mycat:schema>
- 修改
conf/server.xml
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">ITCAST</property>
</user>
<user name="test">
<property name="password">123456</property>
<property name="schemas">ITCAST</property>
</user>
<user name="user">
<property name="password">123456</property>
<property name="schemas">ITCAST</property>
<property name="readOnly">true</property>
</user>
- 配置完畢之后, 重啟MyCat服務;
屬性含義說明:
checkSQLschema
當該值設定為true時, 如果我們執行陳述句"select * from test01.user ;" 陳述句時, MyCat則會 把schema字符去掉 ,
可以避免后端資料庫執行時報錯 ;
balance
負載均衡型別, 目前取值有4種:
balance="0" : 不開啟讀寫分離機制 , 所有讀操作都發送到當前可用的writeHost上.
balance="1" : 全部的readHost 與 stand by writeHost (備用的writeHost) 都參與 select 陳述句的負載均衡,
簡而言之,就是采用雙主雙從模式(M1 --> S1 , M2 --> S2, 正常情況下, M2,S1,S2 都參與 select 陳述句的負載均衡,);
balance="2" : 所有的讀寫操作都隨機在writeHost , readHost上分發
balance="3" : 所有的讀請求隨機分發到writeHost對應的readHost上執行, writeHost不負擔 讀壓力 ;balance=3 只在MyCat1.4 之后生效 .
3.驗證讀寫分離
修改balance的值, 查詢MyCat中的邏輯表中的資料變化;
四、MySQL雙主雙從搭建
1.架構
一個主機 Master1 用于處理所有寫請求,它的從機 Slave1 和另一臺主機 Master2 還有它的從機 Slave2 負責所有讀請求,當 Master1 主機宕機后,Master2 主機負責寫請求,Master1 、Master2 互為備機,架構圖如下:

2.雙主雙從配置
準備的機器如下:

- 雙主機配置
Master1配置:
#主服務器唯一ID
server-id=1
#啟用二進制日志
log-bin=mysql-bin
# 設定不要復制的資料庫(可設定多個)
# binlog-ignore-db=mysql
# binlog-ignore-db=information_schema
#設定需要復制的資料庫
binlog-do-db=db02
binlog-do-db=db03
binlog-do-db=db04
#設定logbin格式
binlog_format=STATEMENT
# 在作為從資料庫的時候,有寫入操作也要更新二進制日志檔案
log-slave-updates
Master2配置:
#主服務器唯一ID
server-id=3
#啟用二進制日志
log-bin=mysql-bin
# 設定不要復制的資料庫(可設定多個)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
#設定需要復制的資料庫
binlog-do-db=db02
binlog-do-db=db03
binlog-do-db=db04
#設定logbin格式
binlog_format=STATEMENT
# 在作為從資料庫的時候,有寫入操作也要更新二進制日志檔案
log-slave-updates
- 雙從機配置
Slave1配置:
#從服務器唯一ID
server-id=2
#啟用中繼日志
relay-log=mysql-relay
Salve2配置:
#從服務器唯一ID
server-id=4
#啟用中繼日志
relay-log=mysql-relay
- 雙主機、雙從機重啟 mysql 服務
- 主機從機都關閉防火墻
- 在兩臺主機上建立帳戶并授權 slave
#在主機MySQL里執行授權命令
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%' IDENTIFIED BY 'itcast';
flush privileges;
查詢Master1的狀態 :

查詢Master2的狀態 :

- 在從機上配置需要復制的主機
Slave1 復制 Master1,Slave2 復制 Master2
slave1 指令:
CHANGE MASTER TO MASTER_HOST='192.168.192.157',
MASTER_USER='itcast',
MASTER_PASSWORD='itcast',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=409;
slave2 指令:
CHANGE MASTER TO MASTER_HOST='192.168.192.159',
MASTER_USER='itcast',
MASTER_PASSWORD='itcast',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=409;
- 啟動兩臺從服務器復制功能 , 查看主從復制的運行狀態
start slave;
show slave status\G;


- 兩個主機互相復制
Master2 復制 Master1,Master1 復制 Master2
Master1 執行指令:
CHANGE MASTER TO MASTER_HOST='192.168.192.159',
MASTER_USER='itcast',
MASTER_PASSWORD='itcast',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=409;
Master2 執行指令:
CHANGE MASTER TO MASTER_HOST='192.168.192.157',
MASTER_USER='itcast',
MASTER_PASSWORD='itcast',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=409;
- 啟動兩臺主服務器復制功能 , 查看主從復制的運行狀態
start slave;
show slave status\G;


- 驗證
create database db03;
use db03;
create table user(
id int(11) not null auto_increment,
name varchar(50) not null,
sex varchar(1),
primary key (id)
)engine=innodb default charset=utf8;
insert into user(id,name,sex) values(null,'Tom','1');
insert into user(id,name,sex) values(null,'Trigger','0');
insert into user(id,name,sex) values(null,'Dawn','1');
insert into user(id,name,sex) values(null,'Jack Ma','1');
insert into user(id,name,sex) values(null,'Coco','0');
insert into user(id,name,sex) values(null,'Jerry','1');
在Master1上創建資料庫:

在Master1上創建表 :

- 停止從服務復制功能
stop slave;
- 重新配置主從關系
stop slave;
reset master;
五、MyCat雙主雙從讀寫分離
1.配置
修改<dataHost>的 balance屬性,通過此屬性配置讀寫分離的型別 ;
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="ITCAST" checkSQLschema="true" sqlMaxLimit="100">
<table name="user" dataNode="dn1" primaryKey="id"/>
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db03" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.192.147:3306" user="root" password="itcast">
<readHost host="hostS1" url="192.168.192.149:3306" user="root" password="itcast" />
</writeHost>
<writeHost host="hostM2" url="192.168.192.150:3306" user="root" password="itcast">
<readHost host="hostS2" url="192.168.192.151:3306" user="root" password="itcast" />
</writeHost>
</dataHost>
</mycat:schema>
balance
1 : 代表 全部的 readHost 與 stand by writeHost 參與 select 陳述句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,并且 M1 與 M2 互為主備),正常情況下,M2,S1,S2都參與 select 陳述句的負載均衡 ;
writeType
0 : 寫操作都轉發到第1臺writeHost, writeHost1掛了, 會切換到writeHost2上;
1 : 所有的寫操作都隨機地發送到配置的writeHost上 ;
switchType
-1 : 不自動切換
1 : 默認值, 自動切換
2 : 表示基于MySQL的主從同步狀態決定是否切換, 心跳陳述句 : show slave status
2. 讀寫分離驗證
查詢資料 : select * from user;

插入資料 : insert into user(id,name,sex) values(null,'Dawn','1');

3.可用性驗證
關閉Master1 , 然后再執行寫入的SQL陳述句 , 通過日志查詢當前寫入操作, 操作的是那臺服務器 ;
如果你需要這份完整版的
《開源資料庫中間件MyCat實戰筆記》,只需你多多支持我這篇文章,
多多支持,即可免費獲取資料——三連之后(承諾:100%免費)
快速入手通道:添加助理VX:
C18173184271,備注一下CSDN+作業年限!免費獲取!誠意滿滿!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/257085.html
標籤:其他


