mysql/mariadb基于ssl的主從復制

 當mysql/mariadb跨越互聯網進行復制時別人可以竊取到mysql/mariadb的復制信息, 這些信息是明文的, 因此存在不安全性, 這里通過ssl對復制的信息進行加密

     1. 創建證書中心

在主服務器上創建證書中心

cd /etc/pki/CA
生成私鑰
(umask 077;openssl genrsa -out private/cakey.pem 2048)

生成自簽名證書
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 7300

創建證書編號
mkdir certs crl newcerts
touch index.txt
echo 00 > serial

      2.  為主服務器創建證書

服務器的名稱必須固定, 在申請證書時要輸入服務器名稱, 這書和服務器名稱對應;

創建私鑰
mkdir /usr/lcoal/mysql/ssl
cd /usr/local/mysql/ssl
(umask 077;openssl genrsa -out /etc/mysql/ssl/master.key 2048)
生成證書申請
openssl req -new -key master.key -out master.csr
在證書服務器上對master的證書進行簽發
openssl ca -in master.csr -out master.crt -days 365

     3. 創建從服務器證書

(umask 077;openssl genrsa -out /etc/mysql/ssl/slave.key 2048)
openssl req -new -key slave.key -out slave.csr
將從服務器的證書申請文件復制到證書服務器上進行簽發
openssl ca -in slave.csr -out slave.crt -days 365

     4. 修改證書權限和mysql配置文件

將證書的公鑰cacert.pem復制到主從服務器的目錄下
cd /etc/mysql/ssl
cp /etc/pki/CA/cacert.pem ./
chown -R mysql.mysql master.crt master.key cacert.pem
chmod 600 master.crt master.key cacert.pem

vim /etc/my.cnf

log-bin=master-log
server-id=1
skip_name_resolve = ON
innodb_file_per_table = ON
ssl
ssl_ca      = /etc/mysql/ssl/cacert.pem
ssl_cert    = /etc/mysql/ssl/master.crt
ssl_key     = /etc/mysql/ssl/master.key

修改從服務器配置 
cd /etc/mysql/ssl
cp /etc/pki/CA/cacert.pem ./
chown -R mysql.mysql slave.crt slave.key cacert.pem
chmod 600 slave.crt slave.key cacert.pem

vim /etc/my.cnf

relay-log=relay-log
server-id=2
skip_name_resolve = ON
innodb_file_per_table = ON
ssl
ssl_ca      = /etc/mysql/ssl/cacert.pem
ssl_cert    = /etc/mysql/ssl/slave.crt
ssl_key     = /etc/mysql/ssl/slave.key

     5. 在主服務上創建復制用戶

MariaDB [(none)]> GTANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'10.1.52.%' IDENTIFIED BY 'replpass' REQUIRE SSL;
MariaDB [(none)]> FLUSH PRIVILEGES;
查看主服務器當前二進制位置
MariaDB [(none)]> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000005 |     7918 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

     6. 在從服務器上開始復制    

MariaDB [(none)]> CHANGE MASTER TO
    -> MASTER_HOST='10.1.52.11',
    -> MASTER_USER='repluser',
    -> MASTER_PASSWORD='replpass',
    -> MASTER_LOG_FILE='master-log.000001',
    -> MASTER_LOG_POS=495,
    -> MASTER_SSL=1,
    -> MASTER_SSL_CA='/etc/mysql/ssl/cacert.pem',
    -> MASTER_SSL_CERT='/etc/mysql/ssl/slave.crt',
    -> MASTER_SSL_KEY='/etc/mysql/ssl/slave.key';
MariaDB [(none)]> START SLAVE;

    7. 查看從服務器的狀態

MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.1.52.11
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-log.000005
          Read_Master_Log_Pos: 7918
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 7940
        Relay_Master_Log_File: master-log.000005
             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: 7918
              Relay_Log_Space: 8228
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: Yes
           Master_SSL_CA_File: /etc/mysql/ssl/cacert.pem
           Master_SSL_CA_Path:
              Master_SSL_Cert: /etc/mysql/ssl/slave.crt
            Master_SSL_Cipher:
               Master_SSL_Key: /etc/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
1 row in set (0.00 sec)

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

(0)
black_fishblack_fish
上一篇 2016-12-05
下一篇 2016-12-05

相關推薦

  • 第七周作業

    1、創建一個10G分區,并格式為ext4文件系統;  (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; [root@localhost ~]# fdisk /dev/sdb #創建10G分區 Welcome to fdisk (util-linux 2.23.2). Changes wi…

    Linux干貨 2017-02-19
  • 搭建discuz服務器

      Discuz是目前比較流行的社區論壇系統,其具有安裝簡便、功能強大的特點,下面以LAMP為基礎平臺來搭建discuz服務器。   一、安裝apache服務   二、安裝php   三、安裝mysql   四、安裝php-mysql   五、啟動mysql服務   六、創建數據庫 &nb…

    Linux干貨 2016-03-18
  • 進程和計劃任務

    1、進程概念 內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等; 進程是運行中的程序的一個副本,是被載入內存的一個指令集合; 進程ID(PID )號碼被用來標記各個進程; UID、GID 和SELinux 語境決定對文件系統的存取和訪問權限,這些權限通常從執行進程的用戶來繼承并且存在生命周期; task struct:Linux內核存…

    Linux干貨 2016-09-13
  • Yacc 與 Lex 快速入門(詞法分析和語法分析)

    Lex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compiler Compiler。 讓我們從 Lex 開始吧。 Lex Lex 是一種生成掃描器的工具。掃描器是一種識別文本中的詞匯模式的程序。 這些詞匯模式(或者常規表達式)在一種特殊的句子結構中定義,這個我們一會兒就要討論。 一種匹配的常規表達式可能會包含相關的動作…

    Linux干貨 2015-06-08
  • 往期學員優秀博客范文,供大家參考結構框架和基本格式要求。

    http://123.57.218.140/16152http://123.57.218.140/15668http://123.57.218.140/9255http://123.57.218.140/16666

    Linux干貨 2016-11-28
  • 軟鏈接,硬鏈接區別

    軟硬鏈接涉及文件系統inode, 區分于inode號,硬鏈接inode號與鏈接文件相同,且創建鏈接不占空間.而軟鏈接占名稱字節個空間,且inode號與鏈接文件不同; 兩者查找inode號命令都可查找inode號,命令為ls -i,如需查找本目錄要加d; 在創建鏈接環境上,硬鏈接只能在同分區創建一個,不能跨分區創建;而軟鏈接可以跨分區創建多個鏈接文件且可以多個…

    Linux干貨 2016-10-20
欧美性久久久久