MySQL数据库主从热备部署心得
Posted 数通畅联
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库主从热备部署心得相关的知识,希望对你有一定的参考价值。
mysql数据库是一款优秀的开源数据库,目前公司的全线产品都使用的MySQL数据库,并且在实际项目中积累了大量MySQL配置以及优化方案,包括数据库主从配置、高可用配置,以及缓存机制、视图索引、I/O优化等一系列性能优化策略。
本次ESB项目采用的是K8S云平台的部署模式,并且通过7台服务器实现了高可用部署,为了从数据库层面保证系统运行,保证ESB服务流程运行的稳定,所以对数据库采用主从热备的部署方案,并对主从热备的配置方式进行总结。
1总体说明
主从机制是产品、数据库部署时比较常用的方式,通过主从部署可以实现备份机制,保证在主节点出现故障时,从节点能及时替换。对数据库而言,不仅是替换,主从模式更是保证了数据的准确性,避免因服务器故障造成数据丢失。
1.1备份用途
1.数据备份:通过主从数据库,实现数据的实时备份,降低因服务器宕机等原因造成数据丢失的风险;
2.读写分离:通过主从数据库分别实现应用的读写操作,根据读写操作分别配置数据库的性能参数,保证数据一致性的同时提高应用的执行效率;
3.高可用:通过主从数据库以及高可用机制实现主从数据库的自动切换,保证一台服务器宕机时可以自动切换另一台服务器,一般高可用会采用双主配置。
1.2工作原理
MySQL 中有一种二进制日志——bin 日志,这个日志会记录数据库执行的所有SQL语句。主从复制的原理就是“从服务器”向“主服务器”请求bin日志文件,“主服务器”把这个 bin 日志复制到“从服务器”执行一遍,这样“从服务器”的数据就和“主服务器”一致了。
1.3备份方式
MySQL数据库的备份方式分为一主一从、一主多从、多主多从以及互为主从等多种模式:
1.一主一从:两台数据库服务器,数据以主节点为主,从节点会实时备份主节点数据,采用一主一从的方案,只能对主数据库进行操作,不能直接操作从数据库,容易造成数据混乱;
2.一主多从:一个主库多个从库,类似一主一从,只是通过多个从库可以实现多点备份,提高数据安全性,同时通过多个从库还能进一步提升数据库的负载性能;
3.互为主从:互为主从也是两台服务器,是一主一从模式的深化,互为主从的两个服务器都是主节点,也是从节点,任何一个服务器的数据变化都能实时更新到另一个服务器中,互为主从是高可用常用的部署模式。
2准备工作
主要是准备服务器相关环境,包括服务器准备,以及数据库部署安装和主从分配,主从数据库需要保证数据库版本以及相关配置的一致性,避免出现数据库编码、表名/字段大小写等配置不一致造成数据同步失败。
2.1部署安装
MySQL数据库的主从配置需要至少两台服务器(一主一从),一般情况下只要能保证MySQL数据库正常运行即可,不必强制要求服务器完全一致。由于本次采用K8S云平台进行环境部署,所以将数据部署在了Master1和Master2上,服务器系统版本为CentOS 7.9。
MySQL需要分别在两台服务器进行部署,部署过程参考MySQL部署文档,此处不再做过多说明,但需要注意的是主从部署时需要保证数据库的版本和配置保持一致,特别是数据库编码、表名/字段大小写敏感、时间戳等配置,如果配置不一致可能导致主数据库的数据同步从数据库出现写入失败的情况。
2.2主库配置
主数据库配置如下:
2.3从库配置
从数据库配置如下:
2.4参数说明
MySQL数据库的主从备份需要配置的主要参数如下:
1.server-id:必需参数,用于标记主从数据库,所以需要保证主从数据库使用同步的server-id;
2.log-bin=mysql-bin:开启big-log日志,以二进制日志的形式记录数据库数据变更;
3.max_binlog_size:bin log日志的单文件最大值,如mysql-bin.000002文件达到配置的最大值后,会创建一个mysql-bin.000003记录新数据;
4.binlog_format:binlog日志记录的形式,主要有三种:statement、row、mixed,statement会记录SQL的原文,但是可能会导致主备不一致;row以数据和事件的方式进行记录,但是由于记录数据,占用空间较大,资源消耗比较严重;mixed是两种方式的结合,由MySQL自行判断采用哪种方式;
5.binlog-do-db:需要进行备份的数据库,如果是多个库写多行binlog-do-db即可;
6.binlog-ignore-db:不进行备份的数据库,和binlog-do-db一样,也可以设置多个;
7.replicate-do-db:备份制定的数据表,使用方式和binlog-do-db类似;
8.replicate-ignore-db:不备份制定的数据表,使用方式和binlog-ignore-db类似。
2.5配置过程
1.在开启主从备份前,需要先将主从数据库进行一次数据同步,
2.按照3.2的配置修改主数据库的my.cnf文件;
3.重启MySQL服务;
4.登录MySQL,查看主数据库状态:
5.创建备份用户并授权:
6.登录从服务器mysql,开启备份:
7.开启从数据库备份:
8.查询从数据库备份信息:
3功能测试
在部署主从数据库之后,需要验证数据库功能,验证方式主要有两方面,一是对于数据表的操作,如数据表的新增、删除、修改;二是对数据的操作,数据的增删改查。主要验证在主数据库发生变化时,从数据库是否会发生变化。
3.1建表操作
1.在主数据库新增一张测试表:
2.查询从数据库的数据表,并对比表结构:
3.在主数据库中添加字段ORG_TYPE:
4.刷新从数据库的表结构,观察从数据库表的变化:
5.删除主数据库的测试表,查询从数据库,检查对应表是否删除:
3.2数据操作
1.在主数据库的demo_org表中添加一条测试数据:
2.查询从数据库的demo_org,对比数据变化:
3.对主数据库demo_org表中数据进行修改,对比主从数据库的数据变化:
4.删除主数据库demo_org表的数据,查询从数据库demo_org表中数据变化:
4扩展说明
在本文的运行机制中有提到MySQL的数据库复制分为多种方式,有一主一从、一主多从、双主复制等模式,而双主备份模式是在高可用环境下比较常用的模式。本文主要介绍主从热备方式的配置过程,对于其他模式这里只做简单说明,不做过多展开。
4.1互为主从
主从复制是对主数据库数据到从数据库实时同步数据,反之对从数据库操作,主数据库不会同步数据。而互为主从模式也叫双主模式,即两个MySQL都是主数据库,任何一个数据库的变化,都会实时同步到另一个数据库中。
互为主从可以通过主从模式进行扩展,由于主从模式配置的是一主一从,而将主从反过来配置就是互为主从模式。这种模式在高可用方案中应用比较多,例如K8S集群部署时,一般通过5台服务器(3个Master,2个Worker)保证集群高可用,而为了提升高可用的效果,会将数据库也部署成高可用模式。
4.2自动切换
在高可用方案中,互为主从只是数据库的部署方式,但是为了保证高可用效果,在其中一台服务器宕机时,另一台数据库必须可以自动接替,所以需要设计MySQL高可用的架构。
由于在部署云平台时是通过keepalived+haproxy实现的K8S高可用,所以MySQL的高可用方式也可以使用keepalived,通过keepalived监听来确认服务器状态,如果一台数据库服务器故障,可以直接将另一台服务器提升为主,支持平台的正常运行。
5分析总结
MySQL作为公司产品通用的数据库,熟练掌握数据库的使用、部署以及性能优化是必备的技能,特别是对于实施人员来说,掌握产品在不同环境、不同场景下的部署以及调优是项目稳定开展的重要保证,而MySQL就是其中重要的一环。
5.1发现问题
本次ESB项目是“产品+培训”的项目,在项目开始时由于经验不足,并没有考虑性能调优,但随着产品使用程度的不断加深,ESB中的服务越来越多,服务器的性能不断降低,才考虑性能调优,包括操作系统、Redis、nginx、JVM、Server以及数据库,由于本次是单ESB的项目,所以数据库只对数据库配置进行了优化,并未从数据表索引等方面优化,如果是IDM或MDM产品,还需要从索引上进行优化。
5.2功能总结
在实际项目实施过程中,性能优化是必不可少的环节,不仅包括对服务器、产品、数据库等层面的性能优化,同时也包括如主从热备、自动备份、高可用部署、安全策略等稳定性和安全层面的措施,而稳定性和安全策略往往比服务器性能更重要。所以作为实施人员,一定要充分掌握这些服务器部署、调优、安全策略等技术能力,只有这样才能有效推进项目的顺利实施,保障最终的项目验收。
5.3个人提升
本次项目是第一次直接参与K8S云平台的项目,虽然是以ESB培训为主,但是通过现场的运维、培训,也逐步了解了云平台模式下的产品部署、维护方式,对于后续云平台项目的实施有了更多的经验,在整个项目过程中,通过参与产品培训、性能调优、环境运维、安全升级等各方面的工作,学习到了很多之前没有接触的知识。
云平台的部署模式将会是后续绝大多数项目中的部署模式,所以需要充分了解并掌握从环境部署到后期运维整个实施过程的工作,特别是在实施过程中,掌握各个阶段的工作有助于顺利推进项目,遇到相关问题时也能及时定位解决。在项目中不怕遇到问题,只要及时暴露,及时定位解决,不仅不会影响到项目,反而可以提升项目整体效果,越早暴露问题,才能保证后续工作中出现问题的几率更小。
以上是关于MySQL数据库主从热备部署心得的主要内容,如果未能解决你的问题,请参考以下文章