赞
踩
主要介绍:复制功能介绍、mysql二进制日志、mysql复制拓扑、高可用框架、单点故障、读写分离和负载均衡介绍等mysql复制功能介绍mysql复制功能提供分担读负载复制解决的问题实现在不同服务器上的数据分布利用二进制日志增量进行不需要太多的带宽但是使用基于行的复制在进行大批量的更改时会对带宽带来一定得压力,特别是跨IDC环境下进行复制实现在不同服务器上的数据分布实现数据读取的负载均衡需要其他组件配合完成利用DNS轮询的方式把程序的读连接到不同的备份数据库,使用LVS,haproxy这样的代理方式非共享架构,同样的数据分布在多台服务器上增强了数据安全性利用备库的备份来减少主库负载复制并不能代替备份实现数据库高可用和故障切换实现数据在线升级mysql二进制日志mysql服务层日志二进制日志慢查日志通用日志mysql存储引擎层日志innodb日志重做日志回滚日志记录了所有对mysql数据库的修改事件,包括增删改查事件和对表结构的修改事件二进制日志格式基于段的格式(记录sql语句)binlog_format = statement优点日志记录量相对较小,节约磁盘及网络i/o, 只对一条记录修改或者插入缺点必须要记录上下文信息保证语句在从服务器和主服务器上执行结果一致对于特定的函数如uuid(),user()这样非确定性函数还是无法复制,可能造成mysql复制的主备服务器数据不一致基于行的格式binlog_format = ROW同一sql语句修改了10000条数据的情况下,基于段的日志格式只会记录这个sql语句,基于行的日志格式会有10000条记录分别记录每一行的数据修改优点使mysql主从复制更加安全对每一行数据的修改比基于段的复制高效误操作而修改了数据库中的数据,同时又没有备份可以恢复时,我们就可以通过分析二进制日志,对日志记录的数据修改操作做反向处理的方式来达到恢复数据的目的。缺点记录日志格式较大binlog_row_image = [full|minimal|noblob]混合日志格式binlog_format = mixed特点:根据sql语句由系统决定在基于段和基于行的日志格式中进行选择数据量的大小由所执行的sql语句决定mysql二进制日志格式对复制的影响基于sql语句的复制(SBR)优点生成的日志量少,节约网络传输i/o并不强制要求主从数据库的表定义完全相同相比于基于行的复制方式更为灵活缺点对于非确定事件,无法保证主从复制数据的一致性对于存储过程、触发器、自定义函数进行的修改也可能造成数据不一致相比于基于行的复制方式在从上执行时需要更多的行锁基于行的复制优点可以应用于任何sql的复制包括非确定函数,存储过程等可以减少数据库锁的使用缺点要求主从数据的表结构相同,否则可能会中断复制无法在从上单独执行触发器mysql复制工作方式
步骤主将变更写入二进制日志从读取主的二进制日志变更并写入到relay_log中基于日志点的复制基于GTID的复制在从上重放relay_log中的日志基于sql段的日志是在从库上重新执行记录的sql基于行的日志则是在从库上直接应用对数据库的修改基于日志点的复制
基于日志点复制配置步骤在主DB服务器上建立复制账号create user "repl" @"ip段"identified by "password"grant replication slave on . to "repl" @"ip段‘配置从数据库服务器bin_log = mysql-binserver_id = 101relay_log = mysql-relay-binlog_slave_update = onread_only = on初始化从服务器数据mysqldump --master-data=2 -single-transactionxtrabackup --slave-info启动复制链路change master to master_host="master_host_ip",master_user="repl",master_password="password" master_log_file="mysql_log_file_name",master_log_pos=4;优缺点优点是mysql最早支持的复制技术,bug相对较少对sql查询没有任何限制处理故障比较容易缺点故障转移是重新获取新主的日志点信息比较困难基于GTID的复制
什么是GTIDGTID即全局事务id,其保证为每一个在主上提交的事务在复制集群中可以生成一个唯一的id;GTID=source_id:transaction_idbin_log = /usr/local/mysql/log/mysql-binserver_id = 100gtid_mode = onenforce-gtid-consiste启动基于GTID的复制change master to master_host="master_host_ip",master_user="repl",master_password="password",master_auto_position = 1;优缺点优点可以很方便的进行故障专业从库不会丢失主库上的任何修改缺点故障处理比较复杂对执行的sql有一定得限制选择复制模式要考虑的问题所使用的mysql版本复制架构及主从切换的方式所使用的高可用管理组件对应用的支持程度mysql复制拓扑
mysql5.7之前,一个从库只能有一个主库mysql5.7之后,支持一从多主架构一主多从的复制拓扑
优点配置简单可以用多个从库分担读负载用途为不同业务使用不同的从库将一台从库放到远程IDC,用作灾备恢复分担主库的读负载主-主复制拓扑
配置注意事项两个主中所操作的表最好能够分开使用下面两个参数控制自增id的生成auto_increment_increment = 2auto_increment_offset = 1 | 2主备模式下的主-主复制配置主要事项只有一台主服务器对外提供服务一台服务器处于只读状态并且只作为热备使用在对外提供服务的主库出现故障或是计划性的维护时才会进行切换使原来的备库成为主库,而原来的主库会成为新的备库,并处理只读或是下线状态,待维护完成后重新上线确保两台服务器上的初始数据相同确保两台服务器上已经启动binlog并且有不同的server_id在初始的备份上启用read_only也可以给主库分配几个从库
级联复制
mysql复制性能优化影响主从延迟的因素
主库写入二进制日志的时间解决方法:控制主库的事务大小,分割大事务二进制日志传输时间解决方法:使用mixed日志格式或设置set binlog_row_image=minimal默认情况下从库只有一个sql线程,主上并发的修改在从上变成了串行解决方法:使用多线程复制,在mysql5.7中可以按照逻辑时钟的方式来分配sql线程配置步骤:stop slaveset global slave_parallel_type = "logical_clock"set global slave_parallel_workers = 4start slavemysql复制常见问题处理由于数据损坏或丢失所引起的主从复制错误主库或者从库意外宕机引起的错误解决方法:使用跳过二进制日志事件注入空事务的方式先恢复中断的复制链路再使用其它方法来对比主从服务器上的数据主库上的二进制日志损坏备库上的中继日志损坏在从库上进行数据修改造成的主从复制错误mysql复制无法解决的问题分担数据库的写负载自动进行故障转移及主从切换提供读写分离功能高可用框架什么是高可用高可用H.A(High Avalilability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性表示高可用常用的因子正常可用时间全年时间百分比引起系统不可用的原因严重的主从延迟主从复制中断锁引起的大量阻塞软硬件故障造成的服务器宕机等如何实现高可用避免导致系统不可用的因素,减少系统不可用的时间建立完善的监控及报警系统对备份数据进行恢复测试正确配置数据库环境对不需要的数据进行归档和清理增加系统冗余,保证发生系统不可用时可以尽快恢复避免存在单点故障主从切换及故障转移原因有服务器磁盘空间耗尽、性能糟糕的sql表结构和索引没有优化主从数据不一致人为的操作失误单点故障单点故障是指在一个系统中提供相同功能的组件只有一个,如果这个组件失效了,就会影响整个系统的正常使用。组成应用系统的各个组件都有可能成为单点。如何避免mysql单点故障利用sun共享存储或drdb磁盘复制解决mysql单点故障sun
drdb
利用多写集群或ndb集群来解决mysql单点故障
如何解决主服务器的单点问题主服务器切换后,如何通知应用新的主服务器的ip地址如何检查mysql主服务器是否可用如何处理从服务器和新主服务器之间的那种复制关系MMM架构介绍Multi-Master Replication ManagerMMM提供了什么功能MMM监控mysql主从复制健康情况在主库出现宕机时进行故障转移并自动配置其他从对主的复制如何找到从库对应的新的主库日志点的日志同步点如果存在多个从库出现数据不一致的情况如何处理提供了读、写虚拟ip, 在主服务器出现问题时,可以自动迁移虚拟ipMMM架构
MMM部署所需资源
MMM优缺点优点使用perl脚本语言开发及完全开源提供了读写vip(虚拟ip),使服务器角色的变更对前端应用透明MMM提供了从服务器的延迟监控缺点发布时间比较早不支持mysql新的复制功能没有读负载的功能在进行主从切换时,容易造成数据丢失MMM监控服务存在单点故障MHA架构介绍Master High Avalilability提供的功能监控主数据库服务是否可用当主DB不可用时,从多个从服务器中选举出新的主数据库服务器提供了主从切换和故障转移功能MHA主从切换过程尝试从出现故障的主数据库保存二进制日志从多个备选从服务器中选举新的备选主服务器在备选主服务器和其他从服务器之间同步差异二进制数据应用从原db服务器上保存的二进制日志读写分离和负载均衡介绍进行mysql主从复制配置的一个主要目的:为了分担主库的读负载为什么要读写分离只能在主上进行写操作读操作主和从上都可以
读写分离的两种方式程序实现读写分离优点由开发人员控制什么样查询在从库中执行,因此比较灵活有程序直接连接数据库,所以性能损耗比较少缺点增加了开发的工作量,使程序代码更加复杂认为控制,容易出现错误中间件实现读写分离优点由中间件根据查询语法分析,自动完成读写分离对程序透明,对于已有程序不用做任何调整缺点增加了中间层,所以对查询效率有损耗对于延迟敏感业务无法自动在主库执行读写分离与读的负载均衡区别读写分离要解决的是如何在复制集群的不同角色上,去执行不同的sql语句读的负载均衡主要解决的是具有相同角色的数据库,如何共同分担相同的负载如何实现读的负载均衡软件LVSHaproxyMaxScale硬件F5本文仅代表作者个人观点,不代表巅云官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱2522407257@qq.com。更多相关资讯,请到巅云www.yinxi.net学习互联网营销技术请到巅云建站www.yx10011.com。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。