Mysql實現數據庫主從複製、主主複製、半同步複製

--------------Mysql實現數據庫主從複製架構----------------

一、環境準備:

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

192.168.41.145   master

192.168.41.137  slave

二、準備步驟:

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

2、①vim /etc/hosts

192.168.41.145   master     #各節點之間可以通過主機名互相通信

192.168.41.137  slave

② ntpdate 172.17.0.1  #各節點時鐘服務同步

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

4、分別啓動兩臺服務器mysql服務,確保服務正常.

三、實現步驟:

1、配置master主服務器

對master進行配置,包括打開二進制日誌,指定唯一的servr ID。例如,在配置文件加入如下值。

vim /etc/my.cnf

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 slave@'192.168.%.%' IDENTIFIED BY 'ke';

3.查看主服務器狀態

在Master的數據庫執行show master status,查看主服務器二進制日誌狀態

1.png

4、配置slave從服務器

對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 #使得更新的數據寫進二進制日誌中

5.啓動從服務器複製線程

①stop  slave;

②reset slave;

③讓slave連接master,並開始重做master二進制日誌中的事件。

CHANGE MASTER TO

MASTER_HOST='192.168.41.145',

MASTER_USER='slave',

MASTER_PASSWORD='ke', 【主從密碼要一致】

MASTER_LOG_FILE='mysql-bin.000001',

MASTER_LOG_POS=278;

※注意

IP爲master的IP;

密碼和master設置一致;

POS設置查看master得到:show master status

④start slave;# 啓動複製線程。

6、查看從服務器狀態

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

Slave_IO_Running: Yes #IO線程正常運行

Slave_SQL_Running: Yes #SQL線程正常運行

【兩者必須同時YES,纔算啓動成功】

附:主從同步出現一下錯誤:

Slave_IO_Running: Connecting

Slave_SQL_Running: Yes

解決方法:

導致lave_IO_Running 爲connecting 的原因主要有以下 3 個方面:

  1、網絡不通

2、密碼不對

3、pos不對

四、驗證

在master上插入數據,查看slave上是否可以同步

create database liuke;#建數據庫

use liuke;

create table mini_tb(id int(3),name char(10));  #建表

insert into mini_tb values(001,'candy'); #插入數據

select*from mini_tb;     #查看錶內容

2.png

在slave上查看,可以同步則成功。

五、添加新slave服務器

假如master已經運行很久了,想對新安裝的slave進行數據同步,甚至它沒有master的數據。

此時,有幾種方法可以使slave從另一個服務開始,例如,從master拷貝數據,從另一個slave克隆,從最近的備份開始一個slave。爲了加快Slave與master同步,可

用以下方式先進行數據同步:

(1)master的某個時刻的數據快照;

(2)數據庫的備份數據

(3)master的二進制日誌文件。

--------------mysql實現數據庫主主複製----------------

一、原理

主主複製即在兩臺MySQL主機內都可以變更數據,而且另外一臺主機也會做出相應的變更。

如何實現:就是將兩個主從複製有機合併起來。

配置的時候需要注意的問題:主鍵重複,server-id不能重複。

二、實驗步驟

master:192.168.41.145   slave:192.168.41.137

1、配置文件

定義master使用奇數id

vim   /etc/my.cnf

auto_increment_offset=1    #起始值。一般填第n臺主MySQL。此時爲第一臺主MySQL

auto_increment_increment=2    #步進值auto_imcrement。一般有n臺主MySQL就填n

slave 使用偶數id

auto_increment_offset=2

auto_increment_increment=2

2、   因爲主主複製是兩個主從複製組合一起,所以就接着上面主從複製接着配置。

(1)

①在slave上創建一個192.168.41.145主機可以登錄的MySQL用戶。

用戶:bubu   密碼:123

②創建:create user 'bubu'@'192.168.41.145' IDENTIFIED BY "123";

授權:grant replication slave on *.* to 'bubu'@'192.168.41.145' IDENTIFIED BY "123";

mysql>FLUSH PRIVILEGES;

③在192.168.41.137上查看二進制名和位置:show master status;

3.png

(3) 告知二進制文件名與位置

在192.168.41.145中執行:

change master to  master_host='192.168.41.137',

master_user='bubu',

master_password='123',

master_log_file='mysql-bin.000004',

master_log_pos=601;

主主複製配置完成。

三、測試

(1)

兩個主機分別啓動slave:start slave;

分別查看slave狀態:

192.168.41.145     【replicate-do-db=aa #要同步的數據庫,默認所有庫】

4.png

192.168.41.137

5.png

當看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明狀態正常

(2)

①192.168.41.145

MariaDB [mysql]> use jesper;

create table tab1(id int);

insert into tab1  values('66');

select*from tab1;

②192.168.41.145

MariaDB [mysql]> use jesper;

insert into tab1  values('99');

select*from tab1;

查看數據: 兩個主機數據結果一樣!

6.png

※注意:

1、主主複製配置文件中auto_increment_increment和auto_increment_offset只能保證主鍵不重複,卻不能保證主鍵有序。

2、當配置完成Slave_IO_Running、Slave_SQL_Running不全爲YES時,show slave status\G信息中有錯誤提示,可根據錯誤提示進行更正。

常見出錯點:

1、兩臺數據庫都存在db數據庫,而第一臺MySQL db中有tab1,第二臺MySQL db中沒有tab1,那肯定不能成功。

2、已經獲取了數據的二進制日誌名和位置,又進行了數據操作,導致POS發生變更。在配置CHANGE MASTER時還是用到之前的POS。

3、stop slave後,數據變更,再start slave。出錯。

終極更正法:重新執行一遍CHANGE MASTER就好了

--------------MySQL實現數據庫半同步複製-------------

半同步複製模式必須在主服務器和從服務器同時中開啓,否則將會默認爲異步複製模式。

一、環境準備

①需要安裝方可使用:

mysql> INSTALL PLUGIN plugin_name SONAME 'shared_library_name';

半同步複製:

semisync_master.so

semisync_slave.so

②檢查是否有自動加載功能

MariaDB [(none)]> show variables like 'have_dynamic_loading';

7.png

③主從複製已經配置好,並且已經工作。

二、實驗步驟

1、主節點設置:

①安裝:INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

②查看:MariaDB [mydb]> 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 |

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

③MariaDB [mydb]> SET GLOBAL rpl_semi_sync_master_enabled=ON;【0:關閉;1:開啓】

#開啓半同步複製,默認是關閉的。

2、從節點設置:

①INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

②MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';#查看是否加載成功

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

| Variable_name | Value |

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

| rpl_semi_sync_slave_enabled | OFF |

| rpl_semi_sync_slave_trace_level | 32 |

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

③重啓從服務器IO線程,手動將異步模式換成半同步模式

MariaDB [mydb]> STOP SLAVE IO_THREAD;

MariaDB [mydb]> SET GLOBAL  rpl_semi_sync_slave_enabled = ON ;

MariaDB [mydb]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';

MariaDB [mydb]> START SLAVE IO_THREAD;

※可查看從庫錯誤日誌觀察是否生效

3、配置文件修改

主從配置文件都添加:

vim /etc/my.cnf

rpl_semi_sync_master_enabled=1 #表示以後啓動MySQL將會自動開啓半同步複製

三、測試

摸擬slave掛掉,master等待10s仍沒接收到反饋信號,則轉爲異步複製模式,繼續執行。

首先同步創建數據庫aa

1、slave執行stop slave;關閉主從複製

2、master在aa數據庫中創建表aihao,沒接收到反饋信號,等待十秒後(Rpl_semi_sync_master_timeout=1000等待超時),繼續執行

 master:

8.png

slave:

9.png

3、master在數據庫中再創建tab2,不需要等待反饋,直接執行

【當反饋超時時,master將切換到異步複製模式。此時是異步模式,不需要等待】

10.png

4、slave執行start slave,數據開始同步,建立aihao、tab2,反饋給master,並切換爲半同步複製

11.png

 5、slave執行stop slave;關閉主從複製

 6、master在數據庫中創建表tab3,此時需要等待10s,接收slave反饋信號;等待超時,切換爲異步複製模式,繼續執行【步驟4時,數據同步已經反饋給master,此時master已經是半同步複製模式】

12.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章