程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 深刻解析半同步與異步的MySQL主從復制設置裝備擺設

深刻解析半同步與異步的MySQL主從復制設置裝備擺設

編輯:MySQL綜合教程

深刻解析半同步與異步的MySQL主從復制設置裝備擺設。本站提示廣大學習愛好者:(深刻解析半同步與異步的MySQL主從復制設置裝備擺設)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻解析半同步與異步的MySQL主從復制設置裝備擺設正文


簡略來說MySQL的主從復制就是一個C/S架構的運用。master可以以為是我們平日意義上所以為的server,slave可以看成是一台client。slave上的I/O線程去要求master上數據,而master驗證經由過程slave的信息後就許可slave接入,然落後行數據變更信息的發送。
1、MySQL主從復制道理
這裡我以MySQL5.5為例來講一下MySQL的主從復制的道理:

20151218173011422.jpg (357×306)

起首由備節點的I/O線程擔任向主節點要求數據,主節點驗證經由過程今後會由dump線程把數據發送給備用節點。備用節點的I/O線程收到資本後會把把這些數據寫入到中繼日記,備節點的SQL線程檢測到中繼日記變革後會連忙依據中繼日記的內容跟新備庫的內容。如許就完成了同步的進程。

2、罕見的復制模子
1、一主一從模子

20151218173031597.jpg (285×133)

這類架構的長處就是比擬簡略,搭建和保護都比擬輕易,本錢也比擬低。關於一些負載量不是特殊年夜、靠得住性請求不是特殊高的場所,完整可以采取這類模子。然則關於一些負載比擬年夜站點,和對可用性請求比擬高的場所,這類架構就不太實用了。由於假如拜訪量比擬年夜,Master節點的壓力會比擬的,別的假如Master瓦解,也會招致營業的終止。
2、一主多從模子

20151218173048976.jpg (395×314)

在絕年夜多半場景中,我們的運用都是讀多寫。我們應用這類架構,經由過程讀寫分別的技巧,可以有用下降Master上讀的壓力。我們在後真個slave上可以做一些數據備份,數據發掘等方面的任務。然則假如備庫比擬多,同時主庫又要擔任其他的要求時,主庫的壓力會顯著增年夜,此時主庫會成為全部體系的機能瓶頸。
 
    固然,還有其他的復制模子,好比多級中繼,和環狀復制等,這些復制的根本道理都和下面的差不多,這裡不再具體的說明了。
3、設置裝備擺設主從復制
(1)、異步復制
主從同步的前提:
Master:
       a:啟用二進制日記;
       b:選擇一個server-id
       c:創立具有復制權限的用戶
Slave:
       a:啟用中繼日記
       b:選擇一個獨一的server-id
       c:銜接主辦事器,並開端復制數據
A、起首在主庫上樹立用於復制的最小權限的用戶

mysql> grant replication slave,replication client on *.* to repl@'10.12.%'
 -> identified by '123456';
Query OK, 0 rows affected (0.03 sec)

B、在從庫上銜接主庫

mysql> CHANGE MASTER TO MASTER_HOST='10.12.128.19',MASTER_PORT=3306,MASTER_USER='repl', 
MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=451;

#檢查復制的狀況
mysql> show slave status\G

*************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
     Master_Host: 10.12.128.19
     Master_User: repl
     Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: mysql-bin.000006
   Read_Master_Log_Pos: 1512
    Relay_Log_File: relay_index.000002
    Relay_Log_Pos: 283
  Relay_Master_Log_File: mysql-bin.000006
    Slave_IO_Running: Yes
   Slave_SQL_Running: Yes
    Replicate_Do_DB: 
   Replicate_Ignore_DB: 
   Replicate_Do_Table: 
  Replicate_Ignore_Table: 
  Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
     Last_Errno: 0
     Last_Error: 
     Skip_Counter: 0
   Exec_Master_Log_Pos: 1512
    Relay_Log_Space: 452
    Until_Condition: None
    Until_Log_File: 
    Until_Log_Pos: 0
   Master_SSL_Allowed: No
   Master_SSL_CA_File: 
   Master_SSL_CA_Path: 
    Master_SSL_Cert: 
   Master_SSL_Cipher: 
    Master_SSL_Key: 
  Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
    Last_IO_Errno: 0
    Last_IO_Error: 
    Last_SQL_Errno: 0
    Last_SQL_Error: 
 Replicate_Ignore_Server_Ids: 
    Master_Server_Id: 3306
     Master_UUID: 97f33396-ed12-11e4-921a-000c29e8ee06
    Master_Info_File: /mydata/data5.6/master.info
     SQL_Delay: 0
   SQL_Remaining_Delay: NULL
  Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
   Master_Retry_Count: 86400
     Master_Bind: 
  Last_IO_Error_Timestamp: 
  Last_SQL_Error_Timestamp: 
    Master_SSL_Crl: 
   Master_SSL_Crlpath: 
   Retrieved_Gtid_Set: 
   Executed_Gtid_Set: 
    Auto_Position: 0
1 row in set (0.00 sec)

C、然後再從庫上履行:

#啟動復制
mysql> start slave;

    也能夠零丁啟動IO線程和SQL線程。
(假如從庫的IO線程狀況一向是connecting的狀況,能夠是防火牆的緣由,普通來講封閉防火牆或許設置裝備擺設防火牆規矩便可以了)
(2)、半同步復制
半同步復制是基於Google為MySQL開辟的半同步復制的插件。半同步復制的道理是,一個事務在主辦事器上履行完成後,必需至多確保至多在一台從辦事器上履行完成後,事務才算提交勝利。假如在必定時光內從辦事器沒有呼應,則會主動升級為異步復制。
這個半同步復制是樹立在異步復制的基本之長進行的。
起首須要裝置Google的半同步插件:

master:

install plugin rpl_semi_sync_master soname 'semisync_master.so';

 
slave:

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

然後開啟半同步的功效

master:

set global rpl_semi_sync_master_enabled = 1;
set global rpl_semi_sync_master_timeout = 100; //以毫秒盤算

slave:

set global rpl_semi_sync_slave_enabled = ON;

在從庫上還須要重啟IO線程:

stop slave IO_thread;
start slave IO_thread;

分離在主庫和備庫上檢查半同步插件運轉的狀況:

mysql> show global status like 'rpl%';
+--------------------------------------------+-------+
| 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    | 1  |
| Rpl_semi_sync_master_no_tx     | 8  |
| 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.04 sec)

mysql> show global status like 'rpl%';
+----------------------------+-------+
| Variable_name    | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.04 sec)

可以看到,主庫和備庫的半同步插件都曾經處於啟用狀況。
至此,異步主從設置裝備擺設停止。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved