MySQL复制原理及过程
来源:互联网 发布:企业淘宝 编辑:程序博客网 时间:2024/06/01 12:01
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;
0 0
- MySQL复制原理及过程
- MySQL的复制原理及配置
- MySQL复制原理及配置详解
- 【MySQL】主从复制原理及配置
- Mysql主从复制原理及配置
- mysql主从复制原理及配置步骤
- Mysql主从复制原理及配置
- MySQL主从复制原理及配置
- MySQL主从复制原理及基本配置
- Mysql主从复制原理及配置
- mysql 主从复制原理及实战操作
- Mysql主从复制原理及配置
- MySQL主从复制原理及配置
- Mysql主从复制原理及配置
- MySQL主从复制原理及搭建
- MySQL主主复制原理及搭建
- MySQL传统复制与GTID复制原理及操作详解
- MySQL传统复制与GTID复制原理及操作详解
- How to add subview inside UIAlertView for iOS 7
- cocos2dx-33种场景切换
- 项目---第三方API百度地图的使用总结
- 小发现之在SQL字符串比较中对其大小写不敏感
- ASP.NET应用程序资源访问安全模型
- MySQL复制原理及过程
- 图像处理之关键代码——Android
- cocos2dx人物行走例子
- C++UML类图
- ASP.NET+AJAX解决网页打开等待问题
- 空指针与void *指针
- wireshark
- 弱弱的只能活在小数据么?
- 近期学习任务