没有合适的资源?快使用搜索试试~ 我知道了~
首页Mysql主从复制及读写分离
资源详情
资源评论
资源推荐

资源由 www.eimhe.com 美河学习在线收集分享
Mysql 主从复制及读写分离
一、Mysql5.7 的版本优势;
二、数据库集群的概述;
三、Mysql 数据库的主从复制;
四、Mysql 数据库的读写分离;
五、案例:搭建 Mysql 数据库集群(主从复制--二进制日志文件方式);
六、案例:搭建 Mysql 数据库集群(主从复制--GTID 方式);
七、案例:实现 Mysql 主从复制+读写分离;
一、Mysql5.7 的版本优势;
1.安全性:
MySQL 数据库初始化完成以后,会产生一个 root@localhost 用户,从 MySQL 5.7 开始,root
用户的密码不再是空,而是随机产生一个密码;
MySQL 官方已经删除了 test 数据库,默认安装完后是没有 test 数据库的;
提供了更为简单 SSL 安全访问配置,并且默认连接就采用 SSL 的加密方式;
可以为用户设置密码过期策略,一定时间以后,强制用户修改密码;
ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
可以”锁”住用户,用以暂时禁用某个用户;
ALTER USER 'jeffrey'@'localhost' ACCOUNT LOCK;
ALTER USER l 'jeffrey'@'localhost' ACCOUNT UNLOCK;
2.灵活性:
JSON:随着非结构化数据存储需求的持续增长,各种非结构化数据存储的数据库应运而生
(如 MongoDB)。从最新的数据库使用 排行榜 来看,MongoDB 已经超过了 PostgreSQL,其
火热程度可见一般。各大关系型数据库也不甘示弱,纷纷提供对 JSON 的支持,以应对非结
构化数据库的挑战。MySQL 数据库从 5.7.8 版本开始,也提供了对 JSON 的支持。其使用方
式如下:
CREATE TABLE t1 (jdoc JSON);
INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');
MySQL 支持 JSON 以后,总是避免不了拿来与 MongoDB 进行一些比较。但是,MySQL 对 JSON
的支持,至少有两点能够完胜 MongoDB:
1.可以混合存储结构化数据和非结构化数据,同时有关系型数据库和非关系型数据库的优点;
2.能够提供完整的事务支持:generated column 是 MySQL 5.7 引入的新特性,所谓 generated
column,就是数据库中这一列由其他列计算而得;
3.易用性:
sys schema 是 MySQL 5.7.7 中引入的一个系统库,包含了一系列视图、函数和存储过程, 该
项目专注于 MySQL 的易用性;
例如,我们可以通过 sys schema 快速的知道,哪些语句使用了临时表,哪个用户请求了最多

资源由 www.eimhe.com 美河学习在线收集分享
的 io,哪个线程占用了最多的内存,哪些索引是无用索引等;
4.性能:
临时表的性能改进:
加速连接处理:在 MySQL 5.7 之前,变量的初始化操作(THD、VIO)都是在连接接收线程
里面完成的,现在将这些工作下发给工作线程,以减少连接接收线程的工作量,提高连
接的处理速度。这个优化对那些频繁建立短连接的应用,将会非常有用。
复制性能的改进:复制延迟是 Mysql 很大的问题之一,MySQL 5.7 版本已经支持”真正”的
并行复制功能。MySQL 5.7 并行复制的思想简单易懂,简而言之,就是”一个组提交的
事务都是可以并行回放的”,因为这些事务都已进入到事务的 prepare 阶段,则说明事
务之间没有任何冲突(否则就不可能提交)。这里需要注意的是,为了兼容 MySQL 5.6
基于库的并行复制,Mysql 提供了两个特定了变量;
二、数据库集群的概述;
数据库发展阶段:
Mysql 数据库存在的瓶颈:
CPU 瓶颈:Mysql 在单个事务查询中只能使用一个 CPU,而且他多 CPU 支持的不好,多加了
也没用,所以我们要提高 CPU 速度,这里我们简单理解为提高 CPU 主频,当然 64 位架构会
更佳(即 64 位 OS 配合 64 位的 CPU)。
I/O 瓶颈:I/O 瓶颈发生在装入数据远大于内存容量的时候,磁盘的 I/O 读写性能有限,当读
写速度远不及数据处理时,可以改变磁盘的存储性能(通过物理或逻辑方式 RAID),使用类
似 DRBD 等块复制的磁盘方式;
三、Mysql 数据库的主从复制;
概述:单台 mysql 数据库服务器,需要承载客户端的读取和写入操作的请求,那么若客户端
请求过多,服务器会不堪重负,那么可以选择 Mysql 数据库集群的方式来增加 Mysql 服务处

资源由 www.eimhe.com 美河学习在线收集分享
理数据的效率,像 web 集群一样,但是不得不考虑的是多台 Mysql 数据库之间数据的一致
性;
主从复制过程原理:
1、在每一个事务更新之前,Master 在二进制日志记录这些改变,写入二进制日志完成后,
Master 通知存储引擎提交事务;
2、Slave 将 Master 的 Binary log 复制到其中继日志,首先 Slave 开始一个 I/O 线程,I/O 线程
在 Master 的 Binary log 中读取事件,如果已经跟上 Master,他会睡眠并等待 Master 产生新

资源由 www.eimhe.com 美河学习在线收集分享
的事件,I/O 线程将这些事件写入到中继日志 Relay log,中继日志通常存放在 OS 的缓存中,
所以开销较小;
3、Slave 中的 Sql 线程在中继日志 Relay log 中读取事件,并重放其中的事件而更新 Slave 的
数据,使其与 Master 中的数据一致;
注:复制过程中,Slave 中的数据复制是串行化的,并行操作无法在 Slave 上实现(复制过程
有一个很重要的限制——复制在 slave 上是串行化的,也就是说 master 上的并行更新操作不
能在 slave 上并行操作);
复制类型:
1、基于语句的复制:在主服务器上执行的 sql 语句,在从服务器上同样也会执行,mysql 默
认选用基于语句的复制,效率比较高,MySQL 5.0 及之前的版本仅支持基于语句的复制(也
叫做逻辑复制,logical replication),这在数据库并不常见。master 记录下改变数据的查询,
然后,slave 从中继日志中读取事件,并执行它,这些 SQL 语句与 master 执行的语句一样。;
2、基于行的复制:把改变的内容复制过去,而不是把命令重新执行一遍;
3、混合类型的复制:默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会
采用基于行;
主从复制方式:
基于二进制文件:二进制日志文件;
基于 GTID 方式:全局事务标示符,自 5.6 版本开启的新型复制方式,GTID 的组成:前面是
server_uuid:后面是一个序列号
例如:server_uuid:sequence number
7800a22c-95ae-11e4-983d-080027de205a:10
UUID:每个 mysql 实例的唯一 ID,由于会传递到 slave,所以也可以理解为源 ID。
Sequence number:在每台 MySQL 服务器上都是从 1 开始自增长的序列,一个数值对应一个
事务。
工作过程:
1、master 更新数据时,会在事务前产生 GTID,一同记录到 binlog 日志中。
2、slave 端的 I/O 线程将变更的 binlog,写入到本地的 relay log 中。
3、sql 线程从 relay log 中获取 GTID,然后对比 slave 端的 binlog 是否有记录。
4、如果有记录,说明该 GTID 的事务已经执行,slave 会忽略。
5、如果没有记录,slave 就会从 relay log 中执行该 GTID 的事务,并记录到 binlog。
6、在解析过程中会判断是否有主键,如果有就用二级索引,如果没有就用全部扫描。
优势:
1、更简单的实现 failover,不用以前那样在需要找二进制日志文件 log_file 和位置值 log_pos。
2、更简单的搭建主从复制。
3、比传统的复制更加安全。
4、GTID 是连续的没有空洞的,保证数据的一致性,零丢失。
5、slave 无需知道 master 的 pos 值和日志文件值,只需要知道 master 的 ip、用户名、密码
即可;
四、Mysql 数据库的读写分离;
读写分离架构:

资源由 www.eimhe.com 美河学习在线收集分享
实现方式:
1.基于程序代码内部实现:
在代码中根据 select 和 insert 进行路由分类,性能比较好,无需任何硬件代理条件,缺点是
需要开发人员的编写,运维人员无从下手;
2.基于中间代理层实现:
在客户端与数据库间添加代理层,代理服务器接收到客户端的请求之后,判断请求后,转发
给后端的数据库;
mysql-proxy:为 mysql 的开源项目,但是 mysql 官方不建议将其引用在生产环境中;
amoeba:变形虫,由陈思儒开发,Java 语言编写而成,再生产环境中 amoeba 代理层软
件是一个不错的选择;
五、案例:搭建 Mysql 数据库集群(主从复制--二进制日志文件方式);
案例环境:
系统
IP 地址
主机名
所需软件
硬件
Centos 7.4
1708 64bit
192.168.100.101
master.linuxfan.cn
boost_1_59_0.tar.gz
mysql-5.7.12.tar.gz
内存:4G
Centos 7.4
1708 64bit
192.168.100.102
slave1.linuxfan.cn
boost_1_59_0.tar.gz
mysql-5.7.12.tar.gz
内存:4G
Centos 7.4
1708 64bit
192.168.100.103
slave2.linuxfan.cn
boost_1_59_0.tar.gz
mysql-5.7.12.tar.gz
内存:4G
案例步骤:
在 master 主机上安装 ntp 时间服务;
在两台 slave 主机中配置同步 master 的 ntp 时间(在此配置相同,在此只列举 slave1 的
配置);
安装三台 Mysql 数据库服务器(在此步骤相同,在此只列举 master 主机一台的安装);
剩余27页未读,继续阅读


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0