MySQL - 基于SSL安全连接的主从复制

这篇具有很好参考价值的文章主要介绍了MySQL - 基于SSL安全连接的主从复制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MySQL - 基于SSL安全连接的主从复制

目录

🍁主从复制的原理

🍁部署master

🍁部署slave

🍁测试SSL主从复制


   🦐博客主页:大虾好吃吗的博客

   🦐MySQL专栏:MySQL专栏地址

        生产环境中一台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,主从成功。

结语:

        SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。复制默认是明文进行传输的,通过SSL加密可以大大提高数据的安全性。文章来源地址https://www.toymoban.com/news/detail-404661.html

到了这里,关于MySQL - 基于SSL安全连接的主从复制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql(九)mysql主从复制

    MySQL的内建功能是构建基于MySQL的大规模,高性能应用的基础,这类应用使用所谓的“水平扩展”的架构。我们可以通过为服务器配置一个或多个从库的方式来进行数据同步,复制功能不仅有利于构建高性能的应用,同时也是高可用,可扩展性,灾难恢复,备份以及数据仓库等

    2024年02月09日
    浏览(42)
  • 基于SSL/TLS双向安全连接设备CA证书认证

    小伙伴儿们,如果觉得文章干货满满,欢迎加入公众号【编程识堂】,更多干货等你们来哦! 设备证书是由CA根证书签发给客户端设备使用的数字证书,用于客户端和服务端连接时,服务端对客户端进行安全认证。认证通过后服务端和客户端可基于证书内的加密密钥进行安全

    2024年01月20日
    浏览(46)
  • MySQL 主从复制

    1、概念介绍 主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。 MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状

    2024年01月22日
    浏览(43)
  • 【MySQL】主从复制

    MySQL是一款关系型数据库,被广泛应用于各种互联网应用中。随着业务的不断扩大,数据量不断增加,如何让MySQL具有更好的可用性和容灾能力成为了越来越重要的问题。本文将重点介绍MySQL主从复制和高可用性的实现,旨在为MySQL的使用者提供指导和帮助。 MySQL主从复制是指

    2024年02月20日
    浏览(42)
  • 6.Mysql主从复制

    读写分离概念: 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATEDELETE),而从数据库处理SELECT查询操作。 数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 读写分离的作用: 因为数据库的“写”( 写10000条数据可能要3分钟)操作

    2024年02月11日
    浏览(42)
  • 详解MySQL主从复制

    目录 1.概述 2.配置使用 2.1.master配置 2.2.slave配置 2.3.认主 2.4.确认认主结果 3.请求分发 3.1.概述 3.2.手动分发 3.2.1.原生JDBC 3.2.2.数据源 3.2.3.中间件 在实际的数据密集型应用中,数据库层面往往呈现两个特点: 单点数据库难以扛得住。 读操作远远多于写操作。 综上所述我们可以

    2024年02月06日
    浏览(33)
  • mysql的主从复制

    主从复制的原理是通过基于日志的复制方式实现数据的同步。当主服务器上发生数据变更时,会将这些变更写入二进制日志(Binary Log)中。从服务器通过连接到主服务器,请求从主服务器获取二进制日志,并将这些日志应用到自己的数据库中。 1. 主服务器生成二进制日志:

    2024年02月15日
    浏览(31)
  • MySQL主从复制详解

    随着业务流量的增长,一台MySQL数据库服务器已经满足不了需求了,会负载过重,容易出现宕机的情况,导致数据的丢失。这个时候就需要实现数据库的负载均衡和读写分离,来减少单台MySQL数据库服务器的压力。我们可以通过使用MySQL内置的复制功能来搭建MySQL一主一从或一

    2024年02月10日
    浏览(39)
  • 【MySQL】主从复制&部署

    SQL 什么是SQL? Structure Query Language(结构化查询语言) 它被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。 数据库管理系统可以通过SQL管理数据库;定义和操作数据,维护数据的完整性和安全性。 优点 简单

    2024年02月08日
    浏览(35)
  • MySQL主从复制(三十五)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、MySQL Replication概述 1.1 MySQL Replication优点: 二、MySQL复制类型 2.1 异步复制(Asynchronous repication) 2.2 全同步复制(Fully synchronous replication) 2.3半同步复制(Semisynchronous replication) 三、

    2024年02月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包