MySQL學習筆記12半同步複製

來源:互聯網
上載者:User

標籤:failure   串連   slave   半同步   事務   select   bsp   時間   非同步   

1.1.1.  相關概念

 

預設情況下,MySQL使用非同步複製,即master上的事務執行與slave上的複製操作不需要同步,master不需要等待slave上的複製線程將Binary Log接收完畢即可執行其它事務。

半同步複製時,master上的事務執行與slave上的複製操作需要在某個步驟上進行同步,master需要等待slave上的複製線程接收完畢Binary Log。

非同步複製的工作效率比較高,但是在特定條件下,有可能造成master和slave的資料不一致。半同步複製可以降低資料不一致的機率。半同步複製僅支援單源複製,不支援多源複製。

 

1.1.2.  部署半同步複製

 

建立半同步複製的環境,在已經建立好master-slave複製環境的情況下,還需要執行以下操作。

(1)在master上安裝半同步複製外掛程式。

mysql> show variables like ‘%semi%‘;

Empty set (0.02 sec)

 

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so‘;

Query OK, 0 rows affected (0.05 sec)

 

mysql> show variables like ‘%semi%‘;

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

| Variable_name                             | Value      |

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

| rpl_semi_sync_master_enabled              | OFF        |

| rpl_semi_sync_master_timeout              | 10000      |

| rpl_semi_sync_master_trace_level          | 32         |

| rpl_semi_sync_master_wait_for_slave_count | 1          |

| rpl_semi_sync_master_wait_no_slave        | ON         |

| rpl_semi_sync_master_wait_point           | AFTER_SYNC |

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

6 rows in set (0.00 sec)

 

其中 rpl_semi_sync_master_timeout變數控制半同步的逾時時間,單位為毫秒,預設為10000,即10秒鐘。

 

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS

    -> FROM INFORMATION_SCHEMA.PLUGINS

    -> WHERE PLUGIN_NAME LIKE ‘%semi%‘;

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

| PLUGIN_NAME          | PLUGIN_STATUS |

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

| rpl_semi_sync_master | ACTIVE        |

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

1 row in set (0.00 sec)

 

 

(2)在slave上安裝半同步複製外掛程式。

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so‘;

Query OK, 0 rows affected (0.03 sec)

 

mysql> show variables like ‘%semi%‘;

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

| Variable_name                   | Value |

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

| rpl_semi_sync_slave_enabled     | OFF   |

| rpl_semi_sync_slave_trace_level | 32    |

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

2 rows in set (0.00 sec)

 

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS

    -> FROM INFORMATION_SCHEMA.PLUGINS

    -> WHERE PLUGIN_NAME LIKE ‘%semi%‘;

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

| PLUGIN_NAME         | PLUGIN_STATUS |

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

| rpl_semi_sync_slave | ACTIVE        |

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

1 row in set (0.00 sec)

 

 

(3)在master上啟用半同步複製。

在master上的MySQL設定檔中:

[mysqld]

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=10000

【此處省略了非同步複製必須的其它配置】

 

可以使用SQL命令動態啟用半同步複製。

mysql> set global rpl_semi_sync_master_enabled=1;

Query OK, 0 rows affected (0.00 sec)

 

 

(4)在slave上啟用半同步複製。

在slave上的MySQL設定檔中:

[mysqld]

rpl_semi_sync_slave_enabled=1

【此處省略了非同步複製必須的其它配置】

 

可以使用SQL命令動態啟用半同步複製。

mysql> stop slave;

Query OK, 0 rows affected, 1 warning (0.00 sec)

 

mysql> set global rpl_semi_sync_slave_enabled=1;

Query OK, 0 rows affected (0.00 sec)

 

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

 

至此半同步複製環境建立成功。

 

 

1.1.3.  監控半同步複製的狀態

 

 

(1)查看master上的半同步複製。

 

mysql> SHOW VARIABLES LIKE ‘rpl_semi_sync%‘;

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

| Variable_name                             | Value      |

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

| rpl_semi_sync_master_enabled              | ON         |

| rpl_semi_sync_master_timeout              | 10000      |

| rpl_semi_sync_master_trace_level          | 32         |

| rpl_semi_sync_master_wait_for_slave_count | 1          |

| rpl_semi_sync_master_wait_no_slave        | ON         |

| rpl_semi_sync_master_wait_point           | AFTER_SYNC |

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

6 rows in set (0.01 sec)

 

mysql> SHOW STATUS LIKE ‘Rpl_semi_sync%‘;

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

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

| Rpl_semi_sync_master_no_times              | 0     |

| Rpl_semi_sync_master_no_tx                 | 0     |

| Rpl_semi_sync_master_status                | ON    |

| Rpl_semi_sync_master_timefunc_failures     | 0     |

| Rpl_semi_sync_master_tx_avg_wait_time      | 0     |

| Rpl_semi_sync_master_tx_wait_time          | 0     |

| Rpl_semi_sync_master_tx_waits              | 0     |

| Rpl_semi_sync_master_wait_pos_backtraverse | 0     |

| Rpl_semi_sync_master_wait_sessions         | 0     |

| Rpl_semi_sync_master_yes_tx                | 0     |

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

14 rows in set (0.00 sec)

 

其中,Rpl_semi_sync_master_clients表示通過半同步複製已經串連上的slave的數量。

 Rpl_semi_sync_master_yes_tx表示已經成功發送了半同步ACK的slave的數量。

 Rpl_semi_sync_master_no_tx表示沒有成功發送半同步ACK的slave的數量。

 

 

 

(2)查看slave上的半同步複製狀態。

mysql> SHOW VARIABLES LIKE ‘rpl_semi_sync%‘;

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

| Variable_name                   | Value |

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

| rpl_semi_sync_slave_enabled     | ON    |

| rpl_semi_sync_slave_trace_level | 32    |

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

2 rows in set (0.00 sec)

 

mysql> SHOW STATUS LIKE ‘Rpl_semi_sync%‘;

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

| Variable_name              | Value |

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

| Rpl_semi_sync_slave_status | ON    |

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

1 row in set (0.00 sec)

其中,Rpl_semi_sync_slave_status表示slave上的半同步複製已經成功啟動了。

 

MySQL學習筆記12半同步複製

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.