MySQL复制原理及过程



Replication基本原理
异步复制:从主机拷贝到备机过程中会有延迟,延迟通常由网络、资源可用性和系统负载来决定。使用合适架构和调优,大多复制几乎是瞬间完成的。
同步复制:数据同时向一台或多台机器提交,保证多系统一致性,但也会带来额外性能损失,mysql本身不支持同步复制,利用分布式复制块设备技术能提供同步复制功能。
半同步复制:MySQL5.5新功能,主机提交半同步到从机,从机收到事务所有事件后返回给主机确认该事务提交完成或超时。当发生超时,主机会使用异步复制。半同步复制保障主机所有已提交事务都被复制到从机。
基于语句的复制:MySQL默认使用基于语句的复制方式。优点在于最终写入日志文件的数据较少,当更新删除时,日志文件占用非常少存储空间,也意味着恢复数据能最快。缺点是不支持一些非确定性行为,例如当前时间函数。
基于行的复制:MySQL5.1引入新功能,记录表中改变的数据,与基于语句方式相反。更像关系传统复制,通常不需要锁请求。优点获得更高的并发,缺点是日志文件会较大。
混合格式复制:MySQL5.1.8引入新功能,二进制日志格式能够实时改变,默认基于语句复制,当遇到以下情况自动切换到基于行的模式:
NDB存储引擎的DML操作;
使用uuid()函数;
两个以上的表中有auto_increment属性的列被更新;
任何insert delayed被执行;
调用UDF(用户定义函数);
当视图内容使用基于行复制,则创建视图的语句也使用此方式,例如使用uuid()函数创建视图时。


Replication使用案例
水平扩展:目的是使负载分散到一个或多个从机,以提高性能。垂直扩展是在主机天津硬件资源,水平扩展是添加服务器。在水平扩展架构中,读写操作可以分离到主机和从机上。
高可用性:将改变的数据复制到从机,目的是解决当前主机发生错误、崩溃或维护,需要从主机下线时系统迁移到从机。
数据备份:避免数据备份时给主机带来性能下降或锁开销,可以选择从机替代主机执行备份操作。
在线分析:许多商业智能和查询分析工作需要占用大量主机资源并且比较耗时。对于这种情况,使用从机提供查询分析服务。
异地复制:不同地理位置的数据库之间实现远距离数据复制。异步复制在这种场景能更好解决网络延迟带来的影响。


Replication拓扑结构
Master to Slave :管理配置最简单的方式,一台做主机另一台做从机。
Master to Multiple Slaves :这种方式有更好的水平扩展能力,同时增加了管理的复杂性和复制失败解决问题的潜在风险。
Master to Slaves to Slaves :主多从的一种扩展,从机被另外一些从机作为主机。
Master to Master(Master - Master) :两台服务器结合一起,互为主从。这种配置使写操作在两个系统之间更好的被复制,但也明显地提高了在安装,配置和管理的复杂程度。
Master-Master to Slave :这种复制拓扑结构当前是不被MySQL所支持的。在多主配置环境下,通常是两台作主机,从机要从这两台主机复制数据。


Replication内部工作流程
MySQL复制,主机将更新写入二进制日志文件,并对日志维护一个索引,保持日志轮流跟踪。日志作为更新记录发送到从机。当从机连接到主机时,会检查日志最后一次更新成功最近位置。然后接受自那时以来的所有更新,之后从机便等待主机通知新的更新。


Replication配置


创建复制用户:该帐户给予“REPLICATION  SLAVE”权限,专门用于复制,不授予复制权限以外的其他权限。
GRANT  REPLICATION  SLAVE  ON  *.*  TO  'replication_user'@'%’ IDENTIFIED BY 'password' ; 
FLUSH  PRIVILEGES;
2.  刷新表和阻塞写操作:在主机刷新所有表并阻塞写操作。设置读锁: FLUSH TABLES WITH READ LOCK;
3.  记录主机二进制日志位置:可以使用SHOW MASTER STATUS;
4.  修改从机my.conf文件并重启: my.conf 中 [mysqld] 段加入 server-id=2,ID值必须是1-232之间,必须和主机不同。复制通讯      中ID值是每个服务器的唯一标识。重启从机MySQL服务,新配置就会生效。
5.  初始化复制:
Slave stop;
下一步,执行 change master命令:
CHANGE MASTER TO MASTER_HOST=’192.168.0.81’, 
MASTER_USER=’replication_user’, 
MASTER_PASSWORD=’password’,
MASTER_LOG_FILE=’dellxp1-bin.000001’, 
MASTER_LOG_POS=2462;


Replication管理和排错
1.  检查复制状态: SHOW SLAVE STATUS
2.  停止从机读取二进制日志:  STOP SLAVE;  (从机的IO线程不会读取主机二进制日志,SQL线程不会执行中继日志的事件。)
     单独停止IO或SQL线程指定线程类型: STOP SLAVE IO_THREAD;
3.  启动从机读取二进制日志:START SLAVE; 可以单独启动IO或SQL线程


使用mysqlbinlog工具查看二进制日志


***********************************************************************************************************


master mysql> FLUSH TABLES WITH READ LOCK; 阻止更新
master mysql> SHOW MASTER STATUS; 查看复制状态
slave mysql> SELECT MASTER_POS_WAIT('log_name', log_pos);
slave mysql> UNLOCK TABLES;




CHANGE MASTER TO MASTER_HOST='192.168.11.10',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_LOG_FILE='mysql-master-bin.000003',MASTER_LOG_POS=120;























你可能感兴趣的:(MySQL)