MySQL之主從複製、級聯複製、主主複製、半同步複製和加密複製

title_small.jpg

本章內容

MySQL複製介紹

實驗一:建立新的主從複製

實驗二:已有舊的主,建立新從

實驗三:三臺服務器實現級聯複製

複製架構中應該注意的問題

實驗四:提升從服務器爲主服務器

實驗五:實現主主複製

實驗六:實現半同步複製

複製過濾器

實驗七:實現SSL加密複製

複製的監控和維護

 

MySQL複製

擴展方式:

Scale Up:縱向擴展,如增加CPU、內存等,但性能的提升往往不是線性的,會越來越差

Scale Out:橫向擴展,把請求分散在多臺機器上,擴展的效果更好,也更常用

MySQL的擴展

讀寫分離

複製:每個節點都有相同的數據集

向外擴展

二進制日誌

單向

複製的功用:

數據分佈

負載均衡讀

備份

高可用和故障切換

MySQL升級測試(灰度發佈,要逐臺升級)

 

MySQL讀寫分離

讀寫分離應用:

mysql-proxyOracle

https://downloads.mysql.com/archives/proxy/

AtlasQihoo

https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md

dbproxy:美團

https://github.com/Meituan-Dianping/DBProxy

Amoeba

https://sourceforge.net/projects/amoeba/

 

主從複製讀寫分離示意圖

MySQL複製 01.jpg

 

主從複製線程

主節點:

dump Thread:爲每個SlaveI/O Thread啓動一個dump線程,用於通過tcp長連接向其發送binary log events

從節點:

I/O Thread:向Master請求二進制日誌事件,並保存於中繼日誌中

SQL Thread:從中繼日誌中讀取日誌事件,在本地完成重放

MySQL複製 02.jpg

 

MySQL垂直分區

數據庫的拆分,有垂直分區和水平分片等方式。垂直分區一般是將沒有john關係的數據拆分開,放到不同的數據庫中

MySQL垂直分區.jpg

 

MySQL水平分片(Sharding

水平分片則是水平拆分成若干片,例如按照用戶ID來拆分,然後分佈在不同的數據庫服務器中

MySQL水平分片.jpg

 

對應shard中查詢相關數據

水平分片就涉及到一個調度的問題,負責調度的是分片管理器,負責將不同的請求調度到對應的庫中

分片管理器一般是自研的,配合應用程序才能來實現這樣的功能;當然達到這樣的規模的話,企業一定有大量的研發人員了

對應shard中查詢相關數據 .jpg

 

跟複製功能相關的文件

master.info:用於保存slave連接至master時的相關信息,例如賬號、密碼、服務器地址等

relay-log.info:保存在當前slave節點上已經複製的當前二進制日誌和本地replay log日誌的對應關係

 

MySQL複製

主從複製特點:

異步複製

主從數據不一致比較常見

複製架構:

Master/Slave

Master/Master(不建議用,容易產生數據不一致的問題)

環狀複製(不建議用)

一主多從(常用)

從服務器還可以再有從服務器(常用)

一從多主:適用於從服務器有多個不同的數據庫

複製需要考慮二進制日誌事件記錄格式

STATEMENT5.0之前)

ROW5.1之後,推薦)

MIXED(至少要用這個)


 MySQL複製模型.jpg


主從配置

主從配置過程:參看官網

https://mariadb.com/kb/en/library/setting-up-replication/

https://dev.mysql.com/doc/refman/5.5/en/replication-configuration.html

主節點配置:

(1) 啓用二進制日誌

[mysqld]

log_bin

(2) 爲當前節點設置一個全局惟一的ID

[mysqld]

server_id=#

log-basename=master 可選項,設置datadir中日誌名稱,確保不依賴主機名

(3) 創建有複製權限的用戶賬號

GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'HOST' IDENTIFIED BY 'replpass';

 

從節點配置:

(1) 啓動中繼日誌

[mysqld]

server_id=# 爲當前節點設置一個全局惟的ID

relay_log=relay-log relay log的文件路徑,默認值hostname-relay-bin

relay_log_index=relay-log.index 默認值hostname-relay-bin.index

(2) 使用有複製權限的用戶賬號連接至主服務器,並啓動複製線程

mysql> CHANGE MASTER TO

 MASTER_HOST='host',

 MASTER_USER='repluser',

 MASTER_PASSWORD='replpass',

 MASTER_LOG_FILE='mysql-bin.xxxxx',

 MASTER_LOG_POS=#;

 MASTER_CONNECT_RETRY=10;

mysql> START SLAVE [IO_THREAD|SQL_THREAD];

 

實驗一:建立新的主從複製


實驗1-00.png

準備兩臺虛擬機分別作爲主從服務器,在本次實驗中,主服務器的IP192.168.30.3,提示符爲master,從服務器的IP192.168.30.4,提示符爲slave1


在主服務器:

1、修改配置文件

vim /etc/my.cnf

server_id=1                       #主節點ID號設爲1

log_bin                              #啓用二進制日誌

binlog_format=row          #二進制日誌事件記錄格式選ROW

log-basename=master     #可選項,指定二進制文件前綴

innodb_file_per_table      #單表存儲

實驗1-01.png

systemctl restart mariadb              #重啓mysql服務使配置生效

2、創建有複製權限的用戶賬號

mysql> grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';

3、查看二進制日誌的起點

mysql> show master logs;

實驗1-02.png

如上圖,記錄一下,之後就從master-bin.000003的位置400開始複製

4、導入一個數據庫hellodb

[root@master ~]#mysql < hellodb_innodb.sql

此時可以查看一下當前的二進制日誌信息,發現已發生變化

mysql> show master logs;

實驗1-03.png

 

在從服務器:

5、修改配置文件

vim /etc/my.cnf

server_id=2

read_only

innodb_file_per_table

實驗1-04.png

systemctl restart mariadb              #重啓mysql服務使配置生效

6、使用有複製權限的用戶賬號連接至主服務器

mysql> CHANGE MASTER TO

  MASTER_HOST='192.168.30.3',

  MASTER_USER='repluser',

  MASTER_PASSWORD='centos',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='master-bin.000003',

  MASTER_LOG_POS=400,

  MASTER_CONNECT_RETRY=10;

實驗1-05.png

mysql> start slave;     #啓動複製線程

7、查看從服務器的工作狀態

mysql> show slave status\G

看到從服務器已經開始正常工作

實驗1-06.png

mysql> show databases;

看到hellodb數據庫已經複製過來了

實驗1-07.png

8、繼續測試

切回主服務器,創建數據庫db1

mysql> create database db1;

切回從服務器,我們看到,從服務器同步成功

實驗1-08.png

 

MySQL複製

如果主節點已經運行了一段時間,且有大量數據時,如何配置並啓動slave節點

通過備份恢復數據至從服務器

複製起始位置爲備份時,二進制日誌文件及其POS

如果要啓用級聯複製,需要在從服務器啓用以下配置

[mysqld]

log_bin

log_slave_updates

 

實驗二:已有舊的主,建立新從

主服務器數據庫仍沿用實驗一的主服務器,作爲已經運行了一段時間且有數據的服務器

數據庫初始信息如下:

實驗2-01.png

從服務器爲新環境下的服務器

 

在主服務器:

1、修改配置文件

vim /etc/my.cnf

server_id=1

log_bin

binlog_format=row

log-basename=master     #可選項

innodb_file_per_table

systemctl restart mariadb              #重啓mysql服務使配置生效

2、創建有複製權限的用戶賬號

mysql> grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';

3、使用mysqldump對主服務器數據庫進行全備份

mysqldump -A -F --single-transaction --master-data=1 > all.sql

scp all.sql 192.168.30.4:/root  #將全備份文件拷貝到新的從服務器

 

在從服務器:

4、修改配置文件

vim /etc/my.cnf

server_id=2

read_only

innodb_file_per_table

systemctl restart mariadb              #重啓mysql服務使配置生效

5、修改全備份文件添加主服務器信息

vim all.sql

找到此行

實驗2-02.png

替換爲:

CHANGE MASTER TO

  MASTER_HOST='192.168.30.3',

  MASTER_USER='repluser',

  MASTER_PASSWORD='centos',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='master-bin.000004',  #本來已有不要改

  MASTER_LOG_POS=245,  #本來已有不要改

  MASTER_CONNECT_RETRY=10;

實驗2-03.png

6、在從服務器上導入全備份

mysql < all.sql

此時我們看到全備份中數據庫已導入成功

實驗2-04.png

7、啓動複製線程

mysql > start slave;

mysql> show slave status;        #查看從服務器的工作狀態

看到從服務器已開始正常工作

實驗2-05.png

8、繼續測試

切換到主服務器,繼續測試,創建數據庫db2

mysql> create database db2;

切換回從服務器,我們看到,從服務同步成功

實驗2-06.png

 

實驗三:三臺服務器實現級聯複製

如果主服務器既承擔寫操作又承擔多臺從服務器的複製工作,負擔可能會比較大,這時候如果只用1臺服務器從主服務器複製,其他的服務器再從這臺服務器上覆制,可一定程度上減輕主服務器的負擔

實驗3-00.png

但是,中間的服務器即使啓用了二進制日誌,也不會記錄從主服務器上覆制過來的那些二進制數據,需要額外加一個設置,才能啓動級聯傳輸

[mysqld]

log_slave_updates

 

準備三臺虛擬機分別作爲主服務器、中間服務器和從服務器,在本次實驗中,主服務器的IP192.168.30.3,提示符爲master,中間服務器的IP192.168.30.4,提示符爲slave1,從服務器的IP192.168.30.5,提示符爲slave2

 

在主服務器:

1、修改配置文件

vim /etc/my.cnf

server_id=1

log_bin

binlog_format=row

innodb_file_per_table

systemctl restart mariadb              #重啓mysql服務使配置生效

實驗3-01.png

2、創建有複製權限的用戶賬號

mysql> grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';

 

在中間服務器:

3、修改配置文件

vim /etc/my.cnf

server_id=2

log_bin

binlog_format=row

log_slave_updates

read_only

innodb_file_per_table

實驗3-02.png

systemctl restart mariadb              #重啓mysql服務使配置生效

4、使用有複製權限的用戶賬號連接至主服務器

mysql> CHANGE MASTER TO

  MASTER_HOST='192.168.30.3',

  MASTER_USER='repluser',

  MASTER_PASSWORD='centos',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='mariadb-bin.000001',

  MASTER_LOG_POS=245,

  MASTER_CONNECT_RETRY=10;

mysql> start slave;     #啓動複製線程

 

在從服務器:

5、修改配置文件

vim /etc/my.cnf

server_id=3

read_only

innodb_file_per_table

實驗3-03.png

systemctl restart mariadb              #重啓mysql服務使配置生效

6、使用有複製權限的用戶賬號連接至中間從服務器

mysql> CHANGE MASTER TO

  MASTER_HOST='192.168.30.4',

  MASTER_USER='repluser',

  MASTER_PASSWORD='centos',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='mariadb-bin.000001',

  MASTER_LOG_POS=245,

  MASTER_CONNECT_RETRY=10;

mysql> start slave;     #啓動複製線程

7、查看從服務器的工作狀態

mysql> show slave status\G

看到從服務器已經開始工作

實驗3-04.png

 

8、測試

在主服務器,導入hellodb數據庫

#mysql < hellodb_innodb.sql

在中間服務器,我們看到,hellodb數據庫已同步成功

實驗3-05.png

在從服務器, hellodb數據庫也已同步成功,至此我們實現了MySQL數據庫的級聯複製

實驗3-06.png

 

複製架構中應該注意的問題

1、限制從服務器爲只讀

在從服務器上設置read_only=ON

注意:此限制對擁有SUPER權限的用戶均無效

阻止所有用戶, 包括主服務器複製的更新

mysql> FLUSH TABLES WITH READ LOCK;  #這項一般不設

2RESET SLAVE

在從服務器清除master.info relay-log.info, relay log ,開始新的relay log ,注意:需要先STOP SLAVE

RESET SLAVE ALL 清除所有從服務器上設置的主服務器同步信息如:PORT, HOST, USER PASSWORD

3、如何保證主從複製的事務安全

參看https://mariadb.com/kb/en/library/server-system-variables/

master節點啓用參數:

sync_binlog=1 每次寫後立即同步二進制日誌到磁盤,性能差

如果用到的爲InnoDB存儲引擎:

innodb_flush_log_at_trx_commit=1 每次事務提交立即同步日誌寫磁盤

innodb_support_xa=ON 默認值,分佈式事務MariaDB10.3.0廢除

sync_master_info=# #次事件後master.info同步到磁盤

slave節點啓用服務器選項:

skip_slave_start=ON 不自動啓動slave

slave節點啓用參數:

sync_relay_log=# #次寫後同步relay log到磁盤

sync_relay_log_info=# #次事務後同步relay-log.info到磁盤

 

實驗四:提升從服務器爲主服務器

當主服務器宕機時,就需要提升一臺從服務器爲主服務器,然而各臺從服務器的數據同步進度可能是不一樣的,所以最好找出數據同步最完整的從服務器提升爲主服務器。

那麼怎麼看哪一臺從服務器的數據同步得是最完整的呢?方法是查看各臺從服務器的mysql文件夾下的master.info文件,文件中的第2和第3行,即表示已同步的主服務器二進制文件和位置,二進制文件和位置最大的那臺從服務器,即是同步得最完整的從服務器。

cat /var/lib/mysql/master.info

實驗4-01.png

將此服務器配置修改爲主服務器配置

vim /etc/my.cnf

server_id=1

log_bin

binlog_format=row

清除其它從服務器上的所有原有master信息

mysql> reset slave all;

最後更改其它從服務器的上的master設置即可

mysql> CHANGE MASTER TO

  MASTER_HOST='192.168.30.X',

  MASTER_USER='repluser',

  MASTER_PASSWORD='centos',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='mariadb-bin.00000X',

  MASTER_LOG_POS=XXX,

  MASTER_CONNECT_RETRY=10;

mysql> start slave;

 

主主複製

主主複製:互爲主從

容易產生的問題:數據不一致;因此慎用

考慮要點:自動增長id

配置一個節點使用奇數id

auto_increment_offset=1 開始點

auto_increment_increment=2 增長幅度

另一個節點使用偶數id

auto_increment_offset=2

auto_increment_increment=2

 

主主複製的配置步驟:

(1) 各節點使用一個惟一server_id

(2) 都啓動binary logrelay log

(3) 創建擁有複製權限的用戶賬號

(4) 定義自動增長id字段的數值範圍各爲奇偶

(5) 均把對方指定爲主節點,並啓動複製線程

 

實驗五:實現主主複製

準備兩臺虛擬機分別作爲主服務器1和主服務器2,在本次實驗中,主服務器1IP192.168.30.3,提示符爲master1,主服務器2IP192.168.30.4,提示符爲master2

實驗5-00.png

 在主服務器1

1、修改配置文件

vim /etc/my.cnf

server_id=1

log_bin

binlog_format=row

auto_increment_offset=1       #開始點

auto_increment_increment=2       #增長幅度,當3臺爲環狀複製時,改爲3

innodb_file_per_table

systemctl restart mariadb              #重啓mysql服務使配置生效

實驗5-01.png

2、創建有複製權限的用戶賬號

mysql> grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';

3、使用有複製權限的用戶賬號連接至主服務器2

mysql> CHANGE MASTER TO

  MASTER_HOST='192.168.30.4',

  MASTER_USER='repluser',

  MASTER_PASSWORD='centos',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='mariadb-bin.000001',

  MASTER_LOG_POS=245,

  MASTER_CONNECT_RETRY=10;

mysql> start slave;     #在主服務器2也配置好後,啓動複製線程

 

在主服務器2

4、修改配置文件

vim /etc/my.cnf

server_id=2

log_bin

binlog_format=row

auto_increment_offset=2       #開始點

auto_increment_increment=2       #增長幅度

innodb_file_per_table

systemctl restart mariadb              #重啓mysql服務使配置生效

實驗5-02.png

5、創建有複製權限的用戶賬號

mysql> grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos';

6、使用有複製權限的用戶賬號連接至主服務器1

mysql> CHANGE MASTER TO

  MASTER_HOST='192.168.30.3',

  MASTER_USER='repluser',

  MASTER_PASSWORD='centos',

  MASTER_PORT=3306,

  MASTER_LOG_FILE='mariadb-bin.000001',

  MASTER_LOG_POS=245,

  MASTER_CONNECT_RETRY=10;

mysql> start slave;     #啓動複製線程

 

7、測試

在主服務器1創建db1數據庫:

mysql> create database db1;

在主服務器2創建db2數據庫:

mysql> create database db2;

分別查看兩臺主服務器均同步成功

實驗5-03.png

在主服務器1的數據庫中不指定ID添加數據時,默認以奇數遞增;

實驗5-04.png

在主服務器2的數據庫中不指定ID添加數據時,默認以偶數遞增;

實驗5-05.png

 主主複製就是通過此種方法來避免數據可能出現的衝突。

 

半同步複製

默認情況下,MySQL的複製功能是異步的,異步複製可以提供最佳的性能,主庫把binlog日誌發送給從庫即結束,並不驗證從庫是否接收完畢。這意味着當主服務器或從服務器端發生故障時,有可能從服務器沒有接收到主服務器發送過來的binlog日誌,這就會造成主服務器和從服務器的數據不一致,甚至在恢復時造成數據的丟失

半同步複製的機制是隻有當主節點和從節點同步完成,僅有一臺從節點同步完成即可,返回寫入完成,這樣的機制保證了數據的安全性。如果主服務器宕機了,至少還有一臺從服務器的數據是一致的。在生產環境中,一般都要搭建半同步複製。如果是級聯複製的話,在主服務器和中間服務器上搭建半同步複製即可。

(圖)

主服務器需要安裝的mysql插件:semisync_master.so

從服務器需要安裝的mysql插件:semisync_slave.so

 

實驗六:實現半同步複製

在主服務器:

安裝semisync_master.so插件

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

啓用master半同步功能

       mysql> SET GLOBAL rpl_semi_sync_master_enabled=1;

查看master半同步相關變量、相關狀態

       mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';

       mysql> SHOW GLOBAL STATUS LIKE '%semi%';

實驗6-01.png

 

在從服務器:

安裝semisync_slave.so插件

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

啓用slave半同步功能

       mysql> SET GLOBAL rpl_semi_sync_slave_enabled=1;

查看slave半同步相關變量

       mysql> SHOW GLOBAL VARIABLES LIKE '%semi%';

實驗6-02.png

 

至此,主從服務器的半同步複製就搭建完成了。重啓mariadb服務的話,配置將失效,如果想永久啓用,可寫入配置文件中。

 

複製過濾器

讓從節點僅複製指定的數據庫,或指定數據庫的指定表

兩種實現方式:

(1) 服務器選項:主服務器僅向二進制日誌中記錄與特定數據庫相關的事件

注意:此項和binlog_format相關

參看:https://mariadb.com/kb/en/library/mysqld-options/#-binlog-ignore-db

無法作爲動態變量修改,只能作爲選項寫入配置文件中

binlog_do_db = 數據庫白名單列表,多個數據庫需多行實現

binlog_ignore_db = 數據庫黑名單列表

問題:基於二進制還原將無法實現;不建議使用

(2) 從服務器SQL_THREADreplay中繼日誌中的事件時,僅讀取與特定數據庫(特定表)相關的事件並應用於本地

問題:會造成網絡及磁盤IO浪費

 

複製過濾器從服務器上的相關設置

replicate_do_db= 指定複製庫的白名單

replicate_ignore_db= 指定複製庫黑名單

replicate_do_table= 指定複製表的白名單

replicate_ignore_table= 指定複製表的黑名單

replicate_wild_do_table= foo%.bar% 支持通配符

replicate_wild_ignore_table=

show variables like 'replicate%';

 

MySQL複製加密

基於SSL複製:

在默認的主從複製過程或遠程連接到MySQL/MariaDB所有的鏈接通信中的數據都是明文的,外網裏訪問數據或則複製,存在安全隱患。通過SSL/TLS加密的方式進行復制的方法,來進一步提高數據的安全性

配置實現:

參看:https://mariadb.com/kb/en/library/replication-with-secure-connections/

主服務器開啓SSL[mysqld] 加一行ssl

master配置證書和私鑰;並且創建一個要求必須使用SSL連接的複製賬號

slave端使用CHANGER MASTER TO 命令時指明ssl相關選項

 

Master配置

[mysqld]

log-bin

server_id=1

ssl

ssl-ca=/etc/my.cnf.d/ssl/cacert.pem

ssl-cert=/etc/my.cnf.d/ssl/master.crt

ssl-key=/etc/my.cnf.d/ssl/master.key

 

Slave配置

mysql>CHANGE MASTER TO

MASTER_HOST='MASTERIP',

MASTER_USER='rep',

MASTER_PASSWORD='centos',

MASTER_LOG_FILE='mariadb-bin.000001',

MASTER_LOG_POS=245,

MASTER_CONNECT_RETRY=10,

MASTER_SSL=1,

MASTER_SSL_CA = '/etc/my.cnf.d/ssl/cacert.pem',

MASTER_SSL_CERT = '/etc/my.cnf.d/ssl/slave.crt',

MASTER_SSL_KEY = '/etc/my.cnf.d/ssl/slave.key';

 

實驗七:實現SSL加密複製

準備3臺虛擬機分別作爲主服務器、從服務器和CA服務器,在本次實驗中,主服務器的IP192.168.30.3,提示符爲master,從服務器的IP192.168.30.4,提示符爲slaveCA服務器的IP192.168.30.5,提示符爲ca

特別提示:在配置之前先檢查mysql服務是否支持ssl功能,如果have_ssl的值爲'DISABLED'則支持;如果爲'NO'則不支持,需要再重新編譯安裝或者安裝具有ssl功能的版本

實驗7-01.png

 CA服務器:

1、生成CA的私鑰

mkdir /etc/my.cnf.d/ssl

cd /etc/my.cnf.d/ssl

openssl genrsa 2048 > cakey.pem

2、生成CA的自簽名

openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650

CN

beijing

beijing

wind.com

opt

ca.wind.com

實驗7-02.png

此時ssl目錄下的文件有

ls /etc/my.cnf.d/ssl

實驗7-03.png

3、在本機生成masterslave的私鑰:

同時生成主服務器master的私鑰和簽名請求

openssl req -newkey rsa:2048 –days 3650 -nodes -keyout master.key > master.csr

CN

beijing

beijing

wind.com

opt

master.wind.com

頒發master證書

openssl x509 -req -in master.csr -CA cacert.pem -CAkey cakey.pem -set_serial 01 > master.crt

此時ssl目錄下的文件有

ls /etc/my.cnf.d/ssl

實驗7-04.png

繼續生成從服務器的私鑰和簽名請求

openssl req -newkey rsa:2048 -days 3650 -nodes -keyout slave.key > slave.csr

CN

beijing

beijing

wind.com

opt

slave.wind.com

頒發slave證書

openssl x509 -req -in slave.csr -CA cacert.pem -CAkey cakey.pem -set_serial 02 > slave.crt

此時ssl目錄下文件有

ls /etc/my.cnf.d/ssl

實驗7-05.png

4、將ssl文件夾複製到主服務器和從服務器

scp -r /etc/my.cnf.d/ssl 192.168.30.3:/etc/my.cnf.d

scp -r /etc/my.cnf.d/ssl 192.168.30.4:/etc/my.cnf.d

主服務器保留下列文件 cacert.pem master.crt master.key

從服務器保留下列文件 cacert.pem slave.crt slave.key      

 

在主服務器:

5、修改配置文件

vim /etc/my.cnf

server_id=1

log_bin

binlog_format=row

innodb_file_per_table

ssl

ssl-ca=/etc/my.cnf.d/ssl/cacert.pem

ssl-cert=/etc/my.cnf.d/ssl/master.crt

ssl-key=/etc/my.cnf.d/ssl/master.key

實驗7-06.png

systemctl restart mariadb              #重啓mysql服務使配置生效

mysql> show variables like '%ssl%';       #查看是否生效

實驗7-07.png

6、創建有複製權限且要求必須以加密方式連接的用戶賬號

mysql> grant replication slave on *.* to repluser@'192.168.30.%' identified by 'centos' require ssl;

可以在slave端測試replusr用戶的ssl連接

[root@slave ssl]#mysql -urepluser -pcentos -h192.168.30.3 --ssl-ca=cacert.pem --ssl-cert=slave.crt --ssl-key=slave.key

 

在從服務器:

方法一:

7、修改配置文件

vim /etc/my.cnf

server_id=2

log_bin

binlog_format=row

innodb_file_per_table

systemctl restart mariadb              #重啓mysql服務使配置生效

8、使用有複製權限的用戶賬號連接至主服務器

mysql> CHANGE MASTER TO

  MASTER_HOST='192.168.30.3',

  MASTER_USER='repluser',

  MASTER_PASSWORD='centos',

  MASTER_LOG_FILE='mariadb-bin.000001',

  MASTER_LOG_POS=245,

  MASTER_CONNECT_RETRY=10,

  MASTER_SSL=1,

  MASTER_SSL_CA = '/etc/my.cnf.d/ssl/cacert.pem',

  MASTER_SSL_CERT = '/etc/my.cnf.d/ssl/slave.crt',

  MASTER_SSL_KEY = '/etc/my.cnf.d/ssl/slave.key';

mysql> start slave;     #啓動複製線程

 

方法二:

7、寫入配置文件

stop slave;

reset slave all;

vim /etc/my.cnf

server_id=2

log_bin

binlog_format=row

innodb_file_per_table

ssl

ssl-ca=/etc/my.cnf.d/ssl/cacert.pem

ssl-cert=/etc/my.cnf.d/ssl/slave.crt

ssl-key=/etc/my.cnf.d/ssl/slave.key

systemctl restart mariadb              #重啓mysql服務使配置生效

8、使用有複製權限的用戶賬號連接至主服務器

mysql> CHANGE MASTER TO

  MASTER_HOST='192.168.30.3',

  MASTER_USER='repluser',

  MASTER_PASSWORD='centos',

  MASTER_LOG_FILE='mariadb-bin.000001',

  MASTER_LOG_POS=245,

  MASTER_CONNECT_RETRY=10,

  MASTER_SSL=1;

mysql> start slave;     #啓動複製線程

 

複製的監控和維護

(1) 清理日誌

PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }

RESET MASTER

RESET SLAVE

(2) 複製監控

SHOW MASTER STATUS

SHOW BINLOG EVENTS

SHOW BINARY LOGS

SHOW SLAVE STATUS

SHOW PROCESSLIST

(3) 從服務器是否落後於主服務

Seconds_Behind_Master: 0

(4) 如何確定主從節點數據是否一致

percona-tools

(5) 數據不一致如何修復

刪除從數據庫,重新複製


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