什么是mysql的主从复制?
MySQL主从复制,是指数据可以从一个MySQL数据库服务器主节点复制到一个或者多个从节点。MySQL默认采用异步复制算法,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定数据库,或者特定数据库表。
MySQL主从复制的原理
1)主数据库服务器将数据的改变,记录二进制binlog日志,当主数据库上的数据发生改变时,则将其改变写入到binlog中。
2)从数据库服务器会在一定时间间隔内,对主数据库服务器的binlog进行探测是否发生改变。如果发生改变则开始一个io县城请求Master binlog日志事件。
3)同时主节点为每个io线程启动一个dump线程,用于向其发送二进制事件,并保存至节点本地的中继日志中,从节点将从中继日志中读取binlog在本地重放,使得其数据和主节点的保持一致,最后io线程和sql线程将进入到睡眠状态,等待下一次被唤醒。
MySQL主从复制的种类
为什么需要主从复制?
1)在业务复杂的系统中,有这么一个情景,有一句SQL需要锁表,导致暂时不能提供读的服务,那么就很影响运行中的业务。使用主从复制,让主库负责写,从库负责读,这样即使主库发生了锁表的现象,通过读从库也可以保证业务的正常运作。
2)做数据的热备。
3)架构的扩展,业务量越来越大,io访问频率过高,单机无法满足。此时做多库的存储,降低磁盘io访问的频率,提高单个机器的io性能。
MySQL读写分离概述
MySQL读写分离的基本原理是让主数据库服务器处理写操作,从数据库处理读操作。主服务器将写操作的变更同步到各个从节点。
为什么MySQL读写分离可以提供系统的性能?
1)物理服务器增加,机器处理能力提升。硬件换性能。
2)主从在不同的服务器上,极大程度上缓解X锁和S锁的竞争。
3)从数据库服务器可以用myiasm引擎修饰表,提升查询性能。
4)主数据库服务器直接写是并发的,从数据库服务器发送过来的binlog恢复数据是异步,不阻塞从数据库服务器上的读操作。
5)从节点可以单独设置一些参数来提高读的性能。
6)增加冗余,提高可用性。
MySQL主从读写分离的一些方案
1)通过程序实现
2)通过MySQL-proxy来实现。据说这种方案一不稳定二性能不高。
3)自己开发接口实现,成本高不适合小公司。
4)通过阿里巴巴的开源项目Amoeba来实现。