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. Python- 【python无法更新pip】提示python.exe: No module named pip

    用Anaconda安装的python 版本无法更新pip导致不能安装第三方库: 用Anaconda Prompt安装第三方库: python -m pip install --upgrade pip ...

  2. ltp-ddt eth_iperf_tcp iperf dualtest遇到的问题

    ltp-ddt eth_iperf_tcp server端:iperf -s -i 5 -w 1M client端将ddt的核心代码抠出来: iperf -c 1921.68.40.41 -m -M ...

  3. mysql中文乱码解决办法

    Windows 在C:\Program Files\MySQL\MySQL Server 5.5\bin目录下 MySQLInstanceConfig.exe执行 重新配置character_set_ ...

  4. BZOJ5261 Rhyme

    传送门 广义后缀自动机= =+ 跟ptx大爷的博客学的 戳我传送 我写的第一种 建立Trie树的写法 bfs建立SAM 为什么是bfs呢 我也不知道(GG) 经过我一番抱大腿+询问 各位大爷说的原因是 ...

  5. boost timer

    Boost.Timer provides clocks to measure code performance. At first, it may seem like this library com ...

  6. boost location-dependent times

    1. local_date_time #include <boost/date_time/local_time/local_time.hpp> #include <iostream& ...

  7. sqlserver2008锁表语句详解(锁定数据库一个表)

    锁定数据库的一个表 复制代码代码如下: SELECT * FROM table WITH (HOLDLOCK) 注意: 锁定数据库的一个表的区别 复制代码代码如下: SELECT * FROM tab ...

  8. php ord()函数 语法

    php ord()函数 语法 作用:返回字符串的首个字符的 ASCII 值.直线电机生产厂家 语法:ord(string) 参数: 参数 描述 string 必须,要从中获得ASCII值的字符串 说明 ...

  9. paper 159:文章解读:From Facial Parts Responses to Face Detection: A Deep Learning Approach--2015ICCV

    文章链接:https://arxiv.org/pdf/1509.06451.pdf 1.关于人脸检测的一些小小总结(Face Detection by Literature) (1)Multi-vie ...

  10. C# 简单软件有效期注册的实现

    ◆需求:公司一直以来对开发的产品都没有进行使用时间的控制,要么就是将日期限制写死在程序里面,每次都要编译新程序再发给客户,很不方便.于是公司让我写个模块,要求如下:1.无论哪个新开发的程序只要调用这个 ...