需求架构

准备工作

主从服务器时间同步

# 主从服务器同时配置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; # 查看主库的状态信息

从库配置

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 查看从库状态

验证

# 在主库上新建数据库并创建数据
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

图2

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

基于SSL进行安全复制

生成SSL证书及私钥

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

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

主库配置

SSL支持状态检查

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

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

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

查看库文件:

ldd `which mysqld` | grep ssl # 还需查看是否存在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才能复制

从库配置

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 # 查看从库状态

从库的另一种配置方法

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(name char(20) not null,age int not null);
# 从库读取;
show tables for test;
# 验证结果见下图

MySQL DB 主从复制之SSL的更多相关文章

  1. MySQL 5.7 的SSL加密方法

    MySQL 5.7 的SSL加密方法 MySQL 5.7.6或以上版本 (1)创建证书开启SSL验证--安装opensslyum install -y opensslopenssl versionOp ...

  2. liinux安装 mysql 及主从复制

    mariadb其实就是mysqlmysql已经被oracle收购,它即将闭源,马上要开始收费了因此还想免费试用开源的数据库mysql,就在centos7上,将mysql分支为mariadb 安装mar ...

  3. mysql (主从复制)(proxy , Amoeba)

    原址如下: http://heylinux.com/archives/1004.html Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中 ...

  4. Linux 下的mysql+centos7+主从复制

    mysql+centos7+主从复制   MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公 ...

  5. mysql的主从复制延迟问题--看这一篇就够了

    ​ 在之前我们已经讲解了一主一从,双主双从的mysql集群搭建,在单机应用的时候看起来没有问题,但是在企业的生产环境中,在很多情况下都会有复制延迟的问题. ​ 主从复制的原理我们在此处就不再赘述了,之 ...

  6. MySQL的主从复制步骤详解及常见错误解决方法

    mysql主从复制(replication同步)现在企业用的比较多,也很成熟.它有以下优点: 1.降低主服务器压力,可在从库上执行查询工作. 2.在从库上进行备份,避免影响主服务器服务. 3.当主库出 ...

  7. mysql的主从复制是如何实现的

    前言 MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为 ...

  8. mysql数据库主从复制部署笔记

    主从复制是mysql中数据库实时同步的一个常用做法了,今天我来给各位介绍一下关于mysql数据库主从复制部署一个过程,希望此例子对各位同学参考参考. 数据库主从复制原理: 数据库的主从复制就是从mas ...

  9. mysql之主从复制

    原理--> 在数据库层面,复制语句或者行,因为在数据库层面,故只有主服务器生成,并放到二进制日志里面,才能复制给从服务器. 原理--> mysql的主从复制基于异步,主要有三个进程执行,分 ...

随机推荐

  1. NVME SSD vs SATA SSD(转)

    NVMe是个啥?未来SSD主流标准早知 关注固态硬盘的朋友应该对于这个词汇并不陌生,特别是今年NVMe也频繁出现在各大媒体文章中,随着高端SSD市场逐渐从SATA专项PCI-E时,以前的AHCI标准已 ...

  2. 转:vue-cli的webpack模板项目配置文件分析

    转载地址:http://blog.csdn.net/hongchh/article/details/55113751 一.文件结构 本文主要分析开发(dev)和构建(build)两个过程涉及到的文件, ...

  3. ExtJs对js基本语法扩展支持

    ExtJs对js基本语法扩展支持 本篇主要介绍一下ExtJs对JS基本语法的扩展支持,包括动态加载.类的封装等. 一.动态引用加载 ExtJs有庞大的类型库,很多类可能在当前的页面根本不会用到,我们可 ...

  4. ZOJ 3781 Paint the Grid Reloaded(DFS连通块缩点+BFS求最短路)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5268 题目大意:字符一样并且相邻的即为连通.每次可翻转一个连通块X( ...

  5. 动态页面技术JSP/EL/JSTL

    本节内容: jsp脚本和注释 jsp运行原理 jsp指令(3个) jsp内置/隐式对象(9个) jsp标签(动作) EL技术 JSTL技术 JavaEE的开发模式 动态页面技术:就是在html中嵌入j ...

  6. sicily 1176. Two Ends (Top-down 动态规划+记忆化搜索 v.s. Bottom-up 动态规划)

    Description In the two-player game "Two Ends", an even number of cards is laid out in a ro ...

  7. 【51nod】1822 序列求和 V5

    题解 我是zz吧 nonprime[i * prime[j]] = 0 = = 还以为是要卡常,卡了半天就是过不掉 我们来说这道题-- 首先,我们考虑一个\(K^2\)做法 \(f_{k}(N) = ...

  8. USACO 6.2 Packing Rectangles

    Packing RectanglesIOI 95 The six basic layouts of four rectangles Four rectangles are given. Find th ...

  9. LoadRunner 一参多用

    LoadRunner参数化后的值在脚本中多处位置引用(LoadRunner 一参多用)   LoadRunner的参数化给了我们很多便利,但是当一个脚本中同一个值出现多处,并且值都是一致的.这个时候, ...

  10. POJ - 1743 后缀自动机

    POJ - 1743 顺着原字符串找到所有叶子节点,然后自下而上更新,每个节点right的最左和最右,然后求出答案. #include<cstdio> #include<cstrin ...