您的位置:首页 > 数据库 > MySQL

MySQL复制原理及过程

2014-04-26 12:11 141 查看
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: