mysql主从备份 ssl_MySQL DB 主从复制之SSL

需求架构

074ec97099347056e5519a820800ea44.png

准备工作

主从服务器时间同步

# 主从服务器同时配置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每次在提交事务前会将二进制日志同步到磁盘,保证服务器崩溃时不会丢失事件=====service mysqld start # 启动mariadb10=====mysql-hlocalhost -uroot -p # 登录mysql

MariaDB [mysql]> grant replication slave,replication client on *.* to 'repluser'@'172.16.%.%' identified by 'replpass'; # 创建最小权限的复制账号

MariaDB [mysql]>flush privileges;

MariaDB [mysql]> show master status; # 查看主库的状态信息

1f2346d69f02a3fee1da6cb20ef20dc3.png

从库配置

vi /etc/my.cnf

server-id = 11# 在复制架构中,需保持全局唯一

log-bin = mysql-bin # 也可设置为none,即关闭从库的二进制日志

relay-log=/data/relaylogs/relay-bin # 设置中继日志文件

log-slave-updates = 1# 允许从库将其重放的事件也记录到自身的二进制日志中

read_only= 1# 从库设置为只读=====service mysqld start # 启动mariadb10=====mysql-hlocalhost -uroot -p # 登录mysql

MariaDB [mysql]> change master to master_host='172.16.251.123',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000005',master_log_pos=379; # 连接主库

MariaDB [mysql]>start slave;

MariaDB [mysql]> show slave status\G 查看从库状态

2de2333d0fbe106860604ed79c7c1bc0.png

验证

# 在主库上新建数据库并创建数据

MariaDB [(none)]>create database test_for_replication;

MariaDB [(none)]> create table test_for_replication.user(id int not null primary key auto_increment,name char(20) not null,year int not null,classid int not null);

MariaDB [(none)]> insert into test_for_replication.user(name,year,classid) values('Jason Kk',23,2),('Hello Kitty',18,1);

# 查看从库能否正常同步数据

MariaDB [(none)]> select *from test_for_replication.user; # 见下图1

MariaDB [(none)]> show slave status\G # 见下图2

图1

62d5c1957a05f5ac02d6ab3d07ed8bcf.png

图2

691847d0af48866b5aa343ec7dfc680b.png

可以看出主从同步正常,数据无误!

基于SSL进行安全复制

30ff89c5d0bd1d004131dd2d365c3d06.png

生成SSL证书及私钥

主从服务器都需要获得各自的证书,具体步骤详见“图解openssl实现私有CA”

主库和从库各需的证书文件有:

c3c884a86eaaaed1f7173c0d463e23e3.png

主库配置

SSL支持状态检查:

1e92bdc5875c43352a2b60b5d438d314.png

若have_ssl的值为YES,则表明SSL功能已开启使用;

若have_ssl的值为NO,则说明SSL功能并未编译进目前的Mariadb,需要重新编译程序;

若have_ssl的值为DISABLED,则表示mariadb编译时加载了SSL功能,但未启用,一般以通用二进制程序安装的Mariadb都是此值;

查看库文件:

ldd `which mysqld` | grepssl # 还需查看是否存在libssl.so文件,若不存在,则说明缺少库文件

# 麻烦的是若要安装此缺少的库文件,则需安装libopenssl.1.0.0的程序包,但这个包的安装依赖于glibc2.14版本,而CentOS6.5系统上原生的是glibc2.12版本的,这下就又涉及glibc的升级了,过于麻烦了,而且也很危险,故放弃之

# 那么就只能重新编译安装mariadb10了,从官网下载最新版的源码包安装吧(www.mariadb.com)

Mariadb编译安装完成后,就可以配置基于SSL的安全复制了

chown -R mysql.mysql /etc/master/ssl/# 注意修改认证相关文件的权限=====

vi /etc/my.cnf # 在mysqld段下添加如下内容

[mysqld]

ssl_ca= /etc/master/ssl/cacert.pem # 配置CA证书

ssl_cert= /etc/master/ssl/master.crt # 配置主库证书

ssl_key= /etc/master/ssl/master.key # 配置主库私钥

ssl_cipher= DHE-RSA-AES256-SHA # 指定支持的加密算法=====service mysqld reload # 重载配置=====# 再次查看相关变量:

MariaDB [(none)]> show variables like '%ssl%'# 见下图

# 创建复制账户:

MariaDB [mysql]> grant replication slave,replication client on *.* to 'repluser'@'172.16.%.%' identified by 'replpass' reuire ssl; # 特别明确必须通过SSL才能复制

9404bf6079010ffd7dbddad978589cca.png

从库配置

chown -R mysql.mysql /etc/slave/ssl/

=====MariaDB [mysql]> change master to master_host='172.16.251.123',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000010',master_log_pos=776,master_ssl=1,master_ssl_ca='/etc/slave/ssl/cacert.pem',master_ssl_cert='/etc/slave/ssl/slave.crt',master_ssl_key='/etc/slave/ssl/slave.key'; # 在连接主库时直接指定本地从库的证书文件等信息

MariaDB [mysql]>start slave;

MariaDB [mysql]> show slave status\G # 查看从库状态

5db6f666eb905d623fc999c1a96cc7d4.png

从库的另一种配置方法

vi /root/.my.cnf # 在client段下配置从库证书信息

[client]

ssl_ca= /etc/slave/ssl/cacert.pem

ssl_cert= /etc/slave/ssl/slave.crt

ssl_key= /etc/slave/ssl/slave.key

ssl_cipher= DHE-RSA-AES256-SHA=====MariaDB [mysql]> change master to master_host='172.16.251.123',master_user='repluser',master_password='replpass',master_log_file='mysql-bin.000010',master_log_pos=776,master_ssl=1; # 只需指定master_ssl=1即可

验证

# 主库写入:

create test.table t1(namechar(20) not null,age int not null);

# 从库读取;

show tablesfortest;

# 验证结果见下图

4b9240bf1002662f31e8bcccd41b6fba.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值