天天看點

mysql5.5以上半同步講解

1.半同步

半同步複制是主庫将binlog日志發給從庫,并确認binlog寫入從庫的relay-log的日志中,這個時候才會傳回給主庫

2.異步複制

異步複制就是咱們平時說的主從複制,主庫将binlog發給從庫這個時候就會結束,并不會确認從庫是否接收完畢

3.注意事項:

半同步如果出現逾時,這個時候主從複制會暫時切換到異步複制的模式,直到一台設定為半同步的資料庫能夠及時接受資訊為止

實驗:

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)

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 = 1

二.從庫:

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 

rpl_semi_sync_slave_enabled=1

###########到此mysql半同步已經做好#######################################

mysql> show variables like '%semi%';

+-------------------------------------------+------------+

| 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)

+---------------------------------+-------+

| 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%';

+--------------------------------------------+-------+

| 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)

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;

主庫又切換為半同步複制,

反思:有半同步的原理可以知道 半同步在一定程度上確定了主從一緻,但是效率确實别異步複制低,具體測試我沒測試

本文轉自 小小三郎1 51CTO部落格,原文連結:http://blog.51cto.com/wsxxsl/2051519,如需轉載請自行聯系原作者

繼續閱讀