mysql主从复制介绍

Mysql支持单项、双向、链式级联、实时、异步复制,在复制过程中,一台服务器充当主服务器(master),另一个或多个其他的服务器充当从服务器(lave)。

复制可以是单向:M-->S,也可以是双向M<-->M,也可以多M环状同步等,不推荐双向、环状和多主一从复制方式

如果设置了链式级联复制类似A-->B-->C-->D,那么从服务器还会充当其下面从服务器的主服务器

主从复制有利于数据库架构的健壮性、提升访问速度、易于维护管理。

1.主从服务器互为备份

当主服务器出现问题时,可以人工或自动切换到从服务器,参考资料http://oldboy.blog.51cto.com/2561410/1240412

① 挂到从库上,如果主库可以连上则将binlog拉到从库上,将从库的数据补到与主库一致(从库只备份)

② 双写,即写同时在主库和从库,压力会较大

③ 通过应用程序写一个1min的短时日志,恢复从库

④ 把异步同步换成实时同步(谷歌开发的一个半同步插件,主库和从库同时写成功才算成功,从库默认等待时间10s)

适用于非人为的硬件、服务故障,对于人为的误操作无能为力

2.主从服务器读写分离分担压力

主从服务器架构可通过程序(PHP、JAVA)或代理软件对客户端的请求实现读写分离,即主服务器进行update、delete等更新操作,从服务器提供select查询操作,保持实时同步,降低主库同时读和写的压力

中大型公司:PHP、JAVA

测试环境:代理软件(mysql-proxy、amoeba)

门户网站:分布式deproxy(百度、阿里读写分离,hash负载均衡,健康检查)

3.根据服务器拆分业务

把几个不同的从服务器根据公司的业务进行拆分,例如有为外部用户提供查询的,有DBA用来进行备份的,还有提供公司内部人员访问的后台、脚本、日志分析及开发人员服务的

主从同步要求

在从库打开同步之前,要将同步位置点之前的主库数据灌到从库上,保证同步位置点之前主库与从库的数据一致;在主库上建立专门用于从库同步的专属账号;主库需要打开binlog。

主从同步原理

主库:一个IO线程,开启binlog

从库:一个IO线程,一个sql线程

同步是从库主动去找主库

在从上配置change master to master_host=’ ’,master_port=’ ’,master_user=’ ’,master_passwod= ’’,master_log_file=’ ’,master_log_pos=      ;start slave

首先,从库的sql进程开始工作,IO线程向主库发起请求

主库对从库的主机、端口、用户等进行验证,判断是否允许连接

允许连接后,主库从从库指定的日志位置点开始给从库发送binlog,并发送此次之后主库端新的binlog文件名称以及下一个指定更新位置

从库收到binlog后,IO线程将其写入relay-log.00000n,即中继日志

从库的sql线程实时检测中继日志的变化,如果发生变化就会读取日志,解析后形成sql在从库端执行写入从库,并将最后读取的文件名和位置记录到relay-log.info

从库的IO线程更新master.info,将最后取到的binlog文件名和位置点写入

猜你喜欢

转载自www.cnblogs.com/Forever77/p/10049870.html