基於MySQL實現資料庫的半同步主從複製

來源:互聯網
上載者:User

標籤:mysql、半同步、主從架構

    首先我們來瞭解一下資料庫常遇到的問題:

    第一就是效能上的問題

1、向上拓展(硬體方面) scale up 個體本身 容易達到極限

    2、向外拓展 scale out

    第二就是可用性的問題

1、資料庫服務中斷

2、誤操作資料損壞

3、硬體故障

4、資料庫升級測試遭遇bug

5、駭客攻擊

    基於以上這些問題就有了一個比較好的解決方案,那就是實現資料庫的主從複製。MySQL主從複製技術可以提高伺服器的效能。除此之外MySQL複製還可以解決以下幾個問題:

    1、資料分布 (Data distribution )

    2、Server Load Balancer(load balancing)

    3、備份(Backups)

    4、高可用性和容錯性 High availability and failover

    在開始實驗前我們先來瞭解幾個概念:非同步複製、全同步複製和非同步複製。

    非同步複製

MySQL預設的是非同步複製,就是主庫在執行完用戶端提交的事務後立即將結果返回給用戶端,並不關係從庫是否已經接受處理,這樣如果主掛掉,主上提交的事務可能並沒有完全傳到從上,如果此時強行把從提升為主,可能會導致新主上的資料不完整。

全同步複製

指當主庫執行完一個事務,等到所有從庫都執行完該事務才將結果返回給用戶端。因為需要等待所有從庫都執行完下能返回,所以全同步複製的效能必然會受到影響,需要有逾時時間。

半同步複製

    介於非同步複製和全同步複製之間,主庫在執行完用戶端提交的事務後不是立即返回給用戶端,而是等到至少一個從庫接收到並寫到realy log中才返回給用戶端。相對於非同步複製,半同步複製提高了資料庫的安全性,同時也造成了一定程度的延遲,這個延遲最少是一個TCP/IP往返的時間。所以,半同步複製最好在低延時的網路中使用。

如果想更好地實現MySQL的主從複製,必須首先要想清楚它的複製原理,這樣在工作中才能熟練的操作和應用。

MySQL複製的工作原理:

1、主伺服器(master)將改變記錄寫入到二進位日誌(binary log)中(這些記錄叫做二進位日誌事件,binary log events) ,在事件 寫入二進位日誌完成後,master通知儲存引擎提交事務。此後可接收slave的請求

2、從伺服器(slave)將主伺服器master的binary log events拷貝到自己的中繼日誌(relay log) 。Slave的I/O線程在master上開啟一個普通的串連,並將這些二進位事件寫入中繼日誌。

3、SQL線程從中繼日誌讀取事件,並重放其中的事件而更新slave的資料,使其與master中的資料一致。

MySQL還提供了一種複製過濾器:就是指在資料庫複寫的過程中,僅複製一個或幾個資料庫相關的資料,並非所有,它提供了兩種複製方法:一種是在主伺服器的設定檔中添加設定檔,另一種是在從伺服器中添加設定檔。

1、在主伺服器中

主伺服器僅向二進位日誌中記錄有關特定資料庫相關的寫操作。

binlog_do_db= #要複製的資料庫

    binlog_ignore_db=#要忽略的資料庫

2、在從伺服器中

從伺服器的SQL THREAD僅重放關注的資料庫或表相關的事件,並將其應用於本地;

Replicate_Do_DB= #要複製過來的資料庫

Replicate_Ignore_DB=#不要複製過來的資料庫


下面我們開始基於上邊的理論來完成我們今天的實驗。


650) this.width=650;" src="https://s3.51cto.com/oss/201711/21/4531414b9e233caa9da7e07459f99756.png" title="圖片1.png" alt="4531414b9e233caa9da7e07459f99756.png" />

MySQL主從架構圖

一、環境準備:

centos系統伺服器2台、一台使用者做Mysql主伺服器,一台用於做 Mysql從伺服器,配置好yum源、防火牆關閉、各節點時鐘服務同步、各節點之間可以通過主機名稱互相通訊

二、準備步驟:

1、iptables -F && setenforce 清空防火牆策略,關閉selinux 

2、拿兩台伺服器都使用yum方式安裝Mysql服務,要求版本一致 

3、分別啟動兩台伺服器mysql服務,確保服務正常

   三、實現步驟:

配置master主伺服器:

1、對master進行配置,包括開啟二進位日誌,指定唯一的servr ID。在設定檔加入如下值:

   server-id=1 #配置server-id,讓主伺服器有唯一ID號         log-bin=mysql-bin #開啟Mysql日誌,日誌格式為二進位         skip-name-resolve#關閉名稱解析,(非必須)


2、建立複製帳號 在Master的資料庫中建立一個備份帳戶:每個slave使用標準的MySQL使用者名稱和密碼串連master 。進行複製操作的使用者會授予REPLICATION SLAVE許可權。

 

   grant replication slave,replication client on *.* to [email protected]‘172.17.%.%‘ identified by ‘111111‘;


3.查看主伺服器狀態,在Master的資料庫執行show master status,查看主伺服器二進位日誌狀態

   MariaDB [(none)]> show master status;   +------------------+----------+--------------+------------------+   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |   +------------------+----------+--------------+------------------+   | mysql-bin.000001 |      414 |              |                  |   +------------------+----------+--------------+------------------+   1 row in set (0.00 sec)

配置slave從伺服器:

1、對slave進行配置,開啟中繼日誌,指定唯一的servr ID,設定唯讀許可權。在設定檔加入如下值

    server-id=2 #配置server-id,讓從伺服器有唯一ID號         relay_log = mysql-relay-bin #開啟Mysql日誌,日誌格式為二進位         read_only = 1 #設定唯讀許可權         log_bin = mysql-bin #開啟從伺服器二進位日誌         log_slave_updates = 1 #使得更新的資料寫進二進位日誌中


2、啟動從伺服器複製線程 讓slave串連master,並開始重做master二進位日誌中的事件。

    MariaDB [(none)]> change master to         master_host=‘172.17.253.210‘,master_user=‘slave‘,master_password=‘111111‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=245;       Query OK, 0 rows affected (0.01 sec)         執行start slave;# 啟動複製線程。

       

3、查看從伺服器狀態 可使用SHOW SLAVE STATUS\G查看從伺服器狀態,如下所示,也可用show processlist \G查看當前複製狀態:

Slave_IO_Running: Yes #IO線程正常運行

Slave_SQL_Running: Yes #SQL線程正常運行

實現半同步複製:

主節點:

    MariaDB [(none)]> install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;     Query OK, 0 rows affected (0.00 sec)     MariaDB [(none)]> show global variables like ‘rpl_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_no_slave | ON    |    +------------------------------------+-------+    4 rows in set (0.01 sec)     MariaDB [(none)]> set global rpl_semi_sync_master_enabled=on;    Query OK, 0 rows affected (0.00 sec)

從節點:

    MariaDB [(none)]> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so‘;         Query OK, 0 rows affected (0.01 sec)         MariaDB [(none)]> show global variables like ‘rpl_semi%‘;    +---------------------------------+-------+    | Variable_name                   | Value |    +---------------------------------+-------+    | rpl_semi_sync_slave_enabled     | OFF   |    | rpl_semi_sync_slave_trace_level | 32    |    +---------------------------------+-------+    2 rows in set (0.01 sec)          MariaDB [(none)]> stop slave io_thread;    Query OK, 0 rows affected (0.00 sec)         MariaDB [(none)]> set global rpl_semi_sync_slave_enabled =on;    Query OK, 0 rows affected (0.01 sec)         MariaDB [(none)]> show global variables like ‘rpl_semi%‘;        +---------------------------------+-------+    | Variable_name                   | Value |    +---------------------------------+-------+    | rpl_semi_sync_slave_enabled     | ON    |    | rpl_semi_sync_slave_trace_level | 32    |    +---------------------------------+-------+    2 rows in set (0.00 sec)         MariaDB [(none)]> start slave io_thread;                  Query OK, 0 rows affected (0.00 sec)

    四、測試

    在master上建立資料庫和資料表,觀察slave資料庫中的資料,是否和master同步。








    


基於MySQL實現資料庫的半同步主從複製

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.