mysql5.5以上半同步講解

1.半同步
半同步複製是主庫將binlog日誌發給從庫,並確認binlog寫入從庫的relay-log的日誌中,這個時候纔會返回給主庫
2.異步複製
異步複製就是我們平時說的主從複製,主庫將binlog發給從庫這個時候就會結束,並不會確認從庫是否接收完畢mysql

3.注意事項:
半同步若是出現超時,這個時候主從複製會暫時切換到異步複製的模式,直到一臺設置爲半同步的數據庫可以及時接受信息爲止sql

實驗:
mysql主從複製已經作好
主庫:
192.168.56.10
從庫:
192.168.56.11數據庫

一.主庫:
1.查看半同步插件默認是否開啓自動加載,能夠看出有自動加載功能
mysql> show variables like '%dynamic%';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| have_dynamic_loading | YES |
+----------------------+-------+
1 row in set (0.00 sec)vim

mysql>
2.安裝插件
mysql>install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql>show plugins;
mysql>SET GLOBAL rpl_semi_sync_master_enabled = 1; #開啓半同步複製,默認是關閉的服務器

vim /etc/my.cnf #確保重啓配置文件可以生效
[mysqld]
GLOBAL rpl_semi_sync_master_enabled = 1session

二.從庫:
mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql>show plugins; #查看是否加載成功
mysql>SET GLOBAL rpl_semi_sync_slave_enabled = 1; #開啓半同步複製,默認是關閉的
mysql>stop slave;
mysql>start slave;異步

vim /etc/my.cnf
[mysqld]
rpl_semi_sync_slave_enabled=1 ide

###########到此mysql半同步已經作好#######################################
主庫:
mysql> show variables like '%semi%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | ON | ##半同步開啓的狀態
| rpl_semi_sync_master_timeout | 10000 | #半同步超時時間10s,超過10s切換爲異步複製
| rpl_semi_sync_master_trace_level | 32 | #半同步的調試級別
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON | #master的每一個事務都要slave確認
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.00 sec)測試

從庫:
mysql> show variables like '%semi%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON | #能夠看出已經打開半同步複製
| rpl_semi_sync_slave_trace_level | 32 | #半同步調試級別爲
+---------------------------------+-------+
2 rows in set (0.00 sec)插件

mysql>

主庫:
mysql> show status like '%semi%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 1 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 2 |
| Rpl_semi_sync_master_no_times | 1 |
| Rpl_semi_sync_master_no_tx | 1 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 611 |
| Rpl_semi_sync_master_tx_wait_time | 611 |
| Rpl_semi_sync_master_tx_waits | 1 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 1 |
+--------------------------------------------+-------+
14 rows in set (0.00 sec)

mysql>

Rpl_semi_sync_master_status表示主服務器使用是異步仍是半同步複製

Rpl_semi_sync_master_client表示從服務器有多少個配置成半同步複製

Rpl_semi_sync_master_yes_tx表示從服務器確認成功提交的數量

Rpl_semi_sync_master_no_tx表示從服務器確認失敗提交的數量

############################################################
測試
從庫 stop slave;
主庫建立一個庫
create database te; #建立的時候特別慢 須要超時 10s,可是能建立成功
show status like '%semi%';
Rpl_semi_sync_master_status | OFF ##半同步已經轉換爲異步複製
從庫 start slave;
主庫又切換爲半同步複製,

反思:有半同步的原理能夠知道 半同步在必定程度上確保了主從一致,可是效率確實別異步複製低,具體測試我沒測試

相關文章
相關標籤/搜索