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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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服务器,部署网络环境。

部署master

1. 主机创建 SSL/RSA 文件

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

2. 赋予权限并重启。

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

3. 登录mysql查看ssl是否开启,并创建一个复制用户。

注:启用 mysql 支持 ssl 安全连接主要用于 mysql 主从复制(局域网可以非 ssh 连接即明文复制,但 internet 复制建议采用 ssl 连接)

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

4. master开启二进制日志,重启后查看二进制日志文件。

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

1. [root@master ~]# vim /etc/my.cnf
2. #添加下面内容
3. log-bin=mysql-bin
4. service_id=1
5. [root@master ~]# service mysqld restart
6. Shutting down MySQL..                                      [  确定  ]
7. Starting MySQL.                                            [  确定  ]
8. [root@master ~]# mysql -uroot -p123 -e "show master status"
9. mysql: [Warning] Using a password on the command line interface can be insecure.
10. +------------------+----------+--------------+------------------+-------------------+
11. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
12. +------------------+----------+--------------+------------------+-------------------+
13. | mysql-bin.000001 |      154 |              |                  |                   |
14. +------------------+----------+--------------+------------------+-------------------+

5. 防火墙配置,实验环境中可以关闭防火墙,生产环境中需要配置防火墙规则,允许3306端口。

1. [root@master ~]# firewall-cmd --permanent --add-port=3306/tcp
2. success
3. [root@master ~]# firewall-cmd --reload
4. success

6. 把ssl文件复制到slave

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

部署slave

1. 开启ssl、中继日志,赋予ssl文件读的权限并重启mysql。

1. [root@slave ~]# vim /etc/my.cnf
2. #添加下面内容
3. server_id=2
4. relay-log=relay-log
5. ssl_ca=ca.pem
6. ssl_cert=client-cert.pem
7. ssl_key=client-key.pem
8. 
9. [root@slave ~]# cd /usr/local/mysql/data
10. [root@slave data]# ll ca.pem client-cert.pem client-key.pem 
11. -rw-r--r--. 1 mysql mysql 1112 3月  31 14:31 ca.pem
12. -rw-r--r--. 1 mysql mysql 1112 3月  31 14:31 client-cert.pem
13. -rw-------. 1 mysql mysql 1676 3月  31 14:31 client-key.pem
14. [root@slave data]# chmod +r client-key.pem
15. [root@slave ~]# service mysqld restart
16. Shutting down MySQL..                                      [  确定  ]
17. Starting MySQL.                                            [  确定  ]

2. 确认ssl开启成功

1. [root@slave ~]# mysql -uroot -p123 -e "show variables like '%ssl%'"
2. mysql: [Warning] Using a password on the command line interface can be insecure.
3. +-------------------------------------+-----------------+
4. | Variable_name                       | Value           |
5. +-------------------------------------+-----------------+
6. | have_openssl                        | YES             |
7. | have_ssl                            | YES             |
8. | performance_schema_show_processlist | OFF             |
9. | ssl_ca                              | ca.pem          |
10. | ssl_capath                          |                 |
11. | ssl_cert                            | client-cert.pem |
12. | ssl_cipher                          |                 |
13. | ssl_crl                             |                 |
14. | ssl_crlpath                         |                 |
15. | ssl_key                             | client-key.pem  |
16. +-------------------------------------+-----------------+

3. 在配置主从复制之前可以在从 mysql 上用 SSL 连接主服务器试试。

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

1. [root@slave ~]# cd /usr/local/mysql/data
2. [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
3. mysql: [Warning] Using a password on the command line interface can be insecure.
4. Welcome to the MySQL monitor.  Commands end with ; or \g.
5. Your MySQL connection id is 3
6. Server version: 5.7.40-log MySQL Community Server (GPL)
7. 
8. Copyright (c) 2000, 2022, Oracle and/or its affiliates.
9. 
10. Oracle is a registered trademark of Oracle Corporation and/or its
11. affiliates. Other names may be trademarks of their respective
12. owners.
13. 
14. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
15. 
16. mysql> 
17. mysql> \s
18. --------------
19. mysql  Ver 14.14 Distrib 5.7.40, for linux-glibc2.12 (x86_64) using  EditLine wrapper
20. 
21. Connection id:    3
22. Current database: 
23. Current user:   rep@192.168.8.3
24. SSL:      Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
25. Current pager:    stdout
26. Using outfile:    ''
27. Using delimiter:  ;
28. Server version:   5.7.40-log MySQL Community Server (GPL)
29. Protocol version: 10
30. Connection:   192.168.8.2 via TCP/IP
31. Server characterset:  latin1
32. Db     characterset:  latin1
33. Client characterset:  utf8
34. Conn.  characterset:  utf8
35. TCP port:   3306
36. Uptime:     22 min 19 sec
37. 
38. Threads: 1  Questions: 8  Slow queries: 0  Opens: 109  Flush tables: 1  Open tables: 102  Queries per second avg: 0.005
39. --------------
  1. 登录slave服务器,配置主从 replicate

记得先退出连接,登录slave的mysql服务。

1. mysql> exit
2. Bye
3. [root@slave data]# mysql -uroot -p123
4. #省略部分登录信息
5. mysql> change master to
6.     -> master_host='192.168.8.2',            #masterIP
7.     -> master_user='rep',                #master用户
8.     -> master_password='123',              #master密码
9.     -> master_log_file='mysql-bin.000001',       #master二进制日志文件
10.     -> master_log_pos=154,                #master位置
11.     -> master_ssl=1,                  #masterssl
12.     -> master_ssl_cert='client-cert.pem',
13.     -> master_ssl_key='client-key.pem',
14.     -> master_ssl_ca='ca.pem';
15. Query OK, 0 rows affected, 2 warnings (0.07 sec)
16. 
17. mysql> start slave;       #启用从
18. Query OK, 0 rows affected (0.02 sec)

确认启用成功。

测试SSL主从复制

1. 登录master,写入一些数据

1. [root@master ~]# mysql -uroot -p123
2. #省略部分内容
3. mysql> create database bbs;
4. Query OK, 1 row affected (0.01 sec)
5. 
6. mysql> use bbs;
7. Database changed
8. mysql> create table tb1(id int,
9.     -> name varchar(20));
10. Query OK, 0 rows affected (0.02 sec)
11. 
12. mysql> insert into tb1 values(1,'z3');
13. Query OK, 1 row affected (0.02 sec)

2. 登录slave,查看数据

1. [root@slave ~]# mysql -uroot -p123
2. #省略部分内容
3. mysql> select * from bbs.tb1;
4. +------+------+
5. | id   | name |
6. +------+------+
7. |    1 | z3   |
8. +------+------+
9. 1 row in set (0.01 sec)

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

结语:

       SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。复制默认是明文进行传输的,通过SSL加密可以大大提高数据的安全性。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
21天前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
66 13
|
23天前
|
SQL 关系型数据库 MySQL
MySQL数据库连接过多(Too many connections)错误处理策略
综上所述,“Too many connections”错误处理策略涉及从具体参数配置到代码层面再到系统与架构设计全方位考量与改进。每项措施都需根据具体环境进行定制化调整,并且在执行任何变更前建议先行测试评估可能带来影响。
395 11
|
13天前
|
SQL 关系型数据库 MySQL
排除通过IP访问MySQL时出现的连接错误问题
以上步骤涵盖了大多数遇到远程连接 MySQL 数据库时出现故障情形下所需采取措施,在执行每个步骤后都应该重新尝试建立链接以验证是否已经解决问题,在多数情形下按照以上顺序执行将能够有效地排除并修复大多数基本链接相关故障。
103 3
|
27天前
|
SQL 监控 关系型数据库
查寻MySQL或SQL Server的连接数,并配置超时时间和最大连接量
以上步骤提供了直观、实用且易于理解且执行的指导方针来监管和优化数据库服务器配置。务必记得,在做任何重要变更前备份相关配置文件,并确保理解每个参数对系统性能可能产生影响后再做出调节。
178 11
|
1月前
|
存储 关系型数据库 MySQL
修复.net Framework4.x连接MYSQL时遇到utf8mb3字符集不支持错误方案。
通过上述步骤大多数情况下能够解决由于UTF-encoding相关错误所带来影响,在实施过程当中要注意备份重要信息以防止意外发生造成无法挽回损失,并且逐一排查确认具体原因以采取针对性措施解除障碍。
148 12
|
3月前
|
安全 数据建模 应用服务中间件
阿里云SSL证书价格、证书类型及免费版证书申请和证书部署教程参考
阿里云SSL证书有收费版也有免费版,收费版DV域名级SSL类型405元起,免费版证书为DV域名级SSL类型,每个实名个人和企业主体在一个自然年内可以一次性领取20张免费证书。本文为大家详细介绍阿里云SSL证书价格情况,包括不同域名类型、证书类型、证书等级和证书品牌的相关收费标准,以及免费版证书的申请和部署教程参考。
|
7月前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
6月前
|
算法 应用服务中间件 网络安全
阿里云WoSign“国密RSA双SSL证书”应用实践
阿里云WoSign品牌SSL证书是阿里云平台热销的国产品牌证书之一,支持签发国密合规的SM2算法SSL证书以及全球信任的RSA算法SSL证书,能够满足平台用户不同的SSL证书应用需求,同时为用户提供国密模块支持,实现“国密/RSA双证书部署”。
650 6
阿里云WoSign“国密RSA双SSL证书”应用实践
|
6月前
|
算法 安全 应用服务中间件
2025阿里云智惠采购季,WoSign SSL国产证书折上折满减优惠
**2025阿里云“智慧采购季,就上阿里云”活动火热进行中!** 3月1日至31日,阿里云WoSign品牌SSL证书新老用户同享折上折满减优惠。DV SSL证书低至220元/年起,轻松实现HTTPS加密,保障数据传输安全。领取“智惠采购季上云礼包”,先领券再下单,享受满减优惠。WoSign品牌SSL证书国密RSA双算法支持,确保广泛兼容与可靠部署。
821 2
2025阿里云智惠采购季,WoSign SSL国产证书折上折满减优惠
|
6月前
|
运维 安全 网络安全
【运维实战分享】轻松搞定 SSL 证书管理,告别证书繁琐操作
Spug证书平台的最大亮点之一就是其极为简化的证书申请流程,无论是新手还是经验丰富的运维专家,都可以在几分钟内轻松完成证书的申请,通过微信扫码直接登录申请,无需复杂注册,整个过程既方便又快捷。
181 17

推荐镜像

更多