数据库实战(四)数据库主从复制
来源:互联网 发布:中国股市现状 知乎 编辑:程序博客网 时间:2024/06/05 13:22
数据复制原理
Master将改变记录到二进制日志(binary log)中,Slave将Master的二进制日志文件拷贝到它的中继日志(relay log),Slave重做中继日志(relay log)中的事件。那么,Master的变化,Slave也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication。
值得注意的是,通过上面的机制,可以保证Master和Slave的数据库数据一致,但是时间上肯定有延迟,即Slave的数据是滞后的。
主从复制方式
同步复制
同步复制,即master的变化,必须等待slave-1,slave-2,…,slave-n完成后才能返回。这样,显然不可取,也不是MYSQL复制的默认设置。比如,在WEB前端页面上,用户增加了条记录,需要等待很长时间。
异步复制
异步复制,master只需要完成自己的数据库操作即可。至于slaves是否收到二进制日志,是否完成操作,不用关心。MYSQL的默认设置。
半同步复制
半同步复制,master只保证slaves中的一个操作成功,就返回,其他slave不管。这个功能,是由google为MYSQL引入的。
主从复制分析
问题1:master的写操作,slave被动的进行一样的操作,保持数据一致性,那么slave是否可以主动的进行写操作?
答:假设slave可以主动的进行写操作,slave又无法通知master,这样就导致了master和slave数据不一致了。因此slave不应该进行写操作,至少是slave上涉及到复制的数据库不可以写。实际上,这里已经揭示了读写分离的概念。问题2:主从复制中,可以有N个slave,slave的作用?
答:一方面,进行数据备份,防止单点故障,保证高可用性。另一方面,分担负载,提高查询性能。问题3:主从复制中有master,slave1,slave2,…等等这么多MYSQL数据库,那比如一个JAVA WEB应用到底应该连接哪个数据库?
答:一般,insert/delete/update这些更新数据库的操作,用master进行操作,select用slave进行操作。或者,找一个组件用它来完成MYSQL的代理,实现SQL语句的路由。这就是所谓的MYSQL READ WRITE SPLITE,MYSQL的读写分离。问题4:当master的二进制日志每产生一个事件,都需要发往slave,如果我们有N个slave,那是发N次,还是只发一次?
答:如果只发一次,发给了slave-1,那slave-2,slave-3,…它们怎么办?显然,应该发N次。实际上,在MYSQL master内部,维护N个线程,每一个线程负责将二进制日志文件发往对应的slave。master既要负责写操作,还的维护N个线程,负担会很重。可以这样,slave-1是master的从,slave-1又是slave-2,slave-3,…的主,同时slave-1不再负责select。 slave-1将master的复制线程的负担,转移到自己的身上。这就是所谓的多级复制的概念。
- 数据库实战(四)数据库主从复制
- Mysql 主从数据库复制
- mysql主从数据库复制
- 数据库主从复制
- 数据库主从复制配置
- 数据库 主从复制原理
- 数据库主从复制2
- redis主从数据库复制
- 数据库主从复制
- mysql数据库主从复制
- 浅谈数据库主从复制
- mariadb数据库主从复制
- Mysql实现企业级数据库主从复制架构实战
- Mysql实现企业级数据库主从复制架构实战
- 主从数据库配置实战
- 实战mysql集群搭建(二)-- 实现mysql数据库主从复制
- mysql主从数据库配置 主从复制(超简单)
- redis数据库之主从复制
- git使用方法
- hdu5000 Clone dp
- Java线程之线程的五种状态
- lightoj 1021 从当前转移到其他状态的状压dp
- Java基础——实现UDP发送数据和接收数据
- 数据库实战(四)数据库主从复制
- R语言内存管理
- 常用less
- 极光推送注册、接收、点击打开推送通知
- Python学习笔记
- trie树字典树的插入和删除
- 第一行代码笔记,第六章-----详解数据存储
- 第十课 使用java开发spark 实战
- android 自定义View 的详细介绍