存在问题
主从复制架构多次出现复制停滞问题如1032错误和1062错误,其中,1032错误是在主库成功执行后在从库update或delete时发现从库上找不到这条记录,1062错误是在主库insert完成后在从库执行时出现主键冲突无法成功insert,这些问题可通过跳过错误和前面的复制数据校验修复来解决,但是这些问题产生的直接原因都是主从库数据不一致。这种不一致除了逻辑复制本身可能出现的数据不一致,还有个原因是业务侧或开发人员违规在备库上直接进行增删改操作导致的。
在主从复制架构中,主从库通过VIP绑定实现指定库作为主库,提供读写,从库起backup的作用,当主库出现问题时,VIP切换到从库,从库提供读写,否则从库只是backup。正常情况下,我们不允许开发人员直接通过固定IP登录从库操作,但实际工作中往往又难以规避,那么如何从技术角度去避免开发人员在备库操作呢?又如何在避免的同时不影响高可用架构的正常运行和故障切换呢?
2.架构配置优化
(1)直接解决办法
解决上述问题的直接办法是考虑进行架构配置优化,即将从库可读写的状态配置为只读状态。
MySQL官网关于只读有下列描述:
1.Whenthe read_only system variable is enabled, the server permits no client updatesexcept from users who have the SUPER privilege. 只读情况下,super权限可读写。 2.Updates performed by slave threads, if theserver is a replication slave. In replication setups, it can be useful toenable read_only on slave servers to ensure that slaves accept updates only from themaster server and not from clients. 不影响主从复制线程的读写。
开启只读后,除了super权限账户和复制线程等不受影响外,业务侧开发人员和其它人员即使登录备库也无法操作备库数据。
MySQL [db1]> show global variables like'read_only%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | read_only | ON | +---------------+-------+ 1 row in set (0.00 sec) MySQL [test]> insert child values('1','12'); ERROR 1290 (HY000): The MySQL server is running withthe --read-only option so it cannot execute thisstatement
(2)配置为只读后如何进行完美故障切换?
从库只读可避免违规操作,但面临的问题是如果主库发生问题,VIP要切换到从库上,但这时候从库只读会导致数据库对外服务不可用,因此在切换时需要实现取消从库只读同时设置主库只读的功能。
以Keepalived+MySQL双主(主从)架构为例,正常运行时,VIP在Master1上,Master1为可读写状态,Master2为readonly状态,一旦Master1发生问题,VIP要自动切换至Master2,切换前要完成两个步骤:1.将Master1置为readonly;2.取消Master2的readonly。
3.自动化实现思路
对于一主一从架构,故障切换需要手工进行,因此上述两步也可以手工操作;但Keepalived+MySQL双主(主从)架构中,已实现故障的自动监测和VIP自动切换,上述两个步骤也应该植入脚本中实现自动化。
我们主要需在自动监测和切换脚本中植入对数据库开启readonly和关闭readonly的函数,主要写入语句“set global read_only=ON”和“set globalread_only=OFF”,同时注意在设置状态之前先判断现有状态,shell调用语句“show variables like 'read_only';”得到读写状态,确认读写状态后再设置readonly参数为所需状态即可,注意这些状态设置的触发定制在监测到故障并执行切换之前。
上述思路现已完成自动化转换,亲测成功,说明思路正确。
以上就是主从复制问题引起的架构优化思考的内容,更多相关内容请关注PHP中文网(www.php.cn)!

存储过程是MySQL中的预编译SQL语句集合,用于提高性能和简化复杂操作。1.提高性能:首次编译后,后续调用无需重新编译。2.提高安全性:通过权限控制限制数据表访问。3.简化复杂操作:将多条SQL语句组合,简化应用层逻辑。

MySQL查询缓存的工作原理是通过存储SELECT查询的结果,当相同查询再次执行时,直接返回缓存结果。1)查询缓存提高数据库读取性能,通过哈希值查找缓存结果。2)配置简单,在MySQL配置文件中设置query_cache_type和query_cache_size。3)使用SQL_NO_CACHE关键字可以禁用特定查询的缓存。4)在高频更新环境中,查询缓存可能导致性能瓶颈,需通过监控和调整参数优化使用。

MySQL被广泛应用于各种项目中的原因包括:1.高性能与可扩展性,支持多种存储引擎;2.易于使用和维护,配置简单且工具丰富;3.丰富的生态系统,吸引大量社区和第三方工具支持;4.跨平台支持,适用于多种操作系统。

MySQL数据库升级的步骤包括:1.备份数据库,2.停止当前MySQL服务,3.安装新版本MySQL,4.启动新版本MySQL服务,5.恢复数据库。升级过程需注意兼容性问题,并可使用高级工具如PerconaToolkit进行测试和优化。

MySQL备份策略包括逻辑备份、物理备份、增量备份、基于复制的备份和云备份。1.逻辑备份使用mysqldump导出数据库结构和数据,适合小型数据库和版本迁移。2.物理备份通过复制数据文件,速度快且全面,但需数据库一致性。3.增量备份利用二进制日志记录变化,适用于大型数据库。4.基于复制的备份通过从服务器备份,减少对生产系统的影响。5.云备份如AmazonRDS提供自动化解决方案,但成本和控制需考虑。选择策略时应考虑数据库大小、停机容忍度、恢复时间和恢复点目标。

MySQLclusteringenhancesdatabaserobustnessandscalabilitybydistributingdataacrossmultiplenodes.ItusestheNDBenginefordatareplicationandfaulttolerance,ensuringhighavailability.Setupinvolvesconfiguringmanagement,data,andSQLnodes,withcarefulmonitoringandpe

在MySQL中优化数据库模式设计可通过以下步骤提升性能:1.索引优化:在常用查询列上创建索引,平衡查询和插入更新的开销。2.表结构优化:通过规范化或反规范化减少数据冗余,提高访问效率。3.数据类型选择:使用合适的数据类型,如INT替代VARCHAR,减少存储空间。4.分区和分表:对于大数据量,使用分区和分表分散数据,提升查询和维护效率。

tooptimizemysqlperformance,lofterTheSeSteps:1)inasemproperIndexingTospeedUpqueries,2)使用ExplaintplaintoAnalyzeandoptimizequeryPerformance,3)ActiveServerConfigurationStersLikeTlikeTlikeTlikeIkeLikeIkeIkeLikeIkeLikeIkeLikeIkeLikeNodb_buffer_pool_sizizeandmax_connections,4)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Dreamweaver Mac版
视觉化网页开发工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。