MySQL半同步複製
高可用MySQL 半同步複製 116頁
“半同步複製的理念是在容許更改操作繼續執行之前,確保更改操作至少被寫入一個Slave的磁碟。
這意味著對於每一個連線,最多隻有一個事務會由於Master崩潰而丟失”。
這段話值得注意的是
在半同步複製之前,事務已經提交。雖然因為半同步複製沒有完成,客戶端沒有相應,但是此時作為事務已經提交。
另外,將binlog寫入至少一個Slave的磁碟,指的是Slave的IO執行緒將binlog寫入了Slave的中繼日誌,而不是SQL執行緒將其應用到資料檔案。
而半同步複製的作用,類似於檢查點。它使得Master和Slave的binlog最大限度的保持一致。
"最多隻有一個事務會由於Master崩潰而丟失"應該指的是如下場景,
Master事務已經提交,Slave IO執行緒正在寫入此事務的binlog,但是尚未完成。這個時候Master突然故障,並且無法恢復。
因為Slave IO執行緒並未完成,所以這個Slave提升為Master之後,這個已經提交的事務就丟失了。
下面搭建一個半同步複製的環境。
[Master]
Host:RAC1
IP:192.168.1.70
安裝Master半同步複製外掛
修改Master配置檔案
user=root
log_bin=rac1
autocommit=0
binlog_format=row
server_id=1
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_wait_no_slave=0
sync_binlog=1
重啟Master
[Slave]
Host:RAC2
IP:192.168.1.80
安裝Slave半同步複製外掛
修改Slave配置檔案
log_bin=rac2
autocommit=0
binlog_format=row
server_id=2
rpl_semi_sync_slave_enabled=1
重啟Slave
在Master上建立複製的帳號
create user repl;
grant replication slave,replication client on *.*
to repl@'192.168.1.%' identified by 'repl';
在Slave上開啟複製
change master to
master_host='192.168.1.70',
master_port=3306,
master_user='repl',
master_password='repl';
start slave;
根據上面半同步複製的描述,如果所有的Slave都停止工作,那麼Master也會Hang住。
rpl_semi_sync_master_wait_no_slave和rpl_semi_sync_master_timeout引數可以解決這個問題。
rpl_semi_sync_master_wait_no_slave設定為1,表示如果沒有任何可用的Slave,則Master等待。等待時間由rpl_semi_sync_master_timeout設定。如果超時,則使用非同步複製的模式。
rpl_semi_sync_master_wait_no_slave設定為0,則表示如果沒有任何可用的Slave,則使用非同步複製。
假設一個Master和一個Slave,rpl_semi_sync_master_wait_no_slave設定為1,rpl_semi_sync_master_timeout設定為10S.
如果在複製的過程中,Slave當機。則Master的事務提交之後,會等待直到10S的超時,然後使用非同步複製。
可以使用show status監控半同步複製
Master:
Slave:
其中
Rpl_semi_sync_slave_status表示Slave半同步複製是否啟用
Rpl_semi_sync_master_status表示Master半同步複製是否啟用
Rpl_semi_sync_master_clients表示半同步複製的已連線Slave數量
“半同步複製的理念是在容許更改操作繼續執行之前,確保更改操作至少被寫入一個Slave的磁碟。
這意味著對於每一個連線,最多隻有一個事務會由於Master崩潰而丟失”。
這段話值得注意的是
在半同步複製之前,事務已經提交。雖然因為半同步複製沒有完成,客戶端沒有相應,但是此時作為事務已經提交。
另外,將binlog寫入至少一個Slave的磁碟,指的是Slave的IO執行緒將binlog寫入了Slave的中繼日誌,而不是SQL執行緒將其應用到資料檔案。
而半同步複製的作用,類似於檢查點。它使得Master和Slave的binlog最大限度的保持一致。
"最多隻有一個事務會由於Master崩潰而丟失"應該指的是如下場景,
Master事務已經提交,Slave IO執行緒正在寫入此事務的binlog,但是尚未完成。這個時候Master突然故障,並且無法恢復。
因為Slave IO執行緒並未完成,所以這個Slave提升為Master之後,這個已經提交的事務就丟失了。
下面搭建一個半同步複製的環境。
[Master]
Host:RAC1
IP:192.168.1.70
安裝Master半同步複製外掛
修改Master配置檔案
user=root
log_bin=rac1
autocommit=0
binlog_format=row
server_id=1
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_wait_no_slave=0
sync_binlog=1
重啟Master
[Slave]
Host:RAC2
IP:192.168.1.80
安裝Slave半同步複製外掛
修改Slave配置檔案
log_bin=rac2
autocommit=0
binlog_format=row
server_id=2
rpl_semi_sync_slave_enabled=1
重啟Slave
在Master上建立複製的帳號
create user repl;
grant replication slave,replication client on *.*
to repl@'192.168.1.%' identified by 'repl';
在Slave上開啟複製
change master to
master_host='192.168.1.70',
master_port=3306,
master_user='repl',
master_password='repl';
start slave;
根據上面半同步複製的描述,如果所有的Slave都停止工作,那麼Master也會Hang住。
rpl_semi_sync_master_wait_no_slave和rpl_semi_sync_master_timeout引數可以解決這個問題。
rpl_semi_sync_master_wait_no_slave設定為1,表示如果沒有任何可用的Slave,則Master等待。等待時間由rpl_semi_sync_master_timeout設定。如果超時,則使用非同步複製的模式。
rpl_semi_sync_master_wait_no_slave設定為0,則表示如果沒有任何可用的Slave,則使用非同步複製。
假設一個Master和一個Slave,rpl_semi_sync_master_wait_no_slave設定為1,rpl_semi_sync_master_timeout設定為10S.
如果在複製的過程中,Slave當機。則Master的事務提交之後,會等待直到10S的超時,然後使用非同步複製。
可以使用show status監控半同步複製
Master:
Slave:
其中
Rpl_semi_sync_slave_status表示Slave半同步複製是否啟用
Rpl_semi_sync_master_status表示Master半同步複製是否啟用
Rpl_semi_sync_master_clients表示半同步複製的已連線Slave數量
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1084938/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql 5.7半同步複製MySql
- MySQL 8 複製(二)——半同步複製MySql
- MySQL主從複製之半同步複製MySql
- Mysql5.7半同步複製MySql
- mysql半同步複製的設定MySql
- MySQL5.7主從複製-半同步複製搭建MySql
- 半同步複製報錯mysql8.0.25MySql
- MySQL增強(Loss-less)半同步複製MySql
- #MySQL# mysql5.7新特性之半同步複製MySql
- MySQL5.7半同步複製報錯案例分析MySql
- MySQL 8 複製(一)——非同步複製MySql非同步
- MySQL主從複製之非同步複製MySql非同步
- Mariadb之半同步複製叢集配置
- Mysql半同步複製模式說明及配置示例 - 運維小結MySql模式運維
- MySQL半同步複製資料最終一致性驗證MySql
- 多從庫時半同步複製不工作的BUG分析
- MySQL 同步複製及高可用方案總結MySql
- MySQL複製MySql
- mysql同步(複製)延遲的原因及解決方案MySql
- MySQL 5.7 多主一從(多源複製)同步配置MySql
- MySQL-主從複製之同步主從資料MySql
- mysql複製--主從複製配置MySql
- MySQL半同步使用注意事項MySql
- MySQL 半同步 與Raft對比MySqlRaft
- MySQL的半同步是什麼?MySql
- Mysql 非同步複製延遲的原因及解決方案MySql非同步
- linux下mysql主從複製,實現資料庫同步LinuxMySql資料庫
- MySQL 5.7的安裝及主從複製(主從同步)MySql主從同步
- MySQL 8 複製(三)——延遲複製與部分複製MySql
- MySQL主從複製之GTID複製MySql
- MySQL 8 複製(四)——GTID與複製MySql
- MySQL 8 複製(五)——配置GTID複製MySql
- MySQL 複製全解析 Part 11 使用xtrabackup建立MySQL複製MySql
- mysql GTID主從複製故障後不停機恢復同步流程MySql
- MySQL案例-並行複製亂序提交引起的同步異常MySql並行
- 技術分享 | MySQL:從庫複製半個事務會怎麼樣?MySql
- GreatSQL 非同步複製及搭建SQL非同步
- MongoDB 重新同步複製整合員MongoDB
- 主從複製--非同步篇非同步