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主从复制原理分析的更多相关文章

  1. MySQL 主从复制原理不再难

    上篇我们分析过 Binlog 日志的作用以及存储原理,感兴趣的可以翻阅: 一文带你了解 Binlog 日志 Binlog 日志主要作用是数据恢复和主从复制.本身就是二进制格式的日志文件,网络传输无需进 ...

  2. mysql 主从复制原理

    主从形式   mysql主从复制 灵活 一主一从 主主复制 一主多从---扩展系统读取的性能,因为读是在从库读取的: 多主一从---5.7开始支持 联级复制---     用途及条件   mysql主 ...

  3. [转]MySQL主从复制原理介绍

    MySQL主从复制原理介绍 一.复制的原理 MySQL 复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以 ...

  4. Mysql主从复制原理及配置

    Mysql主从复制原理及配置 1.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其 ...

  5. MySQL主从复制--原理

    简介 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一 ...

  6. mysql 主从复制原理(转)

    本文转自https://blog.csdn.net/php_younger/article/details/59673879 mysql 主从复制原理 主从形式   mysql主从复制 灵活 一主一从 ...

  7. 如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?

    如何实现 MySQL 的读写分离? 其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去. MySQL 主从复制原理的是 ...

  8. Mysql主从复制原理及搭建

    ## Mysql主从复制原理 主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中.对于多级复制,数据库服务器即可充当主机,也可充当从 ...

  9. mysql主从复制原理及实践

    Mysql主从复制原理及实践 mysql主从框架       MySQL主从架构是MySQL集群中最基本也是最常用的一种架构部署,能够满足很多业务需求,常见的有一主一从或者一主多从.可以防止单一主机的 ...

随机推荐

  1. Hadoop部署项目总结&&解析缓存文件

    打包hadoop项目需要用fatjar插件进行打包,可以将第三方依赖一起编译进去,否则会找不到mapper类,或者找不到主类main方法. 解析缓存文件代码: @Override protected ...

  2. [经典]Python 一篇学会多线程

    对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用简单的例子,让你对多线程有个初步的认识. 单线程 在好些年前的MS-DOS时代,操作系统处理问题都是单任 ...

  3. springMVC整合swagger(亲自试验完全可用)

    swagger是什么: [plain] view plain copy Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.本文简单介绍了在项目中集成swagger的方法和一 ...

  4. C# WinfForm 控件之dev报表 XtraReport (八)动态生成报表

    功能说明:生成一个报表文件DV1,保存到本地AA.rep,再重新加载这个文件到DV2 1.布局如下图: panel1 上有三个button panel2上有个documentView dv1 pane ...

  5. mybatis的实际应用

    简单基本的增删改查语句就不说了,直接从一对一,一对多的关系开始: association联合:联合元素用来处理“一对一”的关系; collection聚集:聚集元素用来处理“一对多”的关系; MyBa ...

  6. Java中在磁盘上复制文件

    使用字节流实现 public static void main(String[] args) throws IOException { InputStream in = new FileInputSt ...

  7. .Net中Task使用来提高代码执行效率

    技术不断更新迭代,更高效的执行效率越来越被重视,所以对Task的使用进行了简单使用做了整理与大家分享. .Net 中有了Task后使多线程编程更简单使用和操作,下面粘上代码进行简单说明: /// &l ...

  8. 反编译字节码角度分析synchronized关键字的原理

    1.synchronized介绍 synchronized是java关键字.JVM规范中,synchronized关键字用于在线程并发执行时,保证同一时刻,只有一个线程可以执行某个代码块或方法:同时还 ...

  9. Java SE(3)

    紧接着上一期内容,继续来复习一下java基础的知识点,主要来复习一下有关线程的内容吧! 1.向上转型:Animal a = new Cat();//自动类型提升,猫对象提升为动物类型,但是特有的功能无 ...

  10. c++ GetAsyncState() 函数

    函数原型 SHORT GetAsyncKeyState(int vKey); 例:若判断 回车键 if(GetAsyncKeyState(VK_RETURN)&0x8000) ( return ...