Mariadb 主從複製、雙主複製、半同步複製、基於SSL複製

1、Mariabd數據複製原理和功能node

        Mysql內建的複製功能是構建大型,高性能應用程序的基礎。將Mysql的數據分佈到多個系統上去,這種分佈的機制,是經過將Mysql的某一臺主機的數據複製到其它主機(slaves)上,並從新執行一遍來實現的。複製過程當中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並維護文件的一個索引以跟蹤日誌循環。這些日誌能夠記錄發送到從服務器的更新。當一個從服務器鏈接主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。從服務器接收從那時起發生的任何更新,而後封鎖並等待主服務器通知新的更新。mysql

        複製的功用:數據分佈;負載均衡讀;數據備份;高可用和故障切換;MySQL升級測試sql


2、Mariabd主從複製的實現數據庫

主節點(MASTER)配置vim

①、啓動二進制日誌爲當前節點設置一個全局唯的ID號bash

[root@localhost ~]# vim /etc/my.cn
log_bin = mysql-bin                #啓動二進制日誌
server_id = 1                      #設置服務器ID
innodb_file_per_table = ON         #設置每表使用單獨事務日誌
skip-name-resolve = ON                  #跳過域名解析
[root@localhost ~]# systemctl restart mariadb.service

②、建立有複製權限的用戶帳號服務器

MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wlw'@'192.168.0.%' IDENTIFIED BY 'wlw';
MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      413 |              |                  |
+------------------+----------+--------------+------------------+
#這裏二進制日誌已經滾到到第三個文件了,前兩個文件爲數據庫初始化建立的mysql管理庫等信息,因此咱們等一下配置
#配置從的Position只須要從這一刻的413開始便可

從節點(SLAVE)配置網絡

①、啓動中繼日誌、爲當前節點設置一個全局唯的ID號session

[root@localhost ~]# vim /etc/my.cn
relay_log = relay-log                    #啓動中繼日誌
relay_log_index = relay-log.index
read-only = 1                            #開啓只讀模式,此限制對擁有SUPER權限的用戶均無效
#若是須要鎖定全部用戶,能夠執行SQL語句(FLUSH TABLES WITH READ LOCK;)
server_id = 8                            
innodb_file_per_table = ON
skip-name-resolve = ON

②、配置前查看一下從服務器的狀態和是否啓動了複製線程負載均衡

MariaDB [(none)]> SHOW SLAVE STATUS;
Empty set (0.01 sec)
#這裏咱們查看從服務器的狀態,能夠看到尚未配置,爲空
MariaDB [(none)]> SHOW PROCESSLIST;
+----+------+-----------+------+---------+------+-------+------------------+----------+
| Id | User | Host      | db   | Command | Time | State | Info             | Progress |
+----+------+-----------+------+---------+------+-------+------------------+----------+
|  2 | root | localhost | NULL | Query   |    0 | NULL  | SHOW PROCESSLIST |    0.000 |
+----+------+-----------+------+---------+------+-------+------------------+----------+
#能夠看到從服務器尚未啓動複製線程

③、使用有複製權限的用戶帳號鏈接至主服務器,並啓動複製線程

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.0.151', MASTER_USER='wlw', MASTER_PASSWORD='wlw', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=413;
MariaDB [(none)]> START SLAVE;

配置後查看一下從服務器的狀態和是否啓動了複製線程

MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.151            #主服務器IP
                  Master_User: wlw                      #複製受權的用戶
                  Master_Port: 3306                     #主服務器端口
                Connect_Retry: 60                       #重試時間
              Master_Log_File: mysql-bin.000003         #讀取二進制的文件
          Read_Master_Log_Pos: 413                      #讀取二進制的開始位置
               Relay_Log_File: relay-log.000002         #讀取的中繼日誌文件
                Relay_Log_Pos: 529                      #讀取的中繼日誌位置
        Relay_Master_Log_File: mysql-bin.000003        
             Slave_IO_Running: Yes                      #I/O Thread啓動
            Slave_SQL_Running: Yes                      #SQL Thread啓動
              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: 413
              Relay_Log_Space: 817
              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: 1
             
MariaDB [(none)]> SHOW PROCESSLIST;
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+
| Id | User        | Host      | db   | Command | Time | State                                                                       | Info             | Progress |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+
|  2 | root        | localhost | NULL | Query   |    0 | NULL                                                                        | SHOW PROCESSLIST |    0.000 |
|  3 | system user |           | NULL | Connect |  404 | Waiting for master to send event                                            | NULL             |    0.000 |
|  4 | system user |           | NULL | Connect |  403 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL             |    0.000 |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+
#能夠看到啓動了兩個線程,一個時等待主服務器發送的時間,一個是讀取中繼日誌作同步

[root@c7node1 ~]# ll /var/lib/mysql/master.info
-rw-rw----. 1 mysql mysql 75 Nov  8 09:00 /var/lib/mysql/master.info
#這個文件保存了主服務器的連接信息,包括帳號密碼等,下次重啓服務會自動經過此文件鏈接主服務器
[root@c7node1 ~]# cat /var/lib/mysql/relay-log.info 
./relay-log.000002
691
mysql-bin.000003
575
#此文件保存從服務器使用的中繼日誌、POS和主服務器使用的二進制日誌、POS,服務器啓動也會讀取此文件

⑤、測試實驗結果,在主服務器建立數據庫看從服務器是否自動複製

MariaDB [(none)]> CREATE DATABASE wlw;
MariaDB [(none)]> CREATE DATABASE WLW;

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| WLW                |
| mysql              |
| performance_schema |
| test               |
| wlw                |
+--------------------+
#能夠看到主服務器建立的數據庫從服務器已經自動複製完成


3、Mariabd雙主複製的實現(容易產生數據不一致,慎用)

主節點一:c7node1.wlw.com        192.168.88.11

主節點二:c7node2.wlw.com        192.168.88.22

①、各節點使用一個唯一server_id、啓動binary log和relay log

[root@c7node1 ~]# vim /etc/my.cnf
log_bin = mysql-bin
relay_log = relay-log
server_id = 1
innodb_file_per_table = ON
skip-name-resolve = ON

auto_increment_offset = 1  
auto_increment_increment = 2
#若是表中有字段爲自動增加,須要配置上面兩項,防止數據不一致

[root@c7node2 ~]# vim /etc/my.cnf
log_bin = mysql-bin
relay_log = relay-log
server_id = 8
innodb_file_per_table = ON
skip-name-resolve = ON

auto_increment_offset = 2                
auto_increment_increment = 2

②、各節點建立擁有複製權限的用戶帳號

c7node1節點數據庫:
MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wlw'@'192.168.88.22' IDENTIFIED BY 'wlw';
MariaDB [(none)]> FLUSH PRIVILEGES;

c7node2節點數據庫:
MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wlw'@'192.168.88.11' IDENTIFIED BY 'wlw';
MariaDB [(none)]> FLUSH PRIVILEGES;

③、各節點均把對方指定爲主節點,並啓動複製線程

c7node1節點數據庫:
MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      500 |              |                  |
+------------------+----------+--------------+------------------+
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.88.22', MASTER_USER='wlw', MASTER_PASSWORD='wlw', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=500;
MariaDB [(none)]> START SLAVE;

c7node2節點數據庫:
MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      500 |              |                  |
+------------------+----------+--------------+------------------+
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.88.11', MASTER_USER='wlw', MASTER_PASSWORD='wlw', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=500;
MariaDB [(none)]> START SLAVE;

③、測試實驗結果,在c7node1和c7node2節點上各建立自動增加字段的表進行測試

c7node1節點數據庫:
MariaDB [(none)]> CREATE DATABASE wlw;
MariaDB [wlw]> INSERT INTO tb1 (name) VALUES ('wlw4'),('wlw5');

c7node2節點數據庫:
MariaDB [(none)]> USE wlw
#能夠看到從節點一複製過來的wlw數據庫,咱們在此數據庫建立一個表作測試
MariaDB [wlw]> CREATE TABLE tb1 (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name CHAR(30));
MariaDB [wlw]> INSERT INTO tb1 (name) VALUES ('wlw1'),('wlw2'),('wlw3');

MariaDB [wlw]> SELECT * FROM tb1;
+----+------+
| id | name |
+----+------+
|  2 | wlw1 |
|  4 | wlw2 |
|  6 | wlw3 |
|  7 | wlw4 |
|  9 | wlw5 |
+----+------+


4、Mariabd半同步複製的實現(基於插件實現)

[root@localhost ~]# rpm -ql mariadb-server
/usr/lib64/mysql/plugin/semisync_master.so
/usr/lib64/mysql/plugin/semisync_slave.so
#半同步複製使用的插件

主節點(MASTER)配置

①、啓動二進制日誌、爲當前節點設置一個全局唯的ID號

[root@localhost ~]# vim /etc/my.cnf
log_bin = mysql-bin
server_id = 1
innodb_file_per_table = ON
skip-name-resolve = ON

②、建立擁有複製權限的用戶帳號

MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wlw'@'192.168.88.22' IDENTIFIED BY 'wlw';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      490 |              |                  |
+------------------+----------+--------------+------------------+

③、安裝插件

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
MariaDB [(none)]> SHOW PLUGINS;
#查看插件是否加載成功
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%';
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | OFF   |        #是否啓動爲半同步複製的主節點
| rpl_semi_sync_master_timeout       | 10000 |        #等待從節點的超時時間,10s
| rpl_semi_sync_master_trace_level   | 32    |        #跟蹤級別
| rpl_semi_sync_master_wait_no_slave | ON    |        #在沒有從節點的時候是否等待
+------------------------------------+-------+
MariaDB [(none)]> SHOW GLOBAL STATUS LIKE '%semi%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 0     |        #有多少個半同步節點
| 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                | OFF   |        
| 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     |
+--------------------------------------------+-------+
MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled = ON;
#啓動爲半同步複製的主節點


從節點(SLAVE)配置

①、啓動中繼日誌、爲當前節點設置一個全局唯的ID號

[root@localhost ~]# vim /etc/my.cnf
relay_log = relay-log
server_id = 8
innodb_file_per_table = ON
skip-name-resolve = ON

②、安裝插件

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
MariaDB [(none)]> SHOW PLUGINS;
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |        #是否啓動爲半同步複製的從節點
| rpl_semi_sync_slave_trace_level | 32    |        #跟蹤級別
+---------------------------------+-------+
MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled = ON;
#啓動爲半同步複製的從節點


③、使用有複製權限的用戶帳號鏈接至主服務器,並啓動複製線程

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.88.11', MASTER_USER='wlw', MASTER_PASSWORD='wlw', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=490;
MariaDB [(none)]> START SLAVE;

④、實驗測試結果,建立數據庫和數據表並查看狀態信息

MariaDB [(none)]> CREATE DATABASE wlw;
MariaDB [(none)]> USE wlw
MariaDB [wlw]> CREATE TABLE tb(id int);
MariaDB [wlw]> SHOW GLOBAL STATUS LIKE '%semi%';
+--------------------------------------------+--------+
| Variable_name                              | Value  |
+--------------------------------------------+--------+
| Rpl_semi_sync_master_clients               | 1      |
| Rpl_semi_sync_master_net_avg_wait_time     | 55693  |
| Rpl_semi_sync_master_net_wait_time         | 111387 |
| Rpl_semi_sync_master_net_waits             | 2      |
| 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      | 85545  |
| Rpl_semi_sync_master_tx_wait_time          | 171091 |
| Rpl_semi_sync_master_tx_waits              | 2      |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0      |
| Rpl_semi_sync_master_wait_sessions         | 0      |
| Rpl_semi_sync_master_yes_tx                | 2      |
+--------------------------------------------+--------+


5、Mariabd複製過濾器

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

 (1) 主服務器僅向二進制日誌中記錄與特定數據庫(特定表)相關的事件(時間還原沒法實現,不建議使用)

[root@localhost ~]# vim /etc/my.cnf
binlog_do_db=             # 數據庫白名單列表
binlog_ignore_db=	  # 數據庫黑名單列表


 (2) 從服務器SQL_THREAD在replay中繼日誌中的事件時,僅讀取與特定數據庫(特定表)相關的事件並應用於本地(會形成網絡及磁盤IO浪費)

[root@localhost ~]# vim /etc/my.cnf
replicate_do_db=          #數據庫白名單列表
replicate_ignore_db=        #數據庫黑名單列表
replicate_do_table=                 #表白名單列表
replicate_ignore_table=             #表黑名單列表
replicate_wild_do_table=            #使用通配符定義表白名單列表
replicate_wild_ignore_table=        #使用通配符定義表黑名單列表


若是須要永久有用須要保存到配置文件中,下面咱們測試在會話級別修改測試實驗

從節點(SLAVE)配置

MariaDB [(none)]> STOP SLAVE;
#關閉複製線程
MariaDB [(none)]> SET GLOBAL replicate_do_db = wlw;
#設置wlw數據庫爲數據庫白名單,只有此數據庫才能同步複製
MariaDB [(none)]> START SLAVE;
#啓動複製線程

MariaDB [(none)]> SHOW SLAVE STATUS\G
              Replicate_Do_DB: wlw
#這裏能夠看到白名單列表

主節點的建立其餘數據庫並在wlw數據庫中插入表或修改數據查看實驗結果

主服務器Mariadb
MariaDB [wlw]> CREATE DATABASE slaves;
Query OK, 1 row affected (0.09 sec)
從服務器Mariadb
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wlw                |
+--------------------+
#能夠看到新建立的slaves數據庫並無複製過來

主服務器Mariadb
MariaDB [wlw]> INSERT INTO tb VALUES (99);
Query OK, 1 row affected (0.03 sec)
從服務器Mariadb
MariaDB [(none)]> SELECT * FROM wlw.tb;
+------+
| id   |
+------+
|    0 |
|   99 |
+------+
#能夠看到,只有對數據庫白名單的操做才能複製,其餘數據庫的任何操做都不進行復制


6、Mariabd基於SSL複製的實現

①、在主服務器上爲CA生成私鑰

[root@localhost ~]# cd /etc/pki/CA/
[root@localhost CA]# touch index.txt
[root@localhost CA]# echo 01 > serial
[root@localhost CA]# (umask 077;openssl genrsa 2048 > private/cakey.pem)

②、生成自簽證書

[root@localhost CA]#[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300

③、主服務器生成證書

[root@localhost CA]# mkdir /var/lib/mysql/ssl
[root@localhost CA]# cd /var/lib/mysql/ssl
[root@localhost ssl]# (umask 077;openssl genrsa 1024 > master.key)
[root@localhost ssl]# openssl req -new -key master.key -out master.csr
[root@localhost ssl]# openssl ca -in master.csr -out master.crt -days 365
[root@localhost ssl]# cp /etc/pki/CA/cacert.pem /var/lib/mysql/ssl/
[root@localhost ssl]# chown -R mysql.mysql /var/lib/mysql/ssl//*
[root@localhost ssl]# ll
總用量 16
-rw-r--r--. 1 mysql mysql 1407 11月  8 12:50 cacert.pem
-rw-r--r--. 1 mysql mysql 3847 11月  8 12:49 master.crt
-rw-r--r--. 1 mysql mysql  696 11月  8 12:48 master.csr
-rw-------. 1 mysql mysql  887 11月  8 12:47 master.key

④、從服務器生成簽署證書

[root@c7node1 ~]# mkdir /var/lib/mysql/ssl
[root@c7node1 ~]# cd /var/lib/mysql/ssl
[root@c7node1 ssl]# (umask 077;openssl genrsa 1024 > slave.key)
[root@c7node1 ssl]# openssl req -new -key slave.key -out slave.csr

⑤、把簽署證書發送到主服務器上,在主服務器上籤署證書後在發給從服務器

[root@c7node1 ssl]# scp ./slave.csr 192.168.88.11:/root

[root@localhost ~]# openssl ca -in slave.csr -out slave.crt -days 360
[root@localhost ~]# scp ./slave.crt 192.168.88.22:/var/lib/mysql/ssl
[root@localhost ~]# cd /etc/pki/CA
[root@localhost CA]# scp ./cacert.pem 192.168.88.22:/var/lib/mysql/ssl

[root@c7node1 ssl]# cd /var/lib/mysql/ssl
[root@c7node1 ssl]# chown -R mysql:mysql /var/lib/mysql/ssl/.*
[root@c7node1 ssl]# ll
total 16
-rw-r--r--. 1 mysql mysql 1407 Nov  8 17:27 cacert.pem
-rw-r--r--. 1 mysql mysql 3842 Nov  8 17:23 slave.crt
-rw-r--r--. 1 mysql mysql  696 Nov  8 17:18 slave.csr
-rw-------. 1 mysql mysql  891 Nov  8 17:17 slave.key

⑥、修改主從的數據庫配置文件

主節點配置
[root@localhost ~]# vim /etc/my.cnf
log_bin = mysql-bin
server_id = 1
innodb_file_per_table = ON
skip-name-resolve = ON

ssl
ssl-ca = /var/lib/mysql/ssl/cacert.pem
ssl-cert = /var/lib/mysql/ssl/master.crt
ssl-key = /var/lib/mysql/ssl/master.key

MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%ssl%';
+---------------+-------------------------------+
| Variable_name | Value                         |
+---------------+-------------------------------+
| have_openssl  | YES                           |
| have_ssl      | YES                           |
| ssl_ca        | /var/lib/mysql/ssl/cacert.pem |
| ssl_capath    |                               |
| ssl_cert      | /var/lib/mysql/ssl/master.crt |
| ssl_cipher    |                               |
| ssl_key       | /var/lib/mysql/ssl/master.key |
+---------------+-------------------------------+
#只要查詢到have_openssl和have_ssl爲YES,表明配置沒有錯,正常開啓了ssl功能

從節點配置
[root@c7node1 ssl]# vim /etc/my.cnf
relay_log = relay-log
server_id = 8
innodb_file_per_table = ON
skip-name-resolve = ON

ssl
ssl-ca = /var/lib/mysql/ssl/cacert.pem
ssl-cert = /var/lib/mysql/ssl/slave.crt
ssl-key = /var/lib/mysql/ssl/slave.key

MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE '%ssl%';
+---------------+-------------------------------+
| Variable_name | Value                         |
+---------------+-------------------------------+
| have_openssl  | YES                           |
| have_ssl      | YES                           |
| ssl_ca        | /var/lib/mysql/ssl/cacert.pem |
| ssl_capath    |                               |
| ssl_cert      | /var/lib/mysql/ssl/slave.crt  |
| ssl_cipher    |                               |
| ssl_key       | /var/lib/mysql/ssl/slave.key  |
+---------------+-------------------------------+

⑦、主上建立ssl連接的用戶

MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'wlw'@'192.168.88.22' IDENTIFIED BY 'wlw' REQUIRE SSL;
#受權只能經過SSL鏈接的帳戶
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 |      245 |              |                  |
+------------------+----------+--------------+------------------+

⑧、從服務器上經過ssl連接主服務器

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.88.11', MASTER_USER='wlw', MASTER_PASSWORD='wlw', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=245,master_ssl=1,master_ssl_ca='/var/lib/mysql/ssl/cacert.pem', master_ssl_cert='/var/lib/mysql/ssl/slave.crt', master_ssl_key='/var/lib/mysql/ssl/slave.key';
MariaDB [(none)]> START SLAVE;

MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.88.11
                  Master_User: wlw
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 577
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 861
        Relay_Master_Log_File: mysql-bin.000003
             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: 577
              Relay_Log_Space: 1149
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: Yes
           Master_SSL_CA_File: /var/lib/mysql/ssl/cacert.pem
           Master_SSL_CA_Path: 
              Master_SSL_Cert: /var/lib/mysql/ssl/slave.crt
            Master_SSL_Cipher: 
               Master_SSL_Key: /var/lib/mysql/ssl/slave.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: 1

⑧、驗證是否使用了ssl加密

[root@c7node1 mysql]# mysql --ssl-ca='/var/lib/mysql/ssl/cacert.pem' --ssl-cert='/var/lib/mysql/ssl/slave.crt' --ssl-key='/var/lib/mysql/ssl/slave.key' -uwlw -h192.168.88.11 -pwlw
MariaDB [(none)]> \s
--------------
mysql  Ver 15.1 Distrib 5.5.41-MariaDB, for Linux (x86_64) using readline 5.1

Connection id:		12
Current database:	
Current user:		wlw@192.168.88.22
SSL:			Cipher in use is DHE-RSA-AES256-GCM-SHA384   #能夠看到是於SSL加密
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server:			MariaDB
Server version:		5.5.41-MariaDB-log MariaDB Server
Protocol version:	10
Connection:		192.168.88.11 via TCP/IP
Server characterset:	latin1
Db     characterset:	latin1
Client characterset:	utf8
Conn.  characterset:	utf8
TCP port:		3306
Uptime:			20 min 1 sec

Threads: 3  Questions: 20  Slow queries: 0  Opens: 0  Flush tables: 2  Open tables: 26  Queries per second avg: 0.016
#因爲SSL相關的配置寫進了配置文件,則默認是加密鏈接的。也可使用--skip-ssl選項取消加密鏈接。


7、複製的監控和維護

①、清理日誌:

MariaDB [(none)]> PURGE BINARY LOGS TO 'mysql-bin.000002';
#只會清理mysql-bin.000002以前的,不會清理mysql-bin.000002
MariaDB [(none)]> PURGE BINARY LOGS BEFORE '2015-11-11 11:11:11';
#只會清理指定時間前的二進制日誌


②、複製監控

MariaDB [(none)]> SHOW MASTER STATUS;
MariaDB [(none)]> SHOW BINLOG EVENTS;
MariaDB [(none)]> SHOW BINARY LOGS
MariaDB [(none)]> SHOW SLAVE STATUS;
MariaDB [(none)]> SHOW PROCESSLIST;


③、從服務器是否落後於主服務:

MariaDB [(none)]> SHOW BINLOG LOGS;
    Seconds_Behind_Master: 0


④、如何肯定主從節點數據是否一致;

  使用工具:percona-tools


⑤、數據不一致如何修復

 以主節點爲準,中止從服務器,刪除數據,備份主服務器數據從新複製;

相關文章
相關標籤/搜索