mysql 基于 ssl 的主从复制

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

1、创建证书中心

创建证书颁发机构,首先要生成ca自己的私钥,如下:

cd /etc/pki/CA

(umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

生成自签证书,由于需要输入大量用户信息(在私有的CA上创建证书要注意所有的用户信息需要一致,从国家到部门都要相同,否则会造成证书无法使用)

生成自签名证书

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650

-x509是创建自签证书是需要的参数,在创建其他证书时不能加该参数

然后创建ca所需文件,如下:

cd /etc/pki/CA

touch index.txt

echo 01 > serial


2、为master服务器创建证书

服务器的名称必须固定,在申请证书时要输入服务器的通用名称,此通用名称必须与服务器外网申请的域名相同。

创建私钥

mkdir /home/mysql/

cd /home/mysql

(umask 077;openssl genrsa -out master.key 2048)

生成证书申请文件

openssl req -new -key master.key -out master.csr

在证书服务器上对master的证书进行签发

cd /etc/pki/CA

openssl ca -in /home/mysql/master.csr -out /home/mysql/master.crt -days 365


3、创建slave服务器证书

(umask 077;openssl genrsa -out slave.key 2048)

 openssl req -new -key slave.key -out slave.csr

将slave服务器的证书申请文件复制到证书服务器上进行签发

opessl ca -in slave.csr -out slave.crt -days 356


4、修改证书权限和mysql配置文件

将ca的证书cacert.pem复制到master、slave服务器的相应目录下

 cd /home/mysql

 cp /etc/pki/CA/cacert.pem ./

 chown -R mysql:mysql /home/mysql

 chmod 600 /home/mysql/*.key

修改master服务器的/etc/my.cnf配置文件:

 vim /etc/my.cnf

 [mysqld]

 ssl_ca                  = /home/mysql/cacrt.pem

 ssl_cert                = /home/mysql/master.crt

 ssl_key                 = /home/mysql/master.key


修改slave服务器配置

vim /etc/my.cnf

 [client]

 ssl_ca                  = /home/mysql/cacrt.pem

 ssl_cert                = /home/mysql/slave.crt

 ssl_key                 = /home/mysql/slave.key



5、在主服务器上创建复制用户

> grant replication slave on *.* to 'repl'@‘192.168.%' identified by 'repl' require ssl;

flush privileges;


查看主服务器当前二进制位置

mysql> show master status ;

 +————————-+————+———————+————————–+————————–+

 | File                            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

 +————————-+————+———————+————————–+————————–+

 | mysql-bin.000007 |     1015   |                              |                                    |                                    |

 +————————-+————+———————+————————–+—————————+

 1 row in set (0.00 sec)


6、在从服务器上开始复制

 change master to

 master_host=‘192.168.0.66',

 master_user='repl',

 master_password='repl',

 master_log_file='mysql-bin.000007',

 master_log_pos=1015,

 master_ssl=1,

 master_ssl_ca='/home/mysql/cacrt.pem',

 master_ssl_cert='/home/mysql/slave.crt',

 master_ssl_key='/home/mysql/slave.key';

 start slave;

 show slave status;



排错

导致lave_IO_Running 为connecting 的原因主要有以下 3 个方面:  

  • 网络不通

  • 密码不对

  • pos不对

解决步骤:

  • 对于第一个问题,一般情况下都是可以排除的,也是最容易排除的。

  • 在主库上修改用来复制的用户的密码。

  • 在做chang to 的时候注意log_pos 是否跟此时主机的相同

    在主机上 show master status \G ;可以查看到



8 线上实例

服务器端配置如下:

[ec2-user@vps1 ~]$ cat /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mysqld according to the

# instructions in http://fedoraproject.org/wiki/Systemd

skip_name_resolve


open_files_limit=8192

#ssl configure

ssl_ca=/home/mysql/cacert.crt

ssl_cert=/home/mysql/mysql.crt

ssl_key=/home/mysql/mysql.key


log-bin=mysql-bin

expire_logs_days=5

server-id=1

replicate-ignore-db=mysql

replicate-ignore-db=zabbix


slow_query_log_file=/var/log/mysql/slow.log

log_queries_not_using_indexes=1

long_query_time=5


innodb_file_per_table=1

innodb_buffer_pool_size=64M


log_slave_updates

relay-log=relay-bin

relay-log-space-limit=512000000

slave-net-timeout=360


[mysql]

default_character_set=utf8


[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid


[ec2-user@vps1 ~]$ ll /home/mysql/

总用量 16

-rw-r--r-- 1 mysql mysql 1318 6月  23 06:09 cacert.crt

-rw-r--r-- 1 mysql mysql 3715 6月  23 06:05 mysql.crt

-rw-r--r-- 1 mysql mysql  651 6月  23 06:03 mysql.csr

-rw------- 1 mysql mysql  891 6月  23 06:02 mysql.key

[ec2-user@vps1 ~]$


slave端配置如下:

[ec2-user@vps2 ~]$ cat /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mysqld according to the

# instructions in http://fedoraproject.org/wiki/Systemd

skip_name_resolve


open_files_limit=8192

#ssl configure

ssl_ca=/home/mysql/cacert.crt

ssl_cert=/home/mysql/mysql.crt

ssl_key=/home/mysql/mysql.key


log-bin=mysql-bin

expire_logs_days=5

server-id=2

replicate-ignore-db=mysql

replicate-ignore-db=zabbix


slow_query_log_file=/var/log/mysql/slow.log

log_queries_not_using_indexes=1

long_query_time=5


innodb_file_per_table=1

innodb_buffer_pool_size=64M


log_slave_updates

relay-log=relay-bin

relay-log-space-limit=512000000

slave-net-timeout=360


[mysql]

default_character_set=utf8


[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid


[client]

ssl_ca=/home/mysql/cacert.crt

ssl_cert=/home/mysql/mysql.crt

ssl_key=/home/mysql/mysql.key

[ec2-user@vps2 ~]$


mysql> show slave status \G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.0.66

                  Master_User: repl

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000001

          Read_Master_Log_Pos: 259

               Relay_Log_File: relay-bin.000002

                Relay_Log_Pos: 253

        Relay_Master_Log_File: mysql-bin.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB:

          Replicate_Ignore_DB: mysql,zabbix

           Replicate_Do_Table:

       Replicate_Ignore_Table:

      Replicate_Wild_Do_Table:

  Replicate_Wild_Ignore_Table:

                   Last_Errno: 0

                   Last_Error:

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 259

              Relay_Log_Space: 403

              Until_Condition: None

               Until_Log_File:

                Until_Log_Pos: 0

           Master_SSL_Allowed: Yes

           Master_SSL_CA_File: /home/mysql/cacert.crt

           Master_SSL_CA_Path:

              Master_SSL_Cert: /home/mysql/mysql.crt

            Master_SSL_Cipher:

               Master_SSL_Key: /home/mysql/mysql.key

        Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 0

                Last_IO_Error:

               Last_SQL_Errno: 0

               Last_SQL_Error:

  Replicate_Ignore_Server_Ids:

             Master_Server_Id: 1

1 row in set (0.00 sec)

mysql>










本文转自 meteor_hy 51CTO博客,原文链接:http://blog.51cto.com/caiyuanji/1792321,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
235
分享
相关文章
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
128 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
MySQL 主从复制
主从复制是 MySQL 实现数据冗余和高可用性的关键技术。主库通过 binlog 记录操作,从库异步获取并回放这些日志,确保数据一致性。搭建主从复制需满足:多个数据库实例、主库开启 binlog、不同 server_id、创建复制用户、从库恢复主库数据、配置复制信息并开启复制线程。通过 `change master to` 和 `start slave` 命令启动复制,使用 `show slave status` 检查同步状态。常见问题包括 IO 和 SQL 线程故障,可通过重置和重新配置解决。延时原因涉及主库写入延迟、DUMP 线程性能及从库 SQL 线程串行执行等,需优化配置或启用并行处理
107 40
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
248 11
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
160 14
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
145 24
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
274 0
Mysql中搭建主从复制原理和配置
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
406 1
MySQL主从复制原理和使用
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
278 1
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
208 1
分析MySQL主从复制中AUTO_INCREMENT值不一致的问题
通过对 `AUTO_INCREMENT`不一致问题的深入分析和合理应对措施的实施,可以有效地维护MySQL主从复制环境中数据的一致性和完整性,确保数据库系统的稳定性和可靠性。
164 6

热门文章

最新文章