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

主服务器
node1:172.16.200.1
从服务器
node2:172.16.200.2

在配置ssl前我们先看下一下ssl的状态信息如下图所示

输出DISABLE表示ssl还未开启,只需在/etc/my.cnf文件中加入ssl即可

#vim /etc/my.cnf
[mysqld]
ssl
#service mysqld restart //重启使配置文件生效

配置主从服务的ssl功能
node1(master)
1、配置CA服务器(这里在node1上配置)
# vim /etc/pki/tls/openssl.cnf
dir = /etc/pki/CA

# cd /etc/pki/CA/
# mkdir certs newcerts crl
# touch index.txt
# echo 01 > serial

# (umask 077;openssl genrsa -out private/cakey.pem 1024)
# openssl req -x509 -new -key private/cakey.pem -out cacert.pem -days 365

2、为主服务器node1准备私钥并颁发证书
创建存放证书的目录
# mkdir /usr/local/mysql/ssl
# cd /usr/local/mysql/ssl

创建所需要的证书
# (umask 077;openssl genrsa 1024 > node1.key)
# openssl req -new -key node1.key -out node1.csr
# openssl ca -in node1.csr -out node1.crt -days 365
#cp /etc/pki/CA/cacert.pem /usr/local/mysql/ssl
#chown -R mysql:mysql /usr/local/mysql/ssl

3、为slave上的mysql准备私钥及申请证书
创建存放证书的目录
# mkdir /usr/local/mysql/ssl
# cd /usr/local/mysql/ssl

创建所需要的证书
# (umask 077;openssl genrsa 1024 > node2.key)
# openssl req -new -key node2.key -out node2.csr
#scp ./node2.csr node1:/root

在node1(主服务器)上为 node2(从服务器)签发证书
#openssl ca -in node2.csr -out node2.crt
#cd /usr/local/mysql/ssl
#scp node2.crt /etc/pki/CA/cacert.pem nodes2:/usr/local/mysql/ssl
到此为止证书已经准备完成,请确保node1和node2上有如下文件,并且属主和属组为mysql

在Master即node1上
[root@mynode1 ~]# ll /usr/local/mysql/ssl
total 104
-rw-r--r-- 1 mysql mysql 1103 Aug 9 20:51 cacert.pem
-rw-r--r-- 1 mysql mysql 3047 Aug 9 20:40 node1.crt
-rw-r--r-- 1 mysql mysql 639 Aug 9 20:35 node1.csr
-rw------- 1 mysql mysql 887 Aug 9 20:34 node1.key

在Slave即node2上
[root@mynode1 ~]# ll /usr/local/mysql/ssl
total 104
-rw-r--r-- 1 mysql mysql 1103 Aug 9 20:51 cacert.pem
-rw-r--r-- 1 mysql mysql 3047 Aug 9 20:40 node2.crt
-rw-r--r-- 1 mysql mysql 639 Aug 9 20:35 node2.csr
-rw------- 1 mysql mysql 887 Aug 9 20:34 node2.key

4、修改配置文件
# vim /etc/my.cnf
服务器node1:
[mysqld]
skip-slave-start=1 //设置重启服务不自动开启线程,需要手动开启

ssl //指定ssl,CA信息
ssl-ca=/usr/local/mysql/ssl/cacert.pem
ssl-cert=/usr/local/mysql/ssl/node1.crt
ssl-key=/usr/local/mysql/ssl/node1.key

log-bin=mysql-bin
relay-log=mysql-relay //开启中继日志
auto-increment-increment = 2 //每次ID加2
auto-increment-offset = 1 //设置起始自动增长
server-id = 10

服务器node2:
skip-slave-start=1
ssl
log-bin=mysql-bin
relay-log=mysql-relay
server-id = 20

5、重启后生效并查看有关ssl的信信息,在node1上进行操作
# service mysqld restart
mysql> show variables like '%ssl%';

6、在node1上创建具有复制权限的用户并授权给从服务器
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repluser@'172.16.200.%' IDENTIFIED BY '1234' REQUIRE SSL;
mysql> flush privileges;

7、查看自己的master状态信息并记录
服务器node1
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.00005 | 107 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec

8、配置slave,在配置之前需要说明一下,如果已经启动slave,并配置过slave信息的,需要先停止slave并删除配置的slave。
在node2上配置slave:
mysql> CHANGE MASTER TO MASTER_HOST = '172.16.200.1' ,
-> MASTER_USER = 'repluser' ,
-> MASTER_PASSWORD = '1234' ,
-> MASTER_LOG_FILE = 'mysql-bin.00005' ,
-> MASTER_LOG_POS = 107 ,
-> MASTER_SSL = 1 ,
-> MASTER_SSL_CA = '/usr/local/mysql/ssl/cacert.pem' ,
-> MASTER_SSL_CERT = '/usr/local/mysql/ssl/node2.crt' ,
-> MASTER_SSL_KEY = '/usr/local/mysql/ssl/node2.key';

9、配置完成后,启动slave并查看信息如下
mysql>start slave;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.200.1
Master_User: repluser
Master_Port: 3306
connect_Retry: 60
Master_Log_file: mysql-bin.000005
Read_Master_Log_Pos: 107
Relay_Log_file: relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_file: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
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: 608
Relay_Log_Space: 403
Until_condition: None
Until_Log_file:
Until_Log_Pos: 0
Master_SSL_Allowed: Yes
Master_SSL_cA_file: /usr/local/mysql/ssl/cacert.pem
Master_SSL_cA_Path:
Master_SSL_cert: /usr/local/mysql/ssl/node2.crt
Master_SSL_cipher:
Master_SSL_Key: /usr/local/mysql/ssl/node2.key
Seconds_Behind_Master: 2132
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

到此为止基于ssl的mysql主从复制已经配置成功。

10、测试ssl是否生效
在从服务器Slave即node2上:
使用repluser用户登录mysql
#mysql --ssl-ca=/usr/local/mysql/ssl/cacert.pem \
--ssl-cert=/usr/local/mysql/ssl/node2.crt \
--ssl-key=/usr/local/mysql/ssl/node2.key -urepluser -h172.16.200.1 -p1234
mysql> \s
--------------
mysql Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (i386) using readline 5.1

connection id: 3
current database:
current user: repluser@172.16.200.1
SSL: cipher in use is DHE-RSA-AES256-SHA
current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.5.19-log MySQL community Server (GPL)
Protocol version: 10
connection: 172.16.200.1 via TcP/IP
Server characterset: latin1
Db characterset: latin1
client characterset: latin1
conn. characterset: latin1
TcP port: 3306
Uptime: 8 min 18 sec

Threads: 3 Questions: 20 Slow queries: 0 Opens: 33 Flush tables: 1 Open tables: 26 Queries per second avg

输出信息:
SSL: cipher in use is DHE-RSA-AES256-SHA

参考文章: http://blog.51cto.com/sxhxt/960352

专注事业!
分类: 数据库
好文要顶
关注我
收藏该文

0
0
 

« 上一篇:mysql -- 指定部分库和表同步
» 下一篇:mysql -- MySQL 5.6 升级到 5.7

come from:https://www.cnblogs.com/pengai/articles/7998077.html

mysql -- mysql基于ssl的主从复制的更多相关文章

  1. mysql/mariadb基于ssl的主从复制

    当mysql/mariadb跨越互联网进行复制时别人可以窃取到mysql/mariadb的复制信息, 这些信息是明文的, 因此存在不安全性, 这里通过ssl对复制的信息进行加密 1. 创建证书中心 在 ...

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

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

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

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

  4. percona mysql server5.7基于gtid的主从复制

    配置mysql基于gtid主从复制架构 一.二进制安装mysql [root@node5 data]# --Linux.x86_64.ssl101.tar.gz [root@node5 data]# ...

  5. 实现mysql的读写分离(mysql-proxy)____1(mysql的主从复制,基于gtid的主从复制,半同步复制,组复制)

    主从复制原理: 从库生成两个线程,一个I/O线程,一个SQL线程: i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中:主库会生成一个 log ...

  6. mysql主从之基于gtid的主从复制

    一 GITD介绍 1.1 gtid的含义 Global Transaction Identifier,全局事务标识 阿里云的rds目前已经使用gtid 基于gtid的主从复制原理 每个mysql数据库 ...

  7. linux下mysql基于mycat做主从复制和读写分离之基础篇

    Linux下mysql基于mycat实现主从复制和读写分离1.基础设施 两台虚拟机:172.20.79.232(主) 172.20.79.233(从) 1.1软件设施 mysql5.6.39 , my ...

  8. 基于SSL的MySQL主从

    master 端 配置CA和证书 [root@baseos-1_192.168.31.140 ~]# cd /etc/pki/CA/ #生成根证书的私钥 [root@baseos-1_192.168. ...

  9. MySQL 5.7基于GTID的主从复制环境搭建(一主一从)

      Preface       As wel all know,replication base on GTID with row format of binary log is comprehens ...

随机推荐

  1. 使用eclipse创建Spring Boot项目

    环境介绍 1.jdk1.8 2.eclipse 3.maven 3.5.0 创建项目 eclectic 左上角 file -> new -> maven project 出现下图默认就好, ...

  2. Linux系统理解以及Linux系统学习心得

    原创作品转载请注明出处  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 作者:严哲璟 说一下我对Lin ...

  3. windows和mtu值修改

    前言 有时候我们需要修改mtu值来对付乱七八糟的网络问题 windows修改方法 1.netsh interface ipv4 show subinterfaces 查询到目前系统的MTU值 2.ne ...

  4. mysql 联合表查询从表即使有索引依然ALL的一个原因

    那就是主表和从表的关联字段的编码方式不一样!!! 晕啊,折腾了半天才发现,可能是不知道啥时候mysql更改主体编码方式了,结果导致后来新建的表的关联字段和之前的主表的字段的编码方式不一样 改成一样的编 ...

  5. 给mysql一百万条数据的表添加索引

    直接alter table add index 添加索引,执行一个小时没反应,并且会导致锁表:故放弃该办法,最终解决办法如下: 一.打开mysql 命令行客户端 这里我们那可以看到导出的数据文件所存放 ...

  6. 小程序之背景音乐——wx.backgroundAudioManager

    var that = this; const back = wx.getBackgroundAudioManager(); back.onPlay(() => { console.log(&qu ...

  7. Go 迭代切片

    迭代切片有两种方式: 1. 使用 for range 迭代切片   // 其长度和容量都是 4 个元素 slice := [], , , } // 迭代每一个元素,并显示其值 for index, v ...

  8. HTML知识梳理(笔记)

    HTML常见元素 meta 定义和用法<meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. <meta> 标 ...

  9. java-设计原则

    七大设计原则 单一职责原则: 尽可能的功能细分(类细分,方法细分):如一个类由于某变量而细分方法,该细分方法再细分,需要重构(最好细分类) 接口隔离原则:(C类实现A接口全部方法,而D,B类依赖于A接 ...

  10. DELPHI 10 SEATTLE 在OSX上安装PASERVER

    旧版本的DELPHI在安装目录下里的PASERVER目录有安装文件,但奇怪在这个SEATTLE上的PASERVER目录下只有一个EXE程序的安装程序​​,显然不能安装到OSX里,需要在Embarcad ...