中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL基于SSL安全連接的主從復制怎么實現

發布時間:2023-05-08 18:00:29 來源:億速云 閱讀:142 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“MySQL基于SSL安全連接的主從復制怎么實現”,內容詳細,步驟清晰,細節處理妥當,希望這篇“MySQL基于SSL安全連接的主從復制怎么實現”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    生產環境中一臺mysql主機存在單點故障,所以我們要確保mysql的高可用性,即兩臺MySQL服務器如果其中有一臺MySQL服務器掛掉后,另外一臺能立馬接替其進行工作。

    主從復制的原理

            master記錄二進制日志,在每個事務更新數據完成之前,master在二日志記錄這些改變。MySQL將事務寫入二進制日志,在事件寫入二進制日志完成后,master通知存儲引擎提交事務。 下一步就是slave將master的binary log拷貝到它自己的中繼日志。首先,slave開始一個工作線程——I/O線程,I/O線程在master上打開一個普通的連接,然后開啟binlog dump process。Binlog dump process從master的二進制日志中讀取事件,如果已經同步了master,它會睡眠并等待master產生新的事件,I/O線程將這些事件寫入中繼日志。 SQL slave thread(SQL從線程)處理該過程的最后一步。SQL線程從中繼日志讀取事件,并重放其中的事件而更新slave的數據,使其與master中的數據一致。只要該線程與I/O線程保持一致,中繼日志通常會位于OS的緩存中,所以中繼日志的開銷很小。

    環境準備:打開兩臺MySQL服務器,部署網絡環境。

    MySQL基于SSL安全連接的主從復制怎么實現

    部署master

    1. 主機創建 SSL/RSA 文件

    [root@master ~]# cd /usr/local/mysql/bin/
    [root@master bin]# mysql_ssl_rsa_setup --user=mysql --basedir=/usr/llocal/mysql --datadir=/usr/local/mysql/data

    2. 賦予權限并重啟。

    [root@master bin]# chmod +r /usr/local/mysql/data/server-key.pem 
    [root@master bin]# service mysqld restart
    Shutting down MySQL..                                      [  確定  ]
    Starting MySQL.                                            [  確定  ]

    3. 登錄mysql查看ssl是否開啟,并創建一個復制用戶。

    MySQL基于SSL安全連接的主從復制怎么實現

    注:啟用 mysql 支持 ssl 安全連接主要用于 mysql 主從復制(局域網可以非 ssh 連接即明文復制,但 internet 復制建議采用 ssl 連接)

    mysql> grant replication slave on *.* to rep@'192.168.8.3' identified by '123';
    Query OK, 0 rows affected, 1 warning (0.07 sec)

    4. master開啟二進制日志,重啟后查看二進制日志文件。

    需要注意的是server_id必須唯一。

    [root@master ~]# vim /etc/my.cnf
    #添加下面內容
    log-bin=mysql-bin
    service_id=1
    [root@master ~]# service mysqld restart
    Shutting down MySQL..                                      [  確定  ]
    Starting MySQL.                                            [  確定  ]
    [root@master ~]# mysql -uroot -p123 -e "show master status"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      154 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+

    5. 防火墻配置,實驗環境中可以關閉防火墻,生產環境中需要配置防火墻規則,允許3306端口。

    [root@master ~]# firewall-cmd --permanent --add-port=3306/tcp
    success
    [root@master ~]# firewall-cmd --reload
    success

    6. 把ssl文件復制到slave

    [root@master data]# scp ca.pem client-cert.pem client-key.pem root@192.168.8.3:/usr/local/mysql/data
    The authenticity of host '192.168.8.3 (192.168.8.3)' can't be established.
    ECDSA key fingerprint is SHA256:LFby9KMDz/kkPfOESbeJ7Qh+3hmQaX2W5gkDDMwSGHA.
    ECDSA key fingerprint is MD5:03:32:64:b4:c2:5b:6c:a4:e2:f0:7f:df:7a:35:19:80.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.8.3' (ECDSA) to the list of known hosts.
    root@192.168.8.3's password: 
    ca.pem                             100% 1112   232.5KB/s   00:00    
    client-cert.pem                    100% 1112   240.4KB/s   00:00    
    client-key.pem                     100% 1676   205.0KB/s   00:00

    部署slave

    1. 開啟ssl、中繼日志,賦予ssl文件讀的權限并重啟mysql。

    [root@slave ~]# vim /etc/my.cnf
    #添加下面內容
    server_id=2
    relay-log=relay-log
    ssl_ca=ca.pem
    ssl_cert=client-cert.pem
    ssl_key=client-key.pem
    
    [root@slave ~]# cd /usr/local/mysql/data
    [root@slave data]# ll ca.pem client-cert.pem client-key.pem 
    -rw-r--r--. 1 mysql mysql 1112 3月  31 14:31 ca.pem
    -rw-r--r--. 1 mysql mysql 1112 3月  31 14:31 client-cert.pem
    -rw-------. 1 mysql mysql 1676 3月  31 14:31 client-key.pem
    [root@slave data]# chmod +r client-key.pem
    [root@slave ~]# service mysqld restart
    Shutting down MySQL..                                      [  確定  ]
    Starting MySQL.                                            [  確定  ]

    2. 確認ssl開啟成功

    [root@slave ~]# mysql -uroot -p123 -e "show variables like '%ssl%'"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +-------------------------------------+-----------------+
    | Variable_name                       | Value           |
    +-------------------------------------+-----------------+
    | have_openssl                        | YES             |
    | have_ssl                            | YES             |
    | performance_schema_show_processlist | OFF             |
    | ssl_ca                              | ca.pem          |
    | ssl_capath                          |                 |
    | ssl_cert                            | client-cert.pem |
    | ssl_cipher                          |                 |
    | ssl_crl                             |                 |
    | ssl_crlpath                         |                 |
    | ssl_key                             | client-key.pem  |
    +-------------------------------------+-----------------+

    3. 在配置主從復制之前可以在從 mysql 上用 SSL 連接主服務器試試。

            注意分清IP,8.2是master的IP,可以看到ssl協議Cipher in use is ECDHE-RSA-AES128-GCM-SHA256

    [root@slave ~]# cd /usr/local/mysql/data
    [root@slave data]# mysql --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -u rep -p123 -h 192.168.8.2
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 3
    Server version: 5.7.40-log MySQL Community Server (GPL)
     
    Copyright (c) 2000, 2022, Oracle and/or its affiliates.
     
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
     
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
     
    mysql> 
    mysql> \s
    --------------
    mysql  Ver 14.14 Distrib 5.7.40, for linux-glibc2.12 (x86_64) using  EditLine wrapper
     
    Connection id:		3
    Current database:	
    Current user:		rep@192.168.8.3
    SSL:			Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
    Current pager:		stdout
    Using outfile:		''
    Using delimiter:	;
    Server version:		5.7.40-log MySQL Community Server (GPL)
    Protocol version:	10
    Connection:		192.168.8.2 via TCP/IP
    Server characterset:	latin1
    Db     characterset:	latin1
    Client characterset:	utf8
    Conn.  characterset:	utf8
    TCP port:		3306
    Uptime:			22 min 19 sec
     
    Threads: 1  Questions: 8  Slow queries: 0  Opens: 109  Flush tables: 1  Open tables: 102  Queries per second avg: 0.005
    --------------

    1.登錄slave服務器,配置主從 replicate

    記得先退出連接,登錄slave的mysql服務。

    mysql> exit
    Bye
    [root@slave data]# mysql -uroot -p123
    #省略部分登錄信息
    mysql> change master to
        -> master_host='192.168.8.2',						#masterIP
        -> master_user='rep',								#master用戶
        -> master_password='123',							#master密碼
        -> master_log_file='mysql-bin.000001',				#master二進制日志文件
        -> master_log_pos=154,								#master位置
        -> master_ssl=1,									#masterssl
        -> master_ssl_cert='client-cert.pem',
        -> master_ssl_key='client-key.pem',
        -> master_ssl_ca='ca.pem';
    Query OK, 0 rows affected, 2 warnings (0.07 sec)
     
    mysql> start slave;				#啟用從
    Query OK, 0 rows affected (0.02 sec)

    確認啟用成功。

    MySQL基于SSL安全連接的主從復制怎么實現

    測試SSL主從復制

    1. 登錄master,寫入一些數據

    [root@master ~]# mysql -uroot -p123
    #省略部分內容
    mysql> create database bbs;
    Query OK, 1 row affected (0.01 sec)
     
    mysql> use bbs;
    Database changed
    mysql> create table tb1(id int,
        -> name varchar(20));
    Query OK, 0 rows affected (0.02 sec)
     
    mysql> insert into tb1 values(1,'z3');
    Query OK, 1 row affected (0.02 sec)

    2. 登錄slave,查看數據

    [root@slave ~]# mysql -uroot -p123
    #省略部分內容
    mysql> select * from bbs.tb1;
    +------+------+
    | id   | name |
    +------+------+
    |    1 | z3   |
    +------+------+
    1 row in set (0.01 sec)

    最后可以查看到z3,主從成功。

    讀到這里,這篇“MySQL基于SSL安全連接的主從復制怎么實現”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    炉霍县| 万盛区| 定南县| 甘德县| 怀化市| 云阳县| 平定县| 成安县| 桐梓县| 连州市| 图木舒克市| 穆棱市| 苗栗市| 彭山县| 潮安县| 新宾| 达日县| 华坪县| 封开县| 苍南县| 米泉市| 丹寨县| 深圳市| 图片| 吕梁市| 曲阜市| 丽水市| 新民市| 云霄县| 东城区| 莱州市| 府谷县| 永春县| 星座| 盐城市| 富民县| 南川市| 贵南县| 甘洛县| 利辛县| 信丰县|