標籤:mysql主從 主主 主從半同步 mysql ha叢集
簡介:主從複製原理、機制
要實施複製,首先必須開啟Master端的binary log(bin-log)功能,否則無法實現。因為整個複製過程實際上就是Slave從Master端擷取該日誌然後再在自己身上完全順序的執行日誌中所記錄的各種操作。
複製的基本過程如下:
1)、Slave上面的IO_thread串連上Master,並請求從指定記錄檔的指定位置(或者從最開始的日誌)之後的日誌內容;
2)、Master接收到來自Slave的IO_thread的請求後,通過負責複製的IO進程根據請求資訊讀取制定日誌指定位置之後的日誌資訊,返回給Slave 的IO_thread。返回資訊中除了日誌所包含的資訊之外,還包括本次返回的資訊已經到Master端的bin-log file的以及bin-log pos;
3)、Slave的IO_thread接收到資訊後,將接收到的日誌內容依次添加到Slave端的relay-log檔案的最末端,並將讀取到的Master端的 bin-log的檔案名稱和位置記錄到master-info檔案中,以便在下一次讀取的時候能夠清楚的告訴Master“我需要從某個bin-log的哪 個位置開始往後的日誌內容,請發給我”;
4)、Slave的Sql_thread檢測到relay-log中新增加了內容後,會馬上解析relay-log的內容成為在Master端真實執行時候的那些可執行檔內容,並在本機上回放。
總結:mysql主從架構最重要的就是bin_log和relay_log日誌,全域事務ID
一,mysql主從設定
主節點開啟二進位日誌,從節點開始中繼日誌,從節點如果有必要可以不開啟二進位日誌。另外注意從節點一定要開啟唯讀鎖read_only=on。如果需要備份表等進階操作就需要innodb_file_per_table=on給每個表單獨一個命名空間。
master 192.168.100.100
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/78/1F/wKiom1Z2dFaQTHzCAAAZTc80_2M084.png" title="映像 201512201.png" alt="wKiom1Z2dFaQTHzCAAAZTc80_2M084.png" />
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M01/78/20/wKiom1Z2ezfCZnkcAAAZVu4Ux_c629.png" title="映像 201512205.png" alt="wKiom1Z2ezfCZnkcAAAZVu4Ux_c629.png" />
建立超級管理員
GRANT ALL ON *.* to ‘test-001‘@‘192.168.%.%‘ IDENTIFIED BY ‘123‘;
建立複製許可權使用者
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘test-002‘@‘192.168.%.%‘ IDENTIFIED BY ‘test-002‘;注意:要在建立使用者之前show master status;這樣才能把建立的賬戶也同步到從節點上。
slave
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/78/20/wKiom1Z2eYjh7lRCAAAZ_77C204747.png" title="映像 20151220001.png" alt="wKiom1Z2eYjh7lRCAAAZ_77C204747.png" />
關閉從節點上的二進位日誌,同步過程的二進位日誌儲存完全是沒有必要的
SET sql_log_bin=off;SHOW VARIABLES LIKE ‘sql_log%‘;
從服務建立與master的聯絡
CHANGE MASTER TO MASTER_HOST=‘192.168.100.100‘,MASTER_USER=‘test-002‘,MASTER_PASSWORD=‘test-002‘,MASTER_LOG_FILE=‘mysql-bin.000003‘,MASTER_LOG_POS=245;
啟動sql和IO線程
START SLAVE;
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M02/78/20/wKiom1Z2fo_jTYWlAAAplayH3tQ498.png" title="映像 201512206.png" alt="wKiom1Z2fo_jTYWlAAAplayH3tQ498.png" />
給從節點施加全域鎖:
FLUSH TABLES WITH READ LOCK;
至此mysql主從設定完成;
查看主從複寫延遲
SHOW SLAVE STATUSSeconds_Behind_Master: 0 落後主服務多長時間
延遲處理:半同步或灰階備份恢複重新複製。
二、半同步設定(建立在主從基礎上)
半同步複製利用了外掛程式
/usr/lib64/mysql/plugin/semisync_master.so
/usr/lib64/mysql/plugin/semisync_slave.so
[mysqld]預設不設定
plugin_dir=/path/to/plugin/directory 外掛程式目錄設定
master:
裝載外掛程式
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so‘;
檢查外掛程式裝載情況
show plugins;
rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL
啟用是否是版同步的主節點
mysql> SET GLOBAL rpl_semi_sync_master_enabled=1;
mysql> SHOW GLOBAL VARIABLES LIKE ‘%semi%‘;
mysql> SHOW GLOBAL STATUS LIKE ‘%semi%‘;
MariaDB [(none)]> show variables like ‘%semi%‘;
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled | ON |啟用是否是版同步的主節點
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |追蹤層級32
| rpl_semi_sync_master_wait_no_slave | ON |是否允許master 每個事物提交後都要等待slave的receipt訊號。
+------------------------------------+-------+
slave:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so‘;
mysql> SET GLOBAL rpl_semi_sync_slave_enabled=1;
測試
關閉從節點,建立一個資料庫,觀測
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/78/23/wKiom1Z2jgWTkHOUAABA-9czXQU769.png" title="映像 201512208.png" alt="wKiom1Z2jgWTkHOUAABA-9czXQU769.png" />
觀察從節點上的狀態
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/78/23/wKiom1Z2jnODUjoXAAAeVhELHng585.png" title="映像 201512209.png" alt="wKiom1Z2jnODUjoXAAAeVhELHng585.png" />
如果出現這樣的問題解決
master:
mysql> SET GLOBAL rpl_semi_sync_master_enabled=1;
slave:
mysql> SET GLOBAL rpl_semi_sync_slave_enabled=1;
mysql> STOP SLAVE;
mysql> START SLAVE;
本文出自 “16期松鼠&青蛙” 部落格,請務必保留此出處http://tlinux.blog.51cto.com/7288656/1726600
Mysql主從,主從半同步,主主,mysql HA叢集:Mysql-mha