基于SSL实现MySQL的加密主从复制
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012974916/article/details/53316758
大家都知道MySQL的主从复制是明文传输的,这对一些特殊业务来说是不允许的,下面来尝试构建基于SSL的主从复制
环境:RHEL5.8 SELinux关闭,iptables关闭,MySQL 5.5.28-i686 tar包初始化安装(非编译)
规划:
master: 172.16.1.18 master.laoguang.me
slave: 172.16.1.19 slave.laoguang.me
准备工作:hostname与规划一致,配置/etc/hosts做好解析,时间要同步,过程不再赘述,见http://laoguang.blog.51cto.com/6013350/1073891,mysql安装见http://laoguang.blog.51cto.com/6013350/1039208,数据目录为/data/mydata
一.在master上配置CA服务器,并为master,slave颁发证书
1.1 master建立CA服务器,过程见http://laoguang.blog.51cto.com/6013350/1035608
1.2 master的MySQL证书申请
mkdir /data/mydata/ssl
cd /data/mydata/ssl
openssl genrsa 1024 > mysql.key
openssl req -new -key mysql.key -out mysql.csr -days 3650
##接下来的输入与建立CA时的一致,common name为master.laoguang.me
openssl ca openssl ca -in mysql.csr -out mysql.crt ##为MySQL签证
cp /etc/pki/CA/cacert.pem . ##将CA的证书也拷过来
chown mysql:mysql *
chmod 600 *
1.3 slave上申请证书
mkdir /data/mydata/ssl
cd /data/mydata/ssl
openssl genrsa 1024 > mysql.key
openssl req -new -key mysql.key -out mysql.csr -days 3650
##接下来的输入与建立CA时的一致,common name为slave.laoguang.me
scp mysql.csr master:/root
1.4 master上为slave签发
cd /root
openssl ca -in mysql.csr -out mysql.crt
scp mysql.crt slave:/data/mydata/ssl
scp /etc/pki/CA/cacert.pem slave:/data/mydata/ssl
1.5 slave上更改权限与属主
chown mysql:mysql mysql.*
chmod 600 mysql.*
二.Master上编缉/etc/my.cnf启用ssl,并设置主从
2.1 修改/etc/my.cnf
[mysqld]
log-bin=mysql-bin
sync_binlog = 1 ##二进制日志
server-id = 1 ##此id必须全局唯一
innodb_flush_log_at_trx_commit=1 ##每秒将事务日志立刻刷写到磁盘
ssl ##启用ssl默认是不开启的,mysql中show variables like '%ssl%'查看
ssl_ca =/data/mydata/ssl/cacert.pem ##ca文件的位置
ssl_cert= /data/mydata/ssl/mysql.crt ##证书文件的位置
ssl_key = /data/mydata/ssl/mysql.key ##私钥文件的位置
2.2 启动mysql,并查看ssl信息
service mysqld start
mysql
mysql> show variables like '%ssl%';
+---------------+-----------------------------+
| Variable_name | Value |
+---------------+-----------------------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | /data/mydata/ssl/cacert.pem |
| ssl_capath | |
| ssl_cert | /data/mydata/ssl/mysql.crt |
| ssl_cipher | |
| ssl_key | /data/mydata/ssl/mysql.key |
+---------------+-----------------------------+
2.3 为同步建立一最小权限账户,并要求ssl
mysql> create user 'backup_ssl'@'172.16.1.19' identified by 'redhat';
mysql> revoke all privileges,grant option from 'backup_ssl'@'172.16.1.19';
mysql> grant replication slave,replication client on *.* to 'backup_ssl'@'172.16.1.19' require ssl;
mysql> flush privileges;
三.Slave上编缉/etc/my.cnf,启用ssl,并设置主从
3.1 编缉/etc/my.cnf
[mysqld]
server-id = 2 ##此id必须全局唯一
##log-bin = mysql-bin ##注释掉,从服务器不需要二进制日志
relay-log = mysql-ralay ##中继日志
relay-log-index = mysql-ralay.index ##中继目录
read-only = 1 ##从服务器只读
ssl ##启用ssl默认是不开启的,mysql中show variables like '%ssl%'查看
ssl_ca =/data/mydata/ssl/cacert.pem ##ca文件的位置
ssl_cert= /data/mydata/ssl/mysql.crt ##证书文件的位置
ssl_key = /data/mydata/ssl/mysql.key ##私钥文件的位置
3.2 启用mysqld并查看ssl相关信息
servie mysqld start
mysql> show variables like '%ssl%';
+---------------+-----------------------------+
| Variable_name | Value |
+---------------+-----------------------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | /data/mydata/ssl/cacert.pem |
| ssl_capath | |
| ssl_cert | /data/mydata/ssl/mysql.crt |
| ssl_cipher | |
| ssl_key | /data/mydata/ssl/mysql.key |
+---------------+-----------------------------+
3.3 启动slave同步进程,连接主服务器
mysql> change master to
-> master_host='172.16.1.18',
-> master_user='backup_ssl',
-> master_password='redhat',
-> master_log_file='mysql-bin.000001',
-> master_ssl=1,
-> master_ssl_ca='/data/mydata/ssl/cacert.pem',
-> master_ssl_cert='/data/mydata/ssl/mysql.crt',
-> master_ssl_key='/data/mydata/ssl/mysql.key';
mysql> start slave
mysql> show slave status\G; ##查看slave状态
关注以下参数:
Slave_IO_Running: Yes ##IOthread是否运行,如果为No代表slave运行不正常
Slave_SQL_Running: Yes ##SQLthread是否运行,如果为No代表slave运行不正常
Master_SSL_CA_File: /data/mydata/ssl/cacert.pem ##是否启用了ssl
Master_SSL_Cert: /data/mydata/ssl/mysql.crt
Master_SSL_Key: /data/mydata/ssl/mysql.key
Master_Log_File: mysql-bin.000023 ##最后接收的主服务器的二进制
Exec_Master_Log_Pos: 1087 ##最后执行的位置,查看master中是不是该位置
Last_IO_Errno: 0 ##最后一次IOthread有没有报错
如果与上图累似,slave基本正常,下面测试
四.测试
4.1 主服务器上建立一数据库
mysql> create database testssl;
4.2 从服务器上查看有没有同步过去
mysql> show databases;
如果同步成功,说明没有错误
4.3 从服务器mysql基于ssl连接主服务器,查看连接状态是否加密
mysql -ubackup_ssl -predhat -h172.16.1.18 --ssl-cert=/data/mydata/ssl/mysql.crt \
--ssl-key=/data/mydata/ssl/mysql.key
查看连接状态
mysql> status;
Current user: backup_ssl@slave.laoguang.me
SSL: Cipher in use is DHE-RSA-AES256-SHA
由此可知连接是加密的,可以用tcpdump抓包测试
到此基于SSL的mysql主从同步构建完毕,如果你的从服务器是新加的,先将主服务器最近一次的完整备份恢复到从服务器,并从同步完整备份后的二进制日志,即change master时添加master_log_op=n, n代表完整备份后的二进制位置,其它的基本一致。
后记:今天尝试只给slave签发证书,master拥有有CA的证书,理论上应该能成功的,不过就是连接不上,所以暂时放弃,然后尝试master的证书名字为master.crt,slave的证书为slave.crt结果也连不上,后来google,把master与slave的证书,私钥都叫mysql.crt,mysql.key才得以完成,有了解的人说明一下,单证书为何不行,两个证书名称不一致也不行在原因,感谢!
---------------------
作者:紫絮慕雪
来源:CSDN
原文:https://blog.csdn.net/u012974916/article/details/53316758
https://blog.csdn.net/u012974916/article/details/53316758
版权声明:本文为博主原创文章,转载请附上博文链接!
基于SSL实现MySQL的加密主从复制的更多相关文章
- 基于SSL实现Mysql加密主从
Mysql主从复制是明文传输的,对于一些特殊的场合是绝对不允许的,数据的安全性会受到威胁,在这里,简单的构建基于SSL的mysql主从复制 Ps:这里采用master-mysql为CA服务器 主端生成 ...
- 基于SSL的MySQL主从
master 端 配置CA和证书 [root@baseos-1_192.168.31.140 ~]# cd /etc/pki/CA/ #生成根证书的私钥 [root@baseos-1_192.168. ...
- mysql -- mysql基于ssl的主从复制
mysql基于ssl的主从复制由于mysql在复制过程中是明文的,所以就大大降低了安全性,因此需要借助于ssl加密来增加其复制的安全性. 主服务器node1:172.16.200.1从服务器node2 ...
- 基于Mysql-Proxy实现Mysql的主从复制以及读写分离(下)
基于Mysql-Proxy实现Mysql的主从复制以及读写分离(下) 昨天谈到了Mysql实现主从复制,但由于时间原因并未讲有关读写分离的实现,之所以有读写分离,是为了使数据库拥有双机热备功能,至于双 ...
- 基于Mysql-Proxy实现Mysql的主从复制以及读写分离(上)
基于Mysql-Proxy实现Mysql的主从复制以及读写分离(上) 上周BOSS给分配任务让实现一下Mysql数据库的主从复制以及读写分离,然后花了一盏茶的功夫进行了调研,发现主从复制数据库进行一番 ...
- (转) HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手、TCP/IP协议基础、加密学)
HTTP & HTTPS网络协议重点总结(基于SSL/TLS的握手.TCP/IP协议基础.加密学) 原文:http://blog.csdn.net/itermeng/article/detai ...
- 基于SSL加密的vsftpd 服务器搭建和配置
基于SSL加密的VSFTPD 服务器搭建和配置 1.安装 ubuntu系统:apt-get install vsftp lftp centos系统:yum install -y vsftpd ftp ...
- 基于Docker的Mysql主从复制
基于Docker的Mysql主从复制搭建 为什么基于Docker搭建? 资源有限 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐 一台机器上可以运行多个Docker容器 Docker容器之间相 ...
- 基于GTID模式MySQL主从复制
基于GTID模式MySQL主从复制 GTID复制原理:基于GTID的复制是MySQL 5.6后新增的复制方式GTID (global transaction identifier) 即全局事务ID, ...
随机推荐
- python 文件单行循环读取的坑(一个程序中,文件默认只能按行循环读取一次,即使写到另一个循环里,它也只读取一次)
本来写了一个程序,想获取a文件中有,但是b文件中没有的行: 想到的方法是:1.一行一行提取a文件中数据,然后用a文件中的每一行与b文件中的每一行比较, 2.如果找到相同行就继续查找a中的下一行,如果找 ...
- kd树解平面最近点对
早上起来头有点疼,突然就想到能不能用kd树解平面最近点对问题,就找了道题试了一下,结果可以,虽然效率不高,但还是AC了~ 题目链接:http://acm.hdu.edu.cn/showproblem. ...
- CSS重置浏览器所有默认的样式
::-webkit-scrollbar-track-piece { width: 8px; height:8px; background-color: #f0f0f0; /* 背景色 */ } ::- ...
- boost serialization
Archive An archive is a sequence of bytes that represented serialized C++ objects. Objects can be ad ...
- Java Web学习总结(13)Listener监听器
一,监听器介绍 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序 ...
- Java Web学习总结(9)学习总结-JSTL
一,JSTL概述 JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能.jstl出现的目的同el一样也是要代替jsp页 ...
- AcWing 252. 树 (点分治)打卡
题目:https://www.acwing.com/problem/content/254/ 题意:求一棵树上,路径<=k的有多少条 思路:点分治,我们用两个指针算solve函数,首先对算出来的 ...
- 2019 牛客暑期多校 第三场 F Planting Trees (单调队列+尺取)
题目:https://ac.nowcoder.com/acm/contest/883/F 题意:求一个矩阵最大面积,这个矩阵的要求是矩阵内最小值与最大值差值<=m 思路:首先我们仔细观察范围,我 ...
- html中map标签和area标签的应用(总结)
html中map标签和area标签的应用(总结) 一.总结 一句话总结: html中map标签和area标签和组成图片地图,在前端优化中可以减少http请求 1.map标签的用途是什么? 图片地图:是 ...
- Vue&webpack入门实践
目录 1. 下载安装Vue 2. Vue 2.1 Vue要素 2.2 指令 2.3 组件化 2.4 vue-router 3. webpack 3.1 webpack简介 3.2 四个核心概念 3.3 ...