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. DFSORT

    1.1   Outline   I.             Introduction Overview 2.1    What is DFSORT? 2.2    Usage of DFSORT 2 ...

  2. C# List和DataTable的相互转换

    1.List转DataTable /// <summary> /// list to datatable /// </summary> /// <typeparam na ...

  3. 转贴健康资讯:神奇的“XX水”,死了一茬又来一茬?

    神奇的“XX水”,死了一茬又来一茬? 2014年7月20日 京虎子 http://www.scipark.net/archives/19816 最近看到两桩事,一是孕妇防辐射服,一是富氧水.这两桩事合 ...

  4. httpclient get/post请求

    public static String httpPost(String url, JSONObject json) { String respContent = null; try{ HttpPos ...

  5. 第01章 Spring概述

    第01章 Spring概述 1.Spring概述 ①Spring是一个开源框架 ②Spring为简化企业级开发而生,使用Spring,JavaBean就可以实现很多以前要靠EJB才能实现的功能.同样的 ...

  6. ConcurrentLinkedDeque

    import java.util.concurrent.ConcurrentLinkedDeque; /** * ConcurrentLinkedQueue : 是一个适用于高并发场景下的队列,通过无 ...

  7. Hadoop的基础命令

    首次使用Hadoop时,格式化文件系统命令:hdfs namenode -format 启动HDFS:start-dfs.sh 启动YARN:start-all.sh start-all.sh等价于s ...

  8. 英语单词operand

    operand 来源 [root@centos7 ~]# mkdir mkdir: missing operand  缺少操作数,也就是要创建的目录 Try 'mkdir --help' for mo ...

  9. pgrep,pidof工具的使用

    博客pgrep,pidof工具的使用 最灵活:ps 选项 | 其它命令 按预定义的模式:pgreppgrep [options] pattern-u uid: effective user,生效者-U ...

  10. Git使用包括切换分支