一、主从复制
MySQL的主从复制,就是将MySQL主数据库中的数据复制到从数据库中去,这样操作主要的目的是实现数据库的读写分离,从而使数据库具有更强大的访问负载能力,是MySQL数据库高性能的基础。
主从复制的原理是这样的:当客户端发送一条更新命令到数据库的时候,数据库会把这条更新命令同步到Binlog(注①)中,然后由另一个线程从Binlog中读取这条日志,再通过远程通讯的方式将它复制到从服务器上去,从服务器获取这条更新日志后,将其加入到自己的Relay log(注②)中,然后由另一个SQL执行线程从Relay log中读取这条新的日志,并把它在本地的数据库中重新执行一遍。
这样当客户端应用程序执行一个更新命令的时候,这个命令会在主数据库和从数据库上同步执行,从而实现了主从复制,让主从数据库保持一样的数据。
二、一主多从复制
将主数据库的数据同步复制到多个从数据库上,也就是一主多从复制。
一主多从复制的操作与主从复制的操作相同,多个从数据库和主数据库保持一致,除了SELECT之类的查询操作,其他的DML、DDL操作都会同步复制到从数据库中。那么这么做有什么好处呢?
1.分摊负载
2.专机专用
可以针对不同类型的查询,使用不同的从服务器
3.便于进行冷备份(注③)
周所周知,数据库如果在进行写操作,冷北方的数据就可能不完整,数据文件可能处于损坏状态。使用一主多从复制就可以实现零停机时间的北方,只需要关闭数据的复制进程,文件就处于关闭状态,此时进行文件拷贝,拷贝完成后再重新打开数据复制进程就可以了。
4.高可用
如果某台服务器宕机了,只要不发请求给这台服务器就可以了。所以在一主多从的情况下,某一台从服务器宕机,对整个系统的影响是非常小的。
但是主服务器宕机怎么办呢?为了解决这个可用性问题,就引入了主主复制。
三、主主复制
所谓的主主复制是指两台服务器都当做主服务器,其中一台做备份主服务器。在主服务器上收到的写操作都会复制到备份主服务器上。互相的写入方式同主从复制。
在这种情况下,如果主服务器故障,应用程序就会进行转移,将写操作发送到备份主主服务器上去,将读操作发送到备注主服务器对应的从服务器上。等故障结束后,主服务器就从备份主服务器上同步数据,并和备份主服务器职责对调。
四、MySQL复制注意事项
1.不要对两个人数据库同时进行数据写操作,这样做会导致数据冲突。
2.复制仅仅增加了读并发处理能力,并不增加写并发处理能力和系统存储能力。
3.更新数据表结构时会导致巨大的同步延迟,不要讲更新表结构的操作写入Binlog,如果需要更新表结构,请联系运维工程师对所有主从数据库进行手动更新。
注①:binlog,即binary log,这个二进制日志可以说是MySQL最重要的日志,它记录了所有DDL和DML语句(除了数据查询语句select)。
注②:Relay log,中继日志,其中包含描述数据库更改的事件,以及一个包含所有已使用的中继日志文件名称的索引文件。
注③:冷备份(cold backup),也被称为离线备份,是指在关闭数据库并且数据库不能更新的状况下进行的数据库完整备份。并可对数据进行指定恢复。