MySQL主从复制
1.什么是MySQL主从复制
MySQL数据库的主从复制技术与使用scp/rsync等命令进行的异机文件级别复制类似,都是数据的远程传输。只不过MySQL的主从复制技术是其软件自身携带的功能,无需借助第三方工具,而且,MySQL的主从复制并不是直接复制数据库磁盘上的文件,而是将逻辑的记录数据库更新的binlog日志发送到需要同步的数据库服务器本地,然后再由本地的数据库线程读取日志中的SQL语句并重新应用到MySQL数据库,从而实现数据库的主从复制。
1.1 主从复制
MySQL支持单向、双向、环状级联、线性级联等不同业务场景的主从复制,在复制过程中,一台机器作为主库(Master)接收来自用户的、对其内容的更新,而一台或多台其他机器则作为从库(Slave)接收来自主服务器binlog文件的日志内容,然后将该日志内容解析的SQL语句重新应用到其他从数据库中,使得主从服务器数据达到一致。
单向主从复制架构:此架构只能在master服务器端进行数据写入。 一主一从 Master1———> Slave1 一主多从 Master1———> Slave1 Master1———> Slave2
双向主主复制架构:此架构可以在master1或master2进行数据写入,或者在两端同时写入数据(需要经过特殊设置)。 双主双向同步(互为主从) Master1<===========> Master2
线性级联单向双主复制架构:此架构只能在master1进行数据写入,工作场景master1和master2作为主主互备,slave1作为从库,中间的master2需要进行特殊设置。 Master1——>Master2———> Slave1
环状级联单向多主同步架构图:任意一个点都可以写入数据,此架构图比较复杂,属于极端环境下的作品,一般场景慎用。
实际工作中:MySQL主从复制默认都是异步回调的复制方式,既不是实时的数据同步(可能会有延迟)。
2 主从复制的意义
使得MySQL数据库支持大规模高并发的读写操作成为可能;又能有效解决物理服务器宕机场景的数据备份和进行快速业务切换的问题。
2.1 应用场景:
- 从服务器作为主服务器的实时数据备份
- 主从服务器实现读写分离,从服务器实现负载均衡
- 根据业务重要性对多个从服务器进行拆分访问
读写分离:
- 通过程序实现读写分离:例如若关键字select就去连接读库的连接文件,若为update、insert、delete时,则连接写库的连接文件。
- 通过开源软件实现读写分离:maxscale、Atlas、mycat等代理软件支持读写分离功能,无需对程序做任何修改,而且他们还支持负载均衡,缺点是引入了单点服务,稳定性不如程序好。
- 大型门户网站独立开发DAL综合软件
2.2 MySQL主从复制原理:
数据从master库复制到slave库,在master和slave之间实现整个主从复制过程是由三个线程参与完成的,其中两个线程(SQL线程和IO线程)在slave端,另一个线程(binlog dump)在master端。
前提:要实现MySQL主从复制,首先必须打开master端的binlog日志功能;可以通过MySQL配置文件my.cnf中的mysqld模块增加log_bin参数来实现binlog的记录功能,具体信息如下: [mysqld] log_bin=/application/mysql/logs/bin