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

前言

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

部署配置

实验拓扑

实验环境

系统环境:CentOS6.6

数据库版本:mariadb-5.5.36

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

配置主从复制

安装mariadb

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

提供配置及脚本文件

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

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

主服务器配置

[[email protected] mysql]# mkdir /mydata/binlogs
[[email protected] mysql]# chown -R mysql.mysql /mydata
[[email protected] mysql]# vim /etc/mysql/my.cnf 

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

[[email protected] mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
[[email protected] mysql]# service mysqld start

授权从服务器复制账号

查看二进制日志位置

从服务器配置

[[email protected] mysql]# mkdir /mydata/relaylogs
[r[email protected] mysql]# chown -R mysql.mysql /mydata
[[email protected] 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                         #设置为只读

[[email protected] mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
[[email protected] mysql]# service mysqld start

从服务器连接主服务器

查看从服务器状态

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

主从复制测试

主服务器添加数据

查看从服务器数据及状态

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

实现SSL安全传输

检查SSL状态

配置主服务器为CA

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

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

主服务器生成证书

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

从服务器生成证书请求

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

为从服务器签署证书

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

将CA证书拷到各服务器

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

***权限

[[email protected] ssl]# chown -R mysql.mysql ./
[[email protected] 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

[[email protected] ~]# 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         #指定密钥所在位置

[[email protected] ~]# service mysqld restart

主服务器配置

再次查看SSL状态

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

从服务器配置

从服务器登陆测试

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

查看从服务器状态

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

解决方法:

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

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

#状态都为Yes,问题解决

主从复制测试

主服务器添加数据

从服务器查看数据

主从服务器数据一致,基于ssl复制完成

The end

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

时间: 2024-10-10 14:54:57

MySQL/MariaDB数据库基于SSL实现主从复制的相关文章

mysql基于SSL实现主从复制

mysql数据库基于SSL实现主从复制 实验环境: node1:192.168.4.61 node2:192.168.4.62 CA:192.168.4.63 node1和node2时间同步 [[email protected]~]#ntpdate 172.18.0.1 [[email protected]~]#ntpdate 172.18.0.1 [[email protected]~]#vim /etc/chrony.conf #node1和node2操作一样 [[email protect

MariaDB 10 基于OpenSSL的主从复制

需求架构 准备工作 主从服务器时间同步 # 主从服务器同时配置crontab任务,与NTP服务器同步时间即可 */5 * * * * ntpdate 172.16.0.1 &>/dev/null 部署配置 主库配置 vi /etc/my.cnf server-id = 1 # 在复制架构中,需保持全局唯一 log-bin = mysql-bin # 默认在数据目录下 sync_binlog = 1 # 设置mariadb每次在提交事务前会将二进制日志同步到磁盘,保证服务器崩溃时不会丢失事件

MySQL/MariaDB数据库备份与恢复

前言 数据库一般存放着企业最为重要的数据,它关系到企业业务能否正常运转,数据库服务器总会遇到一些不可抗拒因素,导致数据丢失或损坏,而数据库备份可以帮助我们避免由于各种原因造成的数据丢失或着数据库的其他问题.本文将讲解MySQL/MariaDB数据库的几种备份方法. 基础知识 备份类型 完全备份:备份整个数据库 部分备份:仅备份其中的一张表或多张表 增量备份:仅备份从上次完全备份或增量备份之后变化的数据部分 差异备份:备份上次备份后变化的数据部分,和增量备份区别在于差异备份只可以相对完全备份做备份

MYSQL5.7基于SSL的主从复制

本文档使用的是mysql版本为5.7.22,linux内核为3.10.0-862.el7.x86_64.一.首先主从复制的原理:1.master服务器的binary log(二进制)将用户输入的增删改的SQL语句通过二进制日志记录下来,并通知存储引擎提交事务.2.slave将master的binary log复制到自己的中继日志.首先,slave开启一个工作线程(I/O线程),I/O线程在master打开一个连接,然后开始Binlog dump process.Binlog dump proce

EA逆向生成数据库E-R图(mysql,mariadb数据库-->ER图) v13 及以后的版本处理方式(xjl456852原创)

处理er图需要先将数据库逆向到EA中. 需要电脑上安装mysql 的 odbc可以在官网下载mysql的odbc版本,如果是mariadb的需要下载mariadb的odbc 需要注意,这个EA是32位的软件,一定要下载32位的odbc,否则EA识别不了mysql的驱动. 我安装了mysql odbc驱动32位 下载地址: https://dev.mysql.com/downloads/connector/odbc/ 也可在页面中点击 Looking for the latest GA versi

MySQL 5.7 基于 binlog 的主从复制

MySQL 5.7 基于 binlog 的主从复制 Hostname 内网 IP mysql-master1 172.40.1.117 mysql-slave1 172.40.3.44 mysql-master2 172.40.0.149 mysql-slave2 172.40.5.110 编译安装 MySQL 安装依赖包 yum install -y gcc gcc-c++ cmake ncurses ncurses-devel bison 下载含有 boost 的源码包 wget https

mysql/mariadb基于ssl的主从复制

当mysql/mariadb跨越互联网进行复制时别人可以窃取到mysql/mariadb的复制信息, 这些信息是明文的, 因此存在不安全性, 这里通过ssl对复制的信息进行加密 1. 创建证书中心 在主服务器上创建证书中心 cd /etc/pki/CA 生成私钥 (umask 077;openssl genrsa -out private/cakey.pem 2048) 生成自签名证书 openssl req -new -x509 -key /etc/pki/CA/private/cakey.p

MySQL/MariaDB数据库主从复制

MySQL数据库复制概述 MySQL的主从复制是指从服务器向主服务器获取二进制日志文件,然后在从服务器上对这些日志重新执行,从而使从服务器和主服务器保持同步.但由于是异步的复制,从服务器在一定程度上落后于主服务器,刚写入到主服务器上的数据可能服务在从服务器上查询得到. MySQL的复制原理: (1)从服务器创建I/O线程连接主数据库,向主数据库请求二进制日志文件. (2)主库上启动Binlog Dump,将二进制日志文件发送给I/O线程,I/O线程获取数据后将数据写在从库的中继日志中(relay

MySQL基于SSL的主从复制、半同步复制

(一)主从复制的架构图 1.在主数据库上,每执行一个有可能引起数据库发生改变的的语句,都会记录到二进制日志文件中,并把它们保存为事件. 2.每保存一个事件,我们就通过mysql的服务器3306端口发送给另外一台服务器 3.另外一台服务器把这个事件接收下来,接收的时候先保存到本地的中继日志里面 4.然后,mysql从中继日志文件里读一个事件,然后保存到数据文件 (二)一主多从 半同步架构图 1.Master和Slave-1在同一个机房 2.Slave-2和Slave-3在其它机房 3.半同步指的是