【MySQL高可用架构设计】(一)-- mysql复制功能介绍
一、 介绍
Mysql的复制功能是构建基于SQL数据库的大规模高性能应用的基础,主要用于分担主数据库的读负载,同时也为高可用、灾难恢复、备份等工作提供了更多的选择。
二、为什么要使用mysql复制功能?
大家也许知道对于数据库进行扩展是一件非常困难的事情,这一点和web服务器具有很大的不同,如果我们的网站出现大量的突增访问,web服务器的压力增加,性能下降的时候,我们只需要简单的多增加几台web服务器,只要其上部署的程序完全一样就可以很好的分担这些负担,但是数据库却不同。由于数据库中对数据的事务性要求,就决定了我们不能简单的通过增加数据库服务器的方式来分担数据库的读写负载,而mysql的复制功能,为我们提供了一种可以分担数据库读负载的好办法,注意这里呢,我只说了是读负载,因为事实上只做简单的复制,还是无法分担写负载的,我们可以使用复制功能对数据库服务器进行水平扩展,为数据库服务器增加一个备库或多个备库,而这些备库就可以用于分担主数据库的读负载,同时复制功能也为高可用、灾难恢复、备份等工作提供了更多的选择。

三、mysql复制解决了什么问题?
a、实现在不同服务器上的数据分布
也可以实现不同idc机房的数据库分布。
mysql的功能是基于主库上的二进制日志,然后在备库上重放这些日志的方式来完成的。从这我们可以知道两点:
1、mysql复制是异步的,这也意味着在同一时间点上备库上的数据呢,可能与主库存在不一致的地方,并且无法保证主库和备库间的延迟,影响主库延迟的因素有很多,具体后续文章都会提到,不过虽然延迟无法避免,但是毫无疑问,mysql复制提供了一种提高数据库的性能的方法。
2、因为是利用二进制日志,所以在通常情况下不需要太多的带宽,特别是在基于语句的复制时所需要带宽的就更少了。但使用基于行的复制来进行大批量的更改时,可能会对那种带宽带来一定的压力,特别是在跨IDC环境下进行复制。所以对于这种大批量的数据修改,在任何情况下都应该是分批来进行的,
b、实现数据读取的负载均衡
这种读的负载均衡需要其它组件配合完成。比如可以利用DNS轮询的方式把程序的读连接到不同的备份数据库,或是利用LVS,haproxy这样的代理方式都可以达到这种读负载均衡的目的。关于读写分离和负载均衡,后面我会有文章详细讲解。
c、增强的数据安全性
mysql的复制是非共享架构,同样的数据分布在多台服务器上,所以增加了数据的安全性。
我们还可以利用备库进行数据库备份的工作来减少主库复制,但注意复制并不能代替备份,因为备份和复制所做的工作是不同的,如果我们不小心在主库上错误的删除或是修改了数据,由于备库通常来说很小,所以很难使用备库的数据对错误的删除或修改的数据进行恢复。
要在这种情况下对数据进行恢复只能依靠备份来完成,所以大家千万不要以为做了复制之后就不用备份了,数据库备份在任何时候都是非常重要的。
d、实现数据库高可用和故障切换
备份的另一个重要作用就是让我们可以方便的进行数据库的高可用架构的部署,避免mysql单点故障。后续文章会有详细讲解。
e、实现数据库在线升级
我们可以使用一个高版本的数据库来作为主库的备库,这样在配置高可用工具的时候就可以在很短的时间内完成这种数据库的在线升级。
同时,也可以测试高版本的mysql和我们现有的程序是否兼容。
四、结尾
在对复制进行具体介绍之前,我们先来看mysql二进制日志的一些问题,只有理解了二进制日志的记录方式,我们才能更好的对mysql复制进行部署和优化。
下一篇文章我会对二进制日志文件做介绍,请关注。
本篇文章总结于慕课网《MySQL性能管理及架构设计》课程
【MySQL高可用架构设计】(一)-- mysql复制功能介绍的更多相关文章
- 从MySQL高可用引出对高可用架构设计的一些思考
高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...
- 从mysql高可用架构看高可用架构设计
高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...
- MySQL高可用架构应该考虑什么? 你认为应该如何设计?
一.MySQL高可用架构应该考虑什么? 对业务的了解,需要考虑业务对数据库一致性要求的敏感程度,切换过程中是否有事务会丢失 对于基础设施的了解,需要了解基础设施的高可用的架构.例如 单网线,单电源等情 ...
- MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解
MySQL高可用架构之Mycat-关于Mycat安装和参数设置详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Mycat介绍 1>.什么是Mycat Mycat背后是 ...
- MySQL 高可用架构在业务层面的应用分析
MySQL 高可用架构在业务层面的应用分析 http://mp.weixin.qq.com/s?__biz=MzAxNjAzMTQyMA==&mid=208312443&idx=1&a ...
- mysql高可用架构之MHA,haproxy实现读写分离详解
MySQL高可用架构之MHA 一.运维人员需要掌握的MySQL技术: 1.基本SQL语句 2.基本的管理[库表数据的管理 权限的管理] 3.容灾 保证数据不丢失. 二.工作中MySQ ...
- 032:基于Consul和MGR的MySQL高可用架构
目录 一.Consul 1.Consul简介 2.准备环境 3.Consul 安装 4.Consul配置文件 5.Consul 服务检查脚本 6.Consul启动 二.MGR搭建 1.MGR配置 2. ...
- (转)MySQL高可用架构之MHA
MySQL高可用架构之MHA 原文:http://www.cnblogs.com/gomysql/p/3675429.html 简介: MHA(Master High Availability)目前 ...
- MySQL高可用架构故障自动转移插件MHA
mha高可用架构是目前mysql高可用故障转移比较成熟的解决方案.MHA插件复杂监控mysql主节点的健康情况.在主节点宕机后,MHA把binlog通过ssh传到从节点进行重做补齐.并提升其中一个从节 ...
随机推荐
- 一套从alpine基本镜像到node8.16.2的全套dockerfile
这个花了点时间,可以正式跑起来了. 加了常用的工具及中文时区,非root帐号. 除了pm2,其它的module放到应用程序本身的node_modules目录下来实现的. 一,3rd_part/node ...
- 具名插槽 slot (二)
slot 是父组件与子组件的通信方式可以将父组件的内容显示在子组件当中或者说可以将 让你封装的组件变的更加的灵活,强壮! 在子组件中 通过为多个slot进行命名.来接受父组件中的不同内容的数据 这 ...
- you have new mail in /var/spool/mail/root !
今天开发的同事告诉我,他在登录系统时老是提示you have new mail in /var/spool/mail/root ! 我一猜就知道他们肯定又自己写定时任务了,这样的事已经发生过好几回了, ...
- c# 第41节 异常处理
本节内容: 1:捕获异常两种方式 2:处理异常的两种方式 3:实例处理异常 4:手动触发异常 5:预定义异常类有哪些 6:自定义异常 1:捕获异常 第一种 捕获:只能知道发生了异常 第二种捕获: 可以 ...
- [C5] Andrew Ng - Structuring Machine Learning Projects
About this Course You will learn how to build a successful machine learning project. If you aspire t ...
- DRF--验证器
前戏 在之前我们对前端妹子传来的数据进行校验,使用的是序列化类来进行校验的,但这里面往往满足不了我们的需求,更多的时候我们希望自己定义校验规则.这里介绍三种自定义校验的方式.分别是单一字段校验,多个字 ...
- Ubuntu 安装git及git命令
1.检查git是否已经安装,输入git version命令即可,如果没有显示版本号表示没有安装git 2.安装git sudo apt-get install git 3.配置git全局环境git c ...
- c#DateTime与unix时间戳互相转换
public class UnixTimeUtil { /// <summary> /// 将dateTime格式转换为Unix时间戳 /// </summary> /// & ...
- macbook pro更换键盘的排线
以下是拆机图解 很简单的 有点动手能力的都可以更换 另外附加淘宝上的链接 https://item.taobao.com/item.htm?spm=a1z09.2.0.0.68a12e8dYAiQIx ...
- 获取主机信息,网络信息AIP,getsockname,getpeername,getservbyname,getservbyport,inet_ntop,inet_pton
获取主机信息 1.ip地址转换,主机字节序 <---> 网络字节序 #include <arpa/inet.h> int inet_pton(int af, const cha ...