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)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
win11电脑突然变得很卡怎么办_win11系统卡顿原因及优化方法
上一篇 2025年11月4日 12:55:01
MySQL怎样处理大字段存储 TEXT/BLOB存储与性能平衡
下一篇 2025年11月4日 12:56:02

相关推荐

  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • 修复点击时按钮抖动:CSS垂直对齐实践

    本文探讨了在Web开发中,交互式按钮(如播放/暂停按钮)在点击时发生意外垂直位移的问题。通过分析CSS样式变化对元素布局的影响,我们发现这是由于按钮不同状态下的边框样式和内边距改变,以及默认的垂直对齐行为共同作用所致。核心解决方案是利用CSS的vertical-align属性,将其设置为middle…

    2026年5月10日
    100
  • JavaScript 动态菜单点击高亮效果实现教程

    本教程详细介绍了如何使用 JavaScript 实现动态菜单的点击高亮功能。通过事件委托和状态管理,当用户点击菜单项时,被点击项会高亮显示(绿色),同时其他菜单项恢复默认样式(白色)。这种方法避免了不必要的DOM操作,提高了性能和代码可维护性,确保了无论点击方向如何,功能都能稳定运行。 动态菜单高亮…

    2026年5月10日
    200
  • MySQL数据库不支持中文的解决办法

    接上一篇文章,在解决了mysql+flask环境配置问题之后,往数据库存中文字符串会报1366错误,提示不正确的字符。继而发现默认的mysql采用了latin1字符集,这种编码是不支持中文的。 如果想支持中文的话,需要设置一下mysql字符集。 众所周知utf-8是可以的,gbk也没问题,为了可扩展…

    用户投稿 2026年5月10日
    000
  • Go语言连接外部MySQL数据库:DSN配置与常见错误解析

    本文详细阐述了go语言使用`go-sql-driver/mysql`驱动连接外部mysql数据库的正确方法。重点介绍了数据源名称(dsn)的规范格式,特别是主机地址部分的配置,以避免常见的“getaddrinfow: the specified class was not found.”等网络解析错…

    2026年5月10日
    000
  • php超过字数怎么解密_用PHP分段处理超字数加密数据并解密教程【技巧】

    分段解密超长加密数据需先确定算法限制,再通过OpenSSL扩展支持,编写函数逐段解密并拼接结果。1、明确加密算法与密钥对应的分段大小;2、启用php.ini中openssl扩展并重启服务;3、自定义函数读取私钥、base64解码密文、循环截取块解密;4、确保去除密文换行符并按原加密块大小切分;5、解…

    2026年5月10日
    000
  • Voyager 中关联关系的翻译问题解决方案

    本文档旨在解决在使用 TCGVoyager 管理后台时,关联模型无法正确翻译的问题。主要针对 Laravel 项目中,使用 Voyager 1.4 版本以及 Laravel 8.0 版本,并且已经配置多语言支持的情况下,如何确保关联关系中的可翻译字段能够根据当前应用语言环境进行正确翻译。通过修改 B…

    2026年5月10日
    000
  • 后缀php怎么打开_php文件打开方式与运行环境搭建指南

    要打开PHP文件需根据用途选择方式:查看代码可用文本编辑器或IDE,运行则需服务器环境。推荐新手使用XAMPP、WAMP等集成环境,将文件放入htdocs目录后访问localhost;开发者可利用PHP内置服务器,命令行执行php -S localhost:8000运行;高级用户可手动配置Apach…

    2026年5月10日
    000
  • JS如何操作HTML元素_DOM编程核心方法【教程】

    必须掌握操作HTML元素的核心DOM方法:一、通过ID获取单个元素;二、通过类名获取元素集合;三、通过标签名获取元素集合;四、通过CSS选择器获取元素;五、为元素绑定事件监听器;六、创建并插入新元素;七、替换或删除现有元素。 如果您希望使用JavaScript动态修改网页内容、响应用户交互或构建交互…

    2026年5月10日
    000
  • PHP动态网页数据库备份恢复_PHP动态网页MySQL数据库备份教程

    答案:PHP动态网页的MySQL数据库备份与恢复需通过定期导出SQL文件并安全存储来保障数据安全,核心方法包括使用mysqldump命令行工具实现高效灵活的自动化备份,利用phpMyAdmin图形化工具进行手动导出导入以降低操作门槛,以及通过PHP脚本调用系统命令将备份过程集成到应用中;恢复时可采用…

    2026年5月10日
    000
  • php登录怎么实现_php用户登录系统完整实现

    <blockquote>PHP用户登录系统的核心是安全验证与会话管理。首先创建POST提交的登录表单,避免敏感信息暴露;后端通过session_start()启动会话,使用trim()和htmlspecialchars()清理输入,防止XSS攻击;利用PDO预处理语句查询数据库,防止SQ…

    用户投稿 2026年5月10日
    000
  • 远程MySQL数据库连接指南:从本地PHP应用访问GCP实例数据库

    本文详细指导如何在本地php应用中连接到google cloud platform (gcp) 虚拟机实例上的远程mysql数据库。教程涵盖了数据库连接参数的配置、使用php pdo建立连接的方法、gcp环境下的网络配置要点,以及常见的安全和故障排除建议,旨在帮助开发者顺利实现跨环境的数据库通信。 …

    2026年5月10日
    000
  • 在PHP中实现MySQL数据插入时避免重复记录的策略

    本文将探讨在php应用中向mysql数据库插入数据时,如何有效避免重复记录的产生。针对当主键或唯一索引字段值已存在的情况,我们将介绍使用`insert ignore`语句的策略,以确保数据完整性并防止不必要的重复插入,从而简化数据管理逻辑。 引言:数据完整性与重复记录问题 在数据库管理中,数据完整性…

    2026年5月10日
    000
  • php实现哪些功能

    PHP是一种通用脚本语言,可用来实现广泛的功能,包括:动态Web开发:生成响应用户请求的动态 веб页面。内容管理系统(CMS):构建允许用户管理网站内容的CMS。电子商务:开发具有购物车、订单处理和支付网关集成的电子商务网站。服务器端编程:编写命令行脚本和工具。文件操作:创建、读取、写入和删除文件…

    2026年5月10日
    000
  • 如何通过GitHub API高效获取超过100个用户列表(分页教程)

    本教程旨在解决使用GitHub API获取用户列表时遇到的默认100个用户限制问题。我们将详细介绍两种主要的分页策略:利用Octokit库内置的paginate方法实现自动化分页,以及手动实现基于since参数的循环分页逻辑。文章将提供清晰的代码示例,并强调在不同场景下选择合适方法的注意事项,特别是…

    2026年5月10日
    000
  • PHP 动态 SQL WHERE 子句构建:避免重复 AND 的策略

    本文探讨了在 php 中动态构建 sql 查询 `where` 子句时常见的“`where and`”语法错误及其解决方案。通过逐步构建条件字符串,确保第一个条件不带 `and`,后续条件正确使用 `and` 连接,从而生成符合 sql 规范的查询语句,提高代码的健壮性和可读性。 动态构建 SQL …

    2026年5月10日
    200
  • 创建自动轮播图:JavaScript 实现指南

    创建自动轮播图:JavaScript 实现指南创建自动轮播图:JavaScript 实现指南创建自动轮播图:JavaScript 实现指南创建自动轮播图:JavaScript 实现指南

    本文旨在帮助开发者构建一个自动轮播图,解决手动切换和自动播放的问题。我们将提供完整的 HTML、CSS 和 JavaScript 代码示例,并详细解释实现原理,确保即使是 JavaScript 新手也能轻松掌握。重点在于理解 JavaScript 如何控制轮播图的自动切换和手动控制逻辑,以及如何优化…

    2026年5月10日 用户投稿
    000
  • PHP中基于用户角色的页面访问控制实践

    本教程详细讲解如何在PHP应用程序中利用会话(Session)机制实现基于用户角色的页面访问控制。通过正确的session_start()调用、用户登录时的角色信息存储,以及在受保护页面进行严格的会话和角色类型检查,确保只有特定用户(如“manager”)才能访问指定页面,从而有效防止未经授权的访问…

    2026年5月10日
    100
  • php数据库触发器应用实例_php数据库自动化任务的处理

    通过MySQL触发器与PHP结合,可在数据变更时自动记录日志、校验数据及同步状态。首先创建user_log表并定义AFTER INSERT/UPDATE/DELETE触发器,记录users表的操作信息;随后使用PHP的PDO执行增删改操作,验证日志生成;接着创建BEFORE INSERT触发器限制非…

    2026年5月10日
    000
  • php数据库数据压缩处理_php数据库存储空间优化方法

    可通过启用MySQL行压缩、PHP层数据压缩、优化字段结构及分表归档策略减少存储占用。具体步骤:1. 使用InnoDB压缩表并设置KEY_BLOCK_SIZE;2. PHP中用gzcompress压缩大数据字段,存为BLOB;3. 选用更小数据类型如TINYINT,避免冗余TEXT;4. 将历史数据…

    2026年5月10日
    100

发表回复

登录后才能评论
关注微信