MySQL基于SSL安全连接的主从复制怎么实现

生产环境中一台mysql主机存在单点故障,所以我们要确保mysql的高可用性,即两台mysql服务器如果其中有一台mysql服务器挂掉后,另外一台能立马接替其进行工作。

主从复制的原理

        master记录二进制日志,在每个事务更新数据完成之前,master在二日志记录这些改变。存储引擎在二进制日志完成后收到来自主服务器的通知,提交MySQL事务。接下来,slave需要将master的二进制日志复制到自己的中继日志。首先,slave开始一个工作线程——I/O线程,I/O线程在master上打开一个普通的连接,然后开启binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经同步了master,它会睡眠并等待master产生新的事件,I/O线程将这些事件写入中继日志。The final step of this process is handled by the SQL slave thread.。SQL线程会读取中继日志中的事件,并重现这些事件以更新从库的数据,以保持与主库中的数据一致。由于中继日志通常存储在操作系统的缓存中,因此只要该线程与 I/O 线程保持一致,中继日志的开销很少。

环境准备:打开两台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 restartShutting 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-binservice_id=1[root@master ~]# service mysqld restartShutting 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/tcpsuccess[root@master ~]# firewall-cmd --reloadsuccess

6. 把ssl文件复制到slave

[root@master data]# scp ca.pem client-cert.pem client-key.pem root@192.168.8.3:/usr/local/mysql/dataThe 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)? yesWarning: 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=2relay-log=relay-logssl_ca=ca.pemssl_cert=client-cert.pemssl_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 restartShutting 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 连接主服务器试试。

硅基智能 硅基智能

基于Web3.0的元宇宙,去中心化的互联网,高质量、沉浸式元宇宙直播平台,用数字化重新定义直播

硅基智能 62 查看详情 硅基智能

        注意分清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.2mysql: [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 3Server 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 itsaffiliates. Other names may be trademarks of their respectiveowners. 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:3Current database:Current user:rep@192.168.8.3SSL:Cipher in use is ECDHE-RSA-AES128-GCM-SHA256Current pager:stdoutUsing outfile:''Using delimiter:;Server version:5.7.40-log MySQL Community Server (GPL)Protocol version:10Connection:192.168.8.2 via TCP/IPServer characterset:latin1Db     characterset:latin1Client characterset:utf8Conn.  characterset:utf8TCP port:3306Uptime: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> exitBye[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 changedmysql> 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安全连接的主从复制怎么实现的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/272352.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月4日 12:54:42
下一篇 2025年11月4日 12:56:02

相关推荐

发表回复

登录后才能评论
关注微信