设为首页 收藏本站
查看: 300|回复: 0

[经验分享] 关系型数据库之MySQL基于SSL主从复制及SSL远程访问

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-6-24 09:11:03 | 显示全部楼层 |阅读模式
当mysql跨越互联网进行复制时别人可以窃取到mysql的复制信息,这些信息是明文的,因此存在不安全性,这里通过ssl对复制的信息进行加密。准备环境:
1.系统环境:Centos6.5
2.数据库版本:5.5.36-MariaDB-log MariaDB Server
3.Host:
Master主机: master.samlee.com 172.16.100.7
Slave主机: slave.samlee.com 172.16.100.8
Public主机: public.samlee.com 172.16.100.9
----------------------------------------------------------------------------------------------------------
实现过程如下:
Public主机上操作:
1.创建证书中心:
1
2
3
4
--在public主机上创建证书中心
# cd /etc/pki/CA/
--生成私钥
# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)



生成自签证书,由于需要输入大量用户信息,因此编辑证书的配置文件,在私有的CA上创建证书要注意所有的用户信息要和CA中的一致,从国家到部门都要相同,否则会造成证书无法使用。
1
2
3
4
5
6
7
8
--根据实验要求修改配置文件如下:
# vim /etc/pki/tls/openssl.cnf
[ req_distinguished_name ]
countryName_default             = CN
stateOrProvinceName_default     = GUANGDONG
localityName_default    = GUANGZHOU
0.organizationName_default      = JUST.LTD
organizationalUnitName_default  = IT



生成自签证书--以CAserver的身份自建CA证书
1
2
3
4
5
6
7
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
Country Name (2 letter code) [CN]:
State or Province Name (full name) [GUANGDONG]:
Locality Name (eg, city) [GUANGZHOU]:
Organization Name (eg, company) [JUST.LTD]:
Organizational Unit Name (eg, section) [IT]:
Common Name (eg, your name or your server's hostname) []:public.samlee.com



创建证书编号
1
2
# touch {index.txt,serial}
# echo 01 > serial



给Master服务器生成key、证书请求、证书:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
--创建私钥
# cd /etc/pki/CA/
# (umask 077;openssl genrsa -out master.key 2048)
--生成证书申请
# openssl req -new -key master.key -out master.csr
Country Name (2 letter code) [CN]:
State or Province Name (full name) [GUANGDONG]:
Locality Name (eg, city) [GUANGZHOU]:
Organization Name (eg, company) [JUST.LTD]:
Organizational Unit Name (eg, section) [IT]:
Common Name (eg, your name or your server's hostname) []:master.samlee.com
--在证书服务器上对master的证书进行签发
# 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
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Jun 23 00:09:31 2016 GMT
            Not After : Jun 21 00:09:31 2026 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = GUANGDONG
            organizationName          = JUST.LTD
            organizationalUnitName    = IT
            commonName                = master.samlee.com
Data Base Updated    --看到此项出现说明证书签发成功了



给Slave服务器生成key、证书请求、证书:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
--创建私钥
# cd /etc/pki/CA/
# (umask 077;openssl genrsa -out slave.key 2048)

--生成证书申请
# openssl req -new -key slave.key -out slave.csr
Country Name (2 letter code) [CN]:
State or Province Name (full name) [GUANGDONG]:
Locality Name (eg, city) [GUANGZHOU]:
Organization Name (eg, company) [JUST.LTD]:
Organizational Unit Name (eg, section) [IT]:
Common Name (eg, your name or your server's hostname) []:slave.samlee.com

--在证书服务器上对master的证书进行签发
# openssl ca -in slave.csr -out slave.crt -days 3650
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 2 (0x2)
        Validity
            Not Before: Jun 23 00:18:21 2016 GMT
            Not After : Jun 21 00:18:21 2026 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = GUANGDONG
            organizationName          = JUST.LTD
            organizationalUnitName    = IT
            commonName                = slave.samlee.com
Data Base Updated     --看到此项出现说明证书签发成功了



Master与Slavr主机上操作:
2.在Master主机和Slave主机上安装MariaDB
使用软件安装包为mariadb-5.5.36-linux-x86_64.tar.gz,上传至root目录下,安装配置Mairadb,并设置mydata目录为数据和日志存放目录;以下步骤在node1和node2上一致

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# cd /root
# tar -xzf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local/
# ln -sv mariadb-5.5.36-linux-x86_64 mysql
# groupadd=mysql
# useradd=mysql -g mysql
# mkdir /mydata/{data,binlog,relaylog} -pv
# chown -R mysql.mysql /mydata/*
# mkdir /etc/mysql
# cp /usr/local/mysql/support-files/my-large.cnf /etc/mysql/my.cnf
修改/etc/mysql/my.cnf
# vim /etc/mysql/my.cnf 最后一行增加以下语句
datadir=/mydata
# chown -R mysql.mysql /etc/mysql/*
# echo "export PATH=$PATH:/usr/local/mysql/bin" > /etc/profile.d/mysql.sh
# source /etc/profile.d/mysql.sh
# mkdir /var/lib/mysql/
# chown -R mysql.mysql /var/lib/mysql/
# cd /usr/local/mysql
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# chmod +x /etc/init.d/mysqld
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
# service mysqld restart



Master主机上操作:
3.配置Master主机为主节点(主服务器)
1
2
3
4
5
6
--创建二进制日志存储目录及目录权限授予
# mkdir -pv /mydata/binglogs
# chown -R mysql.mysql /mydata/binglogs
--配置my.cnf设置Master为主节点
server-id       = 1
log-bin=/mydata/binglogs/master-binlog



Slave主机上操作:
4.配置Slave主机为从节点(从服务器)
1
2
3
4
5
6
--创建中继日志存储目录及目录权限授予
# mkdir -pv /mydata/relaylogs
# chown -R mysql.mysql /mydata/relaylogs
--配置my.cnf设置Master为主节点
server-id       = 11
relay-log=/mydata/relaylogs/relay-bin



Master主机上操作:
创建拥有复制权限的用户

1
2
3
4
5
6
7
8
9
--在Master创建拥有复制权限的用户,支持SSL认证,新建一个用户repluser@'172.16.100.%',密码replpass,并授权所有访问权限
MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass' REQUIRE ssl;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> SHOW MASTER STATUS;
+----------------------+----------+--------------+------------------+
| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+--------------+------------------+
| master-binlog.000001 |      684 |              |                  |
+----------------------+----------+--------------+------------------+



5.配置Master主机与Slave主机支持SSL认证

Master主机上操作:
配置Master主机支持SSL认证:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
--创建文件夹用于存放ca证书和Master自己的key+证书
# mkdir /etc/mysql/ssl
--从Public主机获取CA证书及自己的证书
# scp root@172.16.100.9:/etc/pki/CA/private/cakey.pem /etc/mysql/ssl/
# scp root@172.16.100.9:/etc/pki/CA/cacert.pem /etc/mysql/ssl/
# scp root@172.16.100.9:/etc/pki/CA/master.key /etc/mysql/ssl/
# scp root@172.16.100.9:/etc/pki/CA/master.crt /etc/mysql/ssl/
# chown -R mysql.mysql /etc/mysql/ssl
--修改mysql的配置文件,使mysql支持ssl模式
# vim /etc/mysql/my.cnf
ssl  开启SSL功能
ssl-ca = /etc/mysql/ssl/cacert.pem      指定CA文件位置
ssl-cert = /etc/mysql/ssl/master.crt    指定证书文件位置
ssl-key = /etc/mysql/ssl/master.key   指定密钥所在位置
--重启mysql服务
# service mysqld restart
--查询SSL相关变量是否启动
mysql > SHOW GLOBAL VARIABLES LIKE '%ssl%';
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| have_openssl  | YES                       |
| have_ssl      | YES                       |
| ssl_ca        | /etc/mysql/ssl/cakey.pem  |
| ssl_capath    |                           |
| ssl_cert      | /etc/mysql/ssl/master.crt |
| ssl_cipher    |                           |
| ssl_key       | /etc/mysql/ssl/master.key |
+---------------+---------------------------+



Slave主机上操作:
配置Slave主机支持SSL认证:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
--创建文件夹用于存放ca证书和Master自己的key+证书
# mkdir /etc/mysql/ssl
--从Public主机获取CA证书及自己的证书
# scp root@172.16.100.9:/etc/pki/CA/private/cakey.pem /etc/mysql/ssl/
# scp root@172.16.100.9:/etc/pki/CA/cacert.pem /etc/mysql/ssl/
# scp root@172.16.100.9:/etc/pki/CA/slave.key /etc/mysql/ssl/
# scp root@172.16.100.9:/etc/pki/CA/slave.crt /etc/mysql/ssl/
# chown -R mysql.mysql /etc/mysql/ssl
--修改mysql的配置文件,使mysql支持ssl模式
# vim /etc/mysql/my.cnf
ssl  开启SSL功能
ssl-ca = /etc/mysql/ssl/cacert.pem      指定CA文件位置
ssl-cert = /etc/mysql/ssl/slave.crt    指定证书文件位置
ssl-key = /etc/mysql/ssl/slave.key   指定密钥所在位置
--重启mysql服务
# service mysqld restart
--查询SSL相关变量是否启动
mysql > SHOW VARIABLES LIKE '%ssl%';
+---------------+--------------------------+
| Variable_name | Value                    |
+---------------+--------------------------+
| have_openssl  | YES                      |
| have_ssl      | YES                      |
| ssl_ca        | /etc/mysql/ssl/cakey.pem |
| ssl_capath    |                          |
| ssl_cert      | /etc/mysql/ssl/slave.crt |
| ssl_cipher    |                          |
| ssl_key       | /etc/mysql/ssl/slave.key |
+---------------+--------------------------+



6.Slave通过SSL远程连接访问Master主服务器
1
# mysql -urepluser -preplpass -h172.16.100.7 --ssl-ca=/etc/mysql/ssl/cacert.pem --ssl-cert=/etc/mysql/ssl/slave.crt --ssl-key=/etc/mysql/ssl/slave.key



7.Slave以ssl的方式连接数据库,并设置支持主从复制默认
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
mysql > CHANGE MASTER TO MASTER_HOST='172.16.100.7',MASTER_USER='repluser',MASTER_PASSWORD='replpass',master_ssl=1,master_ssl_ca='/etc/mysql/ssl/cacert.pem',master_ssl_cert='/etc/mysql/ssl/slave.crt',master_ssl_key='/etc/mysql/ssl/slave.key',MASTER_LOG_FILE='master-binlog.000005',MASTER_LOG_POS=245;
> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.100.7
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-binlog.000005
          Read_Master_Log_Pos: 245
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 533
        Relay_Master_Log_File: master-binlog.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: 245
              Relay_Log_Space: 821
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: Yes
           Master_SSL_CA_File: /etc/mysql/ssl/cacert.pem
           Master_SSL_CA_Path:
              Master_SSL_Cert: /etc/mysql/ssl/slave.crt
            Master_SSL_Cipher:
               Master_SSL_Key: /etc/mysql/ssl/slave.key
        Seconds_Behind_Master: 0
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



8.Windows下通过“Navicat for MySQL”以ssl的方式连接访问数据库Master主节点服务器
将node1/etc/mysql/ssl下的几个文件存放到windows上,此处我放到我的H盘下ssl目录
注意,在ssl里选择证书和key的时候,需要先点击“使用验证”,等选择完毕后再勾除“使用验证”


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-234435-1-1.html 上篇帖子: CentOS6.5编译安装MySQL 5.7.11 下篇帖子: 配置MySQL数据库 数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表