master 端

配置CA和证书

[root@baseos-1_192.168.31.140 ~]# cd /etc/pki/CA/
#生成根证书的私钥
[root@baseos-1_192.168.31.140 CA]# (umask 077; openssl genrsa 2048 > private/cakey.pem)
***
#生成自签证书
[root@baseos-1_192.168.31.140 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
***
Common Name (eg, your name or your server's hostname) []:master # 自己填写,与下面的一直即可。
***
[root@baseos-1_192.168.31.140 CA]# mkdir certs crl newcerts
[root@baseos-1_192.168.31.140 CA]# touch index.txt
[root@baseos-1_192.168.31.140 CA]# echo 01 > serial #指明证书的开始编号
[root@baseos-1_192.168.31.140 CA]# mkdir -p /data/ssl && cd /data/ssl
#生成key
[root@web4399_smsmq_121.14.36.73 ssl]# (umask 077; openssl genrsa -out master.key 2048)
Generating RSA private key, 2048 bit long modulus
.........+++
...........................................................................+++
e is 65537 (0x10001)
#制作证书申请文件
[root@baseos-1_192.168.31.140 ssl]# openssl req -new -key master.key -out master.csr -days 365
***
Common Name (eg, your name or your server's hostname) []:master
***
#签署证书
[root@baseos-1_192.168.31.140 ssl]# openssl ca -in master.csr -out master.crt -days 3650
***
Sign the certificate? [y/n]:y
***
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@baseos-1_192.168.31.140 ssl]# ll
total 12
-rw-r--r-- 1 root root 3614 Jun 27 16:22 master.crt
-rw-r--r-- 1 root root 623 Jun 27 16:15 master.csr
-rw------- 1 root root 891 Jun 27 16:15 master.key [root@baseos-1_192.168.31.140 ssl]# cp /etc/pki/CA/cacert.pem .
chown -R mysql:mysql /data/ssl/master*
[root@baseos-1_192.168.31.140 ssl]# chown -R mysql:mysql /data/ssl/master*

至此,证书生成完毕,如果签发证书时,遇到如下错误:

[root@baseos-1_192.168.31.140 ssl]# openssl ca -in master.csr -out master.crt -days 3650
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
The mandatory stateOrProvinceName field was missing

修改openssl 配置文件:

[root@baseos-1_192.168.31.140 ssl]# vim /etc/pki/tls/openssl.cnf
***
stateOrProvinceName = optional
organizationName = optional
***

配置mysql

[root@baseos-1_192.168.31.140 ssl]# vim /etc/my.cnf
ssl
ssl-ca=/data/ssl/cacert.pem
ssl-cert=/data/ssl/master.crt
ssl-key=/data/ssl/master.key

重启MySQL之后,查看SSL是否生效

(root@localhost) [(none)] show variables like '%ssl%';
+---------------+----------------------+
| Variable_name | Value |
+---------------+----------------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | /data/ssl/cacert.pem |
| ssl_capath | |
| ssl_cert | /data/ssl/master.crt |
| ssl_cipher | |
| ssl_crl | |
| ssl_crlpath | |
| ssl_key | /data/ssl/master.key |
+---------------+----------------------+
9 rows in set (0.07 sec)

将证书传递的slave端,并授权

[root@baseos-1_192.168.31.140 ssl]# scp -P 22-o StrictHostKeyChecking=no -r cacert.pem master.crt master.key  192.168.31.130:/data/ssl/
[root@baseos-1_192.168.31.140 ssl]# mysql -uroot -p
(root@localhost) [(none)] grant replication slave,replication client on *.* to 'slave_user'@'192.168.31.130' identified by 'slave12346' require X509;
Query OK, 0 rows affected (0.00 sec)

slave 端

[root@baseos-2_192.168.31.130 ~]# chown mysql:mysql -R /data/ssl/*
[root@baseos-2_192.168.31.130 ~]# mysql -uroot -p
(root@localhost) [(none)] stop slave;
Query OK, 0 rows affected (0.00 sec)
(root@localhost) [(none)] CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000022', MASTER_LOG_POS=120 , MASTER_HOST = "192.168.31.140" , MASTER_USER = "slave_user" , master_password = "slave12346" , master_ssl=1,master_ssl_ca='/data/ssl/cacert.pem', master_ssl_cert='/data/ssl/master.crt', master_ssl_key='/data/ssl/master.key';
Query OK, 0 rows affected, 2 warnings (0.01 sec)
(root@localhost) [(none)] start slave;
Query OK, 0 rows affected (0.01 sec)
(root@localhost) [(none)] show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.31.140
Master_User: slave_user
Master_Port: 3306
***
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
***
Master_SSL_Allowed: Yes
Master_SSL_CA_File: /data/ssl/cacert.pem
Master_SSL_CA_Path:
Master_SSL_Cert: /data/ssl/master.crt
Master_SSL_Cipher:
Master_SSL_Key: /data/ssl/master.key
***
1 row in set (0.00 sec)

基于SSL的MySQL主从的更多相关文章

  1. 基于SSL实现MySQL的加密主从复制

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012974916/article/details/53316758 大家都知道MySQL的主从复制 ...

  2. 基于SSL实现Mysql加密主从

    Mysql主从复制是明文传输的,对于一些特殊的场合是绝对不允许的,数据的安全性会受到威胁,在这里,简单的构建基于SSL的mysql主从复制 Ps:这里采用master-mysql为CA服务器 主端生成 ...

  3. 基于Amoba实现mysql主从读写分离

    一.Amoeba简介           Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy.它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特 ...

  4. CentOS 7.2 基于Docker实现MySQL主从架构

    原文地址:https://blog.csdn.net/sunnyfg/article/details/80655823 1.安装Docker(略) Centos7下安装Docker : https:/ ...

  5. mysql -- mysql基于ssl的主从复制

    mysql基于ssl的主从复制由于mysql在复制过程中是明文的,所以就大大降低了安全性,因此需要借助于ssl加密来增加其复制的安全性. 主服务器node1:172.16.200.1从服务器node2 ...

  6. 基于MySql主从分离的代码层实现

    前言   该文是基于上篇<MySQL主从分离的实现>的代码层实现,所以本文配置的主数据库和从数据库的数据源都是在上篇博文中已经介绍了的. 动态选择数据源的配置   由于我们在写数据的时候需 ...

  7. 用 Docker 构建 MySQL 主从环境

    开源Linux 一个执着于技术的公众号 前言 本篇文章记录使用 docker-compose 以及 dockerfile 来构建基于 binlog 的 MySQL 主从环境.如果你严格按照文中的步骤进 ...

  8. 基于mysql主从同步的proxy读写分离

    mysql-proxy 简介 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载 ...

  9. mysql主从之基于mycat实现读写分离

    一 环境 1.1 结构 192.168.132.125 mycat 192.168.132.121  master 192.168.132.122  slave 主从已经配置完成 1.2 安装myca ...

随机推荐

  1. MySQL 基础 备份和恢复

    数据库备份 mysqldump [args] > file_name 例如:备份所有数据库 shell> mysqldump --all-databases > dump.sql # ...

  2. 【Java】-NO.16.EBook.4.Java.1.010-【疯狂Java讲义第3版 李刚】- 异常

    1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.010-[疯狂Java讲义第3版 李刚]- 异常 Style:EBook Series:Java Si ...

  3. MySQL--7MySQL自定义函数

    在函数体的内部可以书写多个sql语句,写多个sql语句的话就称为复合结构

  4. 强力上攻后,缓解期结束,MACD死叉的案例

    eg1.顶部,MACD收紧,缓解期刚过,正好下M5,触发减仓条件

  5. java RE Validation常用

    import java.util.regex.Matcher; import java.ulil.regex.Pattern; public class RegExpUtil { public sta ...

  6. EL的隐含对象(三)【访问环境信息的隐含对象】

    EL中提供了6个访问环境信息的隐含对象.分别是: (1)param对象 param对象用于获取请求参数的值,应用在参数值只有一个的情况.在应用param对象时,返回的结果为字符串. 例:在JSP页面中 ...

  7. Android -- RecyclerView实现左滑删除

    1,在实际项目中我们常常有对一个列表进行滑删除操作,使用我们昨天的ItemTouchHelper其实也可以实现简单的实现这个功能,先来看一下使用ItemTouchHelper来实现的效果: 2,从上面 ...

  8. workerman程序调试

    现象1 启动后报错类似如下: php start.php start PHP Warning: stream_socket_server(): unable to connect to tcp://x ...

  9. tcp_协议基础

    具体7层   数据格式 功能与连接方式 典型设备 应用层 Application 数据Data 网络服务与使用者应用程序间的一个接口 终端设备(PC.手机.平板等) 表示层 Presentation ...

  10. Spark学习之路 (十五)SparkCore的源码解读(一)启动脚本

    一.启动脚本分析 独立部署模式下,主要由master和slaves组成,master可以利用zk实现高可用性,其driver,work,app等信息可以持久化到zk上:slaves由一台至多台主机构成 ...