【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传到从节点进行重做补齐.并提升其中一个从节 ...
随机推荐
- python批量执行脚本,使用unittest.TestSuit(); unittest.TextTestRunner().run(); addTest();unittest.defaultTestLoader.discover();
#alltest.py中内容如下import unittest,osdef all(): #path="D:\\study\\python_api_test\\test1203" ...
- 2017年蓝桥杯B组C/C++决赛题解
2017年蓝桥杯B组C/C++决赛题目(不含答案) 1.36进制 ok 求36进制,类比二进制转10进制,36^3 + 36^2 + 36^1 + 36^0 2.磁砖样式 ok dfs搜索 我自己写的 ...
- poppler
https://github.com/freedesktop/poppler http://www.openjpeg.org/ https://github.com/uclouvain/openjpe ...
- 【树状数组】2019徐州网络赛 query
(2)首先成倍数对的数量是nlogn级别的,考虑每一对[xL,xR](下标的位置,xL < xR)会对那些询问做出贡献,如果qL <= xL && qR >= xR, ...
- pointcnn
这篇论文先举例子解释了为什么卷积无法直接应用在点云数据上. 如图1, 传统的卷积是作用在2维图像数据上.图像中每个像素的顺序是固定的,也就是说数据是结构化存储的.直接使用conv2d就能从这种潜在的空 ...
- leetcode494. 目标和
给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S.现在你有两个符号 + 和 -.对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面. 返回可以使最终数组和 ...
- 【转】Struts2 表单验证与验证框架
版权声明:好笔头不如烂记性 https://blog.csdn.net/zsbgood/article/details/81114038 表单数据验证是很常见的功能,通常前端页面会有一次 js验证,但 ...
- hibernate中flush()、refresh()、clear()缓存操作
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ flush():使数据库中的对象和session缓存中的对象的状态 ...
- Python Dataframe 分组排序和 Modin
Python Dataframe 分组排序和 Modin 1.按照其中一列进行排序 在dataframe中,按照其中的一列排序:比如q值倒排 (1)rank方法 data['new_rank'] = ...
- Ubuntu中如何使得程序在后台运行
Ubuntu中如何使得程序在后台运行 一.前言 在Ubuntu中有的程序启动需要执行改程序./bin目录下的文件,并且启动之后这个shell就不能使用和关闭了,非常的麻烦,因此就有了相应的命令来解决这 ...