mysql主从复制原理分析
1、主从复制这类NFS存储数据通过inotify+rsync同步到备份的NFS服务器,只不 过Mysql的复制方案是其自带的工具
inotify 是一种文件系统的变化通知机制,如文件增加、删除等事件可以立刻让用户态得知,该机制是著名的桌面搜索引擎项目 beagle 引入的,并在 Gamin 等项目中被应用。
rsync是类unix系统下的数据镜像备份工具——remote sync。一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步。
应用场景
1、从服务器作为主服务器的实时数据备份
利用mysql的数据备份功能备份数据时,在硬件故障软件故障的情况下,该数据备份是有效的,但是人为的进行sql操作比如:delete drop等操作时从库的备份功能就没有了,因为从库也会执行这些删除操作。
2、主从服务器实现读写分离,从服务器实现负载均衡
主从服务器可以通过程序或代理软件(mysql-proxy,amoeba)实现对用户(客户端)的请求读写分离,即让从服务器仅仅处理用户的select请求,降低用户查询响应时间 ,以及同时读写在主服务器上的带来的访问压力。对于更新的数据(例如update、insert、delete语句),刚仍然交给主服务器处理,确保主服务器和从服务器保持实时同步。
百度、淘宝、新浪等绝大多数的网站都是用户浏览页面多于用户发布内容,因些通过从服务器接收只读请求,就可以很好的减轻从数据库的压力,且从服务器可以很容易地扩展多台使用LVS(linux-virtual-server 意思是linux虚拟服务器)做负载均衡效果就很好了,这就是传说中的数据库读写分离架构。
3、把多个从服务器根据业务重要性进行拆分访问
可以把几个不同的从服务器,根据公司的业务进行拆分。例如:有为外部用户查询服务的从服务器,有内容DBA用来数据库备份的从服务器,还有为公司内部人员提供访问的后台、脚本、日志分析及供开发人员查询使用的从服务器。这样的拆分除了减轻主服务器的压力外,还可以使数据库对外部用户浏览、内部用户业务处理及DBA人员的备份等互不影响。
实现Mysql主从读写分离的文案
1、通过程序实现读写分离(性能和效率最佳,推荐)
php和java都可以通过设置多个连接文件实现对数据库的读写分离,当语句关键字是insert/update/delete时连接写库文件,当是select时连接读库文件。
2、通过开源的软件实现读写分离
mysql-proxy/amoeba等代理软件可以实现读写分离,但是这些软件的稳定性和功能一般不建议使用。
3、大型门户独立开发DAL层综合软件
百度、阿里等大型门户都有开发牛人,会花大力气开发适合自己业务的读写分离、负载均衡、监控报警、自动扩容、自动收缩等一系列功能的DAL层软件。
原理介绍
Mysql的主从复制,是一个异步的过程(虽然一般情况下感觉是实时的),数据将从一个mysql数据库(我们称之为master)复制到另一个mysql数据库(我们称之为slave)在master与slave之间实现整个主从复制的过程是由三个线程参与完成的。其中两个线程(sql线程和I/O线程)在slave端,另外一个线程(I/O线程)在master端
要实现mysql的主从复制,首先必须打开master端的binlog记录功能,否则就无法实现。因为整个复制过程实际上就是slave从master端获取binlog日志,然后再在slave上以相同顺序执行获取的binlog日志中所记录的sql操作。
要打开mysql binlog记录功能,可通过在mysql的配置文件my.cnf中的mysqld模块([mysqld]标识后的参数部分)增加“log-bin”参数选项来实现,具体信息如下:
[mysqld]
log-bin=/data/3306/mysql-bin
提示:如果把log-bin放在配置文件结尾而不是[mysqld]标识之后可能导致配置复制不成功。
mysql主从复制过程详细描述
下面简单的描述mysql replication 的复制过程
1、在slave服务器上执行start slave命令开启主从复制开关,开始进行主从复制
2、此时,slave服务器的I/O线程会通过在master上已经授权的复制用户权限请求连接master服务器,并请求从指定binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送binlog日志内容。
3、master服务器接收来息slave服务器的I/O线程后,其负责的I/O纯利会根据slave服务器的I/O线程请求的信息分批读取指定binlog日志文件指定的位置之后的binglog信息,然后返回给slave端的I/O线程。返回的信息中除了binlog日志内容外,还有在master服务器端记录的binlog文件的名称,以及在新的binlog中的下一个指定的位置。
4、当slave服务器的I/O线程获取到master服务器上的I/O线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到slave端自身的relay log(中继日志)文件(Mysql-relay-bin.xxxxxx)的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取master端的binlog日志时能够告诉master服务器从新的binlog文件指定上的位置开始请求新的binlog日志内容。
5、slave服务器端的sql线程会实时检测本地的relay log中I/O线程新增加的日志内容,然后及时的把relay log文件中的内容解析成sql语句,并在自身slave服务器上按解析的sql语句的位置顺序执行应用这些sql语句,并在relay-log.info中记录当前应用中继日志的文件名及位置点。
binlog文件只记录所有的数据库更改的sql语句不记录任何查询(select / show)语句
mysql主从复制原理分析的更多相关文章
- MySQL 主从复制原理不再难
上篇我们分析过 Binlog 日志的作用以及存储原理,感兴趣的可以翻阅: 一文带你了解 Binlog 日志 Binlog 日志主要作用是数据恢复和主从复制.本身就是二进制格式的日志文件,网络传输无需进 ...
- mysql 主从复制原理
主从形式 mysql主从复制 灵活 一主一从 主主复制 一主多从---扩展系统读取的性能,因为读是在从库读取的: 多主一从---5.7开始支持 联级复制--- 用途及条件 mysql主 ...
- [转]MySQL主从复制原理介绍
MySQL主从复制原理介绍 一.复制的原理 MySQL 复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以 ...
- Mysql主从复制原理及配置
Mysql主从复制原理及配置 1.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其 ...
- MySQL主从复制--原理
简介 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一 ...
- mysql 主从复制原理(转)
本文转自https://blog.csdn.net/php_younger/article/details/59673879 mysql 主从复制原理 主从形式 mysql主从复制 灵活 一主一从 ...
- 如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?
如何实现 MySQL 的读写分离? 其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去. MySQL 主从复制原理的是 ...
- Mysql主从复制原理及搭建
## Mysql主从复制原理 主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中.对于多级复制,数据库服务器即可充当主机,也可充当从 ...
- mysql主从复制原理及实践
Mysql主从复制原理及实践 mysql主从框架 MySQL主从架构是MySQL集群中最基本也是最常用的一种架构部署,能够满足很多业务需求,常见的有一主一从或者一主多从.可以防止单一主机的 ...
随机推荐
- C++之string面试问题
1.指针变量指向字符串常量的问题 代码如下: "; 问p[0]=2;是否可以?原因? 答案:不可以.“123456”是字符串常量,存储在常量区,其值不可更改. 2.sizeof求字符串长度问 ...
- 第一次安装hadoop记录
需求是:安装hadoop连接远程hadoop文件系统.JDK和hadoop需要与集群版本一致 首先去官网下载hadoop http://archive.apache.org/dist/hadoop/c ...
- Vim用法AAAAA
.linux系统中如何进入退出vim编辑器,方法及区别 我们当然要保存并退出了,然后下一步了.这时,我们要按键盘左上角的"ESC",留意到了没有?左下角的插入状态不见了,如图. 然 ...
- 4. Python数据类型之数字、字符串、列表
开发过程中,我们需要处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定义不同的数据类型.在Python中,能够直接处理的数据类型主要有以下几种:数字.字符串.列表.元组.字典.集合等 ...
- 软件测试工程师如何提高提BUG逼格
某个周四早上,沏好一杯茶,刚要坐到座位上,就听开发说,你们测试怎么提的Bug,给个截图能说明啥?截图上面显示的奔溃,如果是必现还好,如果不是必现,那么我们怎么去定位?至少给个日志吧?当时我的内心活动是 ...
- 剑指offer——61平衡二叉树
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 题解: 方法一:使用深度遍历,判断每个节点是不是平衡二叉树,这种从上至下的方法会导致底层的节点重复判断多次 方法二:使用后序遍历判断,这种 ...
- 百度网盘不限速下载PanDownload网页版+IDM
1.安装配置IDM 下载链接:链接:https://pan.baidu.com/s/13P4ae-IPgi5Y13CGEZgmlg 提取码:do44 安装后在浏览器(推荐chrome或Firefox) ...
- 关于windows和linux系统更换JDK版本后,修改环境变量也无法生效的原因和解决办法
今天遇到了一个问题: 我linux系统之前安装JDK12,今天将其改成了JDK1.8,并修改了环境变量,但是通过java -version命令显示的依旧是JDK12的版本. 这是因为,当使用安装版本的 ...
- zipinfo - 列出关于某个ZIP压缩包的详细信息
总览 SYNOPSIS zipinfo [-12smlvhMtTz] file[.zip] [file(s) ...] [-x xfile(s) ...] unzip -Z [-12smlvhMtTz ...
- 15_TLB中的G属性
> TLB 是为了增加访问内存的效率 即 如果 是 29 9 12 分页 请求数据 可能需要访问 4次内存:为了解决这个问题:出现了 TLB (虚拟地址到物理地址的转换关系),如果目标地址在TL ...