基于ssl的mysql的主從復制

實驗環境:

system:CentOS Linux release 7.2.1511 (Core)
mariadb server:mariadb-server-5.5.44-2.el7.centos.x86_64
master server:10.1.51.20/16
slave server:10.1.51.30/16
最先安裝mariadb-server
[root@localhost ~]# yum -y install mariadb-server

1、配置SSL

(1)master server上配置根CA

1)生成私鑰文件

[root@localhost ~]# cd /etc/pki/CA/
[root@localhost CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)

2)生成自簽證書

[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out ./cacert.pem -days 365
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:linuxpao
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:www.linuxpao.vip
Email Address []:admin@linuxpao.vip

3)創建所需的輔助文件

[root@localhost CA]# touch index.txt
[root@localhost CA]# echo 01 > serial
[root@localhost CA]# ls
cacert.pem  certs  crl  index.txt  newcerts  private  serial

(2)為master server創建證書

1)創建私鑰

[root@localhost ~]# mkdir /var/lib/mysql/ssl
[root@localhost ~]# cd /var/lib/mysql/ssl/
[root@localhost ssl]# (umask 077;openssl genrsa -out ./master.key 2048)

2)生成證書申請文件

[root@localhost ssl]# openssl req -new -key master.key -out master.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:linuxpao
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:www.linuxpao.vip    
Email Address []:admin@linuxpao.vip 

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

(3)根CA簽發master server的證書申請

[root@localhost ssl]# openssl ca -in master.csr -out master.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Nov 22 02:17:15 2016 GMT
            Not After : Nov 22 02:17:15 2017 GMT
        Subject:
            countryName               = cn
            stateOrProvinceName       = beijing
            organizationName          = linuxpao
            organizationalUnitName    = ops
            commonName                = www.linuxpao.vip
            emailAddress              = admin@linuxpao.vip
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                DC:5E:B2:B7:8F:1D:D0:FC:88:17:F5:01:B7:D7:2F:B0:8E:36:E4:5C
            X509v3 Authority Key Identifier: 
                keyid:23:9E:40:8C:86:1E:4B:58:9D:94:EE:C8:FA:1B:BD:E6:BA:C5:87:C6

Certificate is to be certified until Nov 22 02:17:15 2017 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

[root@localhost ssl]# ls
master.crt  master.csr  master.key

(4)為slave server上的SSL配置

1)生成私鑰

[root@localhost ~]# mkdir /var/lib/mysql/ssl
[root@localhost ~]# cd /var/lib/mysql/ssl/
[root@localhost ssl]# (umask 077;openssl genrsa -out slave.key 2048)

2)創建證書申請

[root@localhost ssl]# openssl req -new -key ./slave.key -out slave.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:linuxpao
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:slave.linuxpao.vip
Email Address []:salve@linuxpao.vip

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

[root@localhost ssl]# scp slave.csr 10.1.51.20:/testdir(將證書申請文件拷貝到master server上)

(5)根CA(master server)上為從服務器簽署證書

[root@localhost testdir]# openssl ca -in slave.csr -out slave.crt -days 365

[root@localhost testdir]# ls
slave.crt  slave.csr

[root@localhost testdir]# scp slave.crt 10.1.51.30:/var/lib/mysql/ssl(將授權的證書拷貝回slave server上)

(6)將master server上的自檢證書拷貝的到各服務器上

[root@localhost ssl]# cd /etc/pki/CA/
[root@localhost CA]# cp cacert.pem /var/lib/mysql/ssl/
[root@localhost CA]# scp cacert.pem 10.1.51.30:/var/lib/mysql/ssl/

(7)在master server上修改證書權限

[root@localhost CA]# cd /var/lib/mysql/ssl
[root@localhost ssl]# chown -R mysql.mysql ./
[root@localhost ssl]# ll
total 20
-rw-r--r--. 1 mysql mysql 1432 Nov 22 10:44 cacert.pem
-rw-r--r--. 1 mysql mysql 4641 Nov 22 10:17 master.crt
-rw-r--r--. 1 mysql mysql 1062 Nov 22 10:14 master.csr
-rw-------. 1 mysql mysql 1679 Nov 22 10:12 master.key

(8)在slave server上修改證書權限

[root@localhost ssl]# chown -R mysql.mysql ./
[root@localhost ssl]# ll
total 20
-rw-r--r--. 1 mysql mysql 1432 Nov 22 10:40 cacert.pem
-rw-r--r--. 1 mysql mysql 4647 Nov 22 10:31 slave.crt
-rw-r--r--. 1 mysql mysql 1062 Nov 22 10:26 slave.csr
-rw-------. 1 mysql mysql 1675 Nov 22 10:24 slave.key

2、配置mariadb server

(1)分別編輯主從服務器的/etc/my.cnf文件

1)master server

在[mysqld]段后面添加如下內容

skip_name_resolve = ON
innodb_file_per_table = ON
log-bin = master-log
server-id = 1
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

2)slave server

在[mysqld]段后面添加如下內容

skip_name_resolve = ON
innodb_file_per_table = ON
relay-log = relay-log
server-id = 2
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

(2)在master server上授權復制的用戶

[root@localhost ~]# systemctl start mariadb.service

[root@localhost ~]# mysql
MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'10.1.51.%' identified by 'replpasswd' require ssl
MariaDB [(none)]> flush privileges;

MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000003 |      761 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

(3)在slave server上指定復制的主機

[root@localhost ssl]# systemctl start mariadb.service

[root@localhost ssl]# mysql

MariaDB [(none)]> change master to
    -> master_host='10.1.51.20',
    -> master_user='repluser',
    -> master_password='replpasswd',
    -> master_log_file='mysql-log.000003',
    -> master_log_pos='761',
    -> 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;

3、測試

1)在master server上可以看到ssl功能開啟

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 |
+---------------+-------------------------------+

2)在slave server上slave復制的狀態

MariaDB [(none)]> show slave status\G
*************************** 1. row ***************************
           Slave_IO_State: Waiting for master to send event
              Master_Host: 10.1.51.20
              Master_User: repluser
              Master_Port: 3306
            Connect_Retry: 60
          Master_Log_File: master-log.000004
      Read_Master_Log_Pos: 245
           Relay_Log_File: relay-log.000002
            Relay_Log_Pos: 530
    Relay_Master_Log_File: master-log.000004
         Slave_IO_Running: Yes
        Slave_SQL_Running: Yes
        ...剪切部分內容...
       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
        ...剪切部分內容...    
         Master_Server_Id: 1

3)在slave server上登錄master server

[root@localhost ssl]# mysql -urepluser -h10.1.51.20 -preplpasswd --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)]> \s
--------------
mysql  Ver 15.1 Distrib 5.5.44-MariaDB, for Linux (x86_64) using readline 5.1

Connection id:      10
Current database:   
Current user:       repluser@10.1.51.30
SSL:            Cipher in use is DHE-RSA-AES256-GCM-SHA384
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server:         MariaDB
Server version:     5.5.44-MariaDB-log MariaDB Server
Protocol version:   10
Connection:     10.1.51.20 via TCP/IP
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:       3306
Uptime:         1 hour 6 min 19 sec

4)在master serve上創建數據庫mydb,然后再slave server上查看

創建

MariaDB [(none)]> create database mydb;
Query OK, 1 row affected (0.02 sec)

查看

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| ssl                |
| test               |
+--------------------+
6 rows in set (0.01 sec)

自此,基于ssl的mysql主從復制的實驗已完成,新手實習,不足之處,望指正。

遇到的問題

問題1

由于粗心在slave server上指定master_host是,將ip地址一個的.號打成,號,導致如下錯誤(使用show slave status\G查看)

基于ssl的mysql的主從復制

解決方法:

1)關閉slave server的slave復制功能

MariaDB [(none)]> stop slave

2)在master server上刷新日志

MariaDB [(none)]> flush logs;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000004 |      245 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.01 sec)

3)在slave server上更新日志文件及位置,并重新啟動

MariaDB [(none)]> change master to master_log_file='master-log.000004',master_log_pos=245;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)

原創文章,作者:pao,如若轉載,請注明出處:http://www.www58058.com/60335

(0)
paopao
上一篇 2016-11-22 11:11
下一篇 2016-11-22 12:38

相關推薦

  • “Apache” 服務器中的戰斗機

    一,apache世界使用排名第一的web服務器軟件。它被音譯為阿帕奇,與武裝直升機里的佼佼者阿帕奇同名,它雖沒有阿帕奇那么霸氣的外觀,但是它具有和它一樣的強大火力,它可以運行在幾乎所有廣泛使用的計算機平臺上,由于其跨平臺和安全性被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠并且可通過簡單的API擴充,將Perl/Python等解釋器編譯到服務器中…

    2017-08-19
  • LVM相關使用

    前言: LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,Linux用戶安裝Linux操作系統時遇到的一個常見的難以決定的問題就是如何正確地評估各分區大小,以分配合適的硬盤空間。普通的磁盤分區管理方式在邏輯分區劃分…

    Linux干貨 2017-08-13
  • 什么是網站流量、UV、PV、IP

    什么是網站流量,什么叫網站流量?     通常說的網站流量(traffic)是指網站的訪問量,是用來描述訪問一個網站的用戶數量以及用戶所瀏覽的網頁數量等指標,常用的統計指標包括網站的獨立用戶數量、總用戶數量(含重復訪問者)、網頁瀏覽數量、每個用戶的頁面瀏覽數量、用戶在網站的平均停留時間等。     …

    Linux干貨 2015-03-20
  • ansible配置詳解

    概述     ansible是一款無需在被管理主機上安裝客戶端,基于SSH對多臺目標主機進行同時操作的輕量級的管理軟件,借助各個內部的功能模塊,實現了批量系統配置、批量程序部署、批量運行命令等功能。本篇就介紹一些關于ansible的基礎配置相關的內容,具體包括:     1、an…

    Linux干貨 2016-11-05
  • Linux之Centos系統的啟動流程詳述

    概述 了解系統的啟動流程,有助于我們了解Linux系統上的一些工作原理,有助于我們深入的理解一個系統的運作方式,那么本篇就以CentOS6系統為例,介紹一下有關Linux系統啟動相關的內容,分為一下幾個部分 1、Linux系統的一些基礎概念 2、CentOS6上的啟動流程概述 第一章 Linux系統的一些基礎概念 Linux系統的組成部分:內核(kernel…

    Linux干貨 2016-09-29
  • 包管理工具rpm和yum的用法

    包管理工具rpm和yum的用法 一、rpm的用法 rpm原本是Rde Hat Linux發行版專門用來管理Linux各項套件的程序,由于它遵循GPL規則且功能強大方便,因而廣受歡迎。逐漸收到其他發行版的采用,RPM套件管理方式的出現,讓Linux易于安裝、升級,間接提升了Linux的適用性。 rpm用法:rpm [OPTION…] 1、rpm安裝…

    Linux干貨 2016-08-24
欧美性久久久久