RDS MySQL 数据库运维简述

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 从运维的视角,汇总云数据库RDS MySQL使用的避坑指南。文章初版,维护更新,欢迎指点。

从运维技术的视角,汇总云数据库RDS MySQL使用的避坑指南。文章初版,维护更新,欢迎指点。



一、选型

1、版本选择

  • RDS MySQL 5.5 / 5.6 因MySQL 5.5 已停止更新维护,MySQL 5.6即将于2024年02月05日停止更新维护,阿里云不负责后续的内核更新维护,仅提供产品服务技术支持,建议购买5.7及以上版本。
  • RDS MySQL 5.7 目前最新的稳定版本,较5.6版本相比,增加了AliSQL很多自研功能,例如Statement OutlineStatement QueueFast Query CachePerformance Insight等,以及多项性能改进,目前也是使用用户最多的版本。社区详细的功能和性能提升列表,参考MySQL 5.7 Release Notes
  • RDS MySQL 8.0 目前也趋于稳定,较之前的版本相比,提供了更丰富的自研功能,例如Native FlashbackReturningBinlog in RedoRecycle Bin等,以及多项性能改进。详细的新功能和性能提升列表,可参考MySQL 8.0 Release Notes。目前大多数有漏洞审查的企业大都选择了8.0的最高小版本,用户使用量也逐渐增加。



2、架构选择

  • 基础版:只有一个节点可用,不存在高可用性,如果测试环境或个人使用,可给予成本的考虑使用此版本。
  • Serverless 版本:弹性伸缩实例,其规格随业务需求量随时调整,如果基于成本控制的开发环境,可以考虑此版本。
  • 高可用版:经典场景,该版本有一个备节点随时作为Standby可以进行切换,缺点是对客不可见,保证数据库的高可用性,如果需要读写分离,Master实例下面可以挂最多不超过10个只读节点。
  • 三节点企业版:自2023年03月27日起暂停新购,已购实例不影响使用,用户可使用RDS MySQL 集群版或者PolarDB-X标准版代替。
  • 集群版:计算和存储的分离设计,可实现failover到switchover的动作,业务量大时建议用集群版代替高可用版,同时可启用MGR保障实例的RPO=0。

如果是生产环境,强烈建议使用高可用版或集群版,防止单点故障,对业务造成长时间影响,同时对应两个版本有用户使用SLA,出现问题,阿里云会根据实际不可用情况给予一定的赔付。



3、存储类型

截止2024.3,RDS MySQL 还在使用的存储有4款磁盘类型:

类型

说明

SSD云盘

下线中,不再建议选用,下线后,磁盘资源会成为一个瓶颈,当遇到无法扩容的情况,不得不变更实例磁盘类型;且不支持磁盘缩容。

本地SSD盘

IO延迟较低,性能较好,但弹性伸缩较慢,备份周期也较长。

通用云盘

在ESSD云盘的基础上提供了IO突发能力,详情请参见什么是通用云盘

ESSD云盘

Enhanced SSD云盘,延迟相较于本地SSD盘较高,RDS MySQL可选PLI、PL2和PL3,三者主要区别是单盘最大IOPS和吞吐量,阈值可参考容量范围与性能级别关系



二、上云

1、上云方式

  • 由于RDS MySQL 当前仅支持 InnoDB 和 X-Engine 引擎,自建 MySQL 迁移到 RDS MySQL 时,会自动将 MyISAM 引擎转换成 InnoDB 引擎。
  • 上云方式建议使用DTS迁移,客户实现业务的快速切换,减少停机时间,可兼容多种场景下的迁移上云,具体参考 其他数据库迁移到阿里云RDS 数据迁移方案概览



2、参数优化

  • 建议更改默认端口3306,变更为其他端口,避免非法扫描。
  • innodb_buffer_pool_size,设置为 {DBInstanceClassMemory*3/4},DBInstanceClassMemory是以GiB为单位设置为当前实例的内存大小。
  • 阿里云RDS部分参数未开放变更,可变更的更多参数优化建议参考管理参数



3、压测

  • 建议业务压测时覆盖全面,包括业务模拟测试、数据库性能压测、可用性验证和很多破坏性试验,多次验证无误后再将生产业务迁入云上环境。
  • 有些情况下可能只进行了 sysbench/TPCC 模拟测试,没有将业务的类似 prepare 长链接做到标准模拟,就有可能会出现一些链接长时间占用引起某些异常,最终导致内存OOM的情况,具体案例后续再写下来。



三、备份恢复

  • 目前阿里云 RDS MySQL 数据库提供自动备份,并且是默认开启的,默认最少2次/周全量备份,保留7天,默认是开启了日志备份,已达到按时间点恢复的模式。如果有需求,RDS MySQL也支持库表备份跨地域备份备份下载的时候一定要使用规范的命令和方式。
  • 如果您选购了云盘类型的存储,就可以使用快照备份了,效率很高,上T数据量可实现分钟级备份,还原的时候也很快就可以完成。
  • 本地盘的物理备份使用的是 Xtrabackup 的拷贝物理文件的形式进行的,效率相较于快照备份较慢一些,备份完成会不落地转存到OSS存储,如果数据量有500G左右,大约需要4小时进行备份,需要客户合理安排备份时间。
  • 需要注意,备份对业务性能都会有一定的影响,建议业务低峰操作。
  • 如果想要恢复误释放的实例,RDS MySQL就可以实现的,前提是备份设置中开启了实例释放后保留备份,但是可能也会带来一定的存储费用问题。
  • 如果您想通过备份文件恢复到云上本地数据库,RDS MySQL 也是支持物理/逻辑备份的,方便快捷。
  • 基于安全合规的要求,RDS MySQL是存在周期性备份的,技术圈中的“从删库到跑路”在阿里云上是不存在的,即使 RDS 内部账号的存在恶意清理,云上备份也可以保您万事无忧。



四、运维

1、建表规范

  • 基于阿里云其他相关产品和工具结合使用的基础上,建议大家为每张表都创建主键,没有明确的业务主键属性的话,可以创建额外非业务属性的主键列。目前阿里云也提供了隐式主键功能,该功能在新版架构中已默认开启,但存量实例表需要变更才能使用,保证row模式Binlog可以快速应用,避免主备/从延迟。
  • 自增ID的使用情况,需要根据业务情况使用,需要注意的是,数据库重启或者变配操作,可能会导致自增ID重置归零,需要重新。
  • 阿里云对单表的大小和数据量和社区版MySQL一样,受限于OS,为了保证良好的性能优势,建议控制单表数据量在 2000w 条以内,大小 10GB 以内。如果由于表数量大约超过 1w 而出现性能下降时,大概率是因为 InnoDB 操作数据文件导致的,可以增加table_open_cache 和 table_definition_cache 两个参数的大小来优化下。需要注意的是,单库表数量不建议超过60w,否则无法进行数据备份,且超过5w无法进行单库表恢复。
  • RDS MySQL 不支持 MyISAM 引擎和 Memory 引擎,若有 Memory 引擎的需求建议使用云数据库 Redis、Tair。
  • 更多业内常见的建表规范,大家参考 Google 和数据库设计三大范式即可。



2、SQL使用规范

  • RDS MySQL 做 Online ddl 操作可以使用的工具请参考 原生命令DMS无锁变更,不建议使用pt-online-schema-change,可能会导致数据传输DTS无法使用。
  • 这类规范也是参考业内常见的约束即可,Google 搜索很多相关内容可供参考,建议大家参考的时候注意甄别,验证时使用测试环境校验。



3、安全相关

  • 建议业务使用内网地址访问,白名单/安全组小范围开放。
  • 禁止使用弱密码,建议使用强密码定期更换,提升数据库实例安全性。
  • 按需授予业务用户相关最小化权限,一般只需要 select/DML 相关库级别权限即可。
  • 账号的使用时,建议较专业的DBA在控制台维护高权限账号,业务和其他账号使用命令行方式维护和配置,只允许特定 IP 或 IP 段业务访问。这样配置的原因是RDS控制台配置的账号都是user@%权限,允许IP访问范围太大,因此建议账号分离。
  • 如果内网访问时,建议ECS客户端机器和RDS实例位于同一账号/地域/VPC下,跨VPC或VPC-经典网络不通,目前RDS MySQL不建议使用经典网络以及IPV6网段的网络了。
  • 考虑到 RDS MySQL 的稳定和安全性,RDS MySQL限制了 super、shutdown、file 权限,有时在数据库中执行 set global xxx时,会报错:#1227-Access denied;you need(at least one of)the SUPER privilege (s) for this operation.
  • 解决:可以在 RDS 控制台的实例管理页的数据库管理 > 参数设置功能完成参数修改。



4、空间相关

磁盘空间总体使用量

数据空间使用量

user_data_size

日志空间使用量

undolog_size + binlog_size + general_log_size +

redolog_size + relaylog_size + slowlog_size

临时文件空间使用量

temp_file_size

系统文件空间使用量

sys_data_size

注:单位:MByte。

1、这里 general_log_size 的监控并非客户真正开启了 general_log,这里记录了ALISQL_PERFORMANCE_AGENT等性能监控信息采集的日志,来源是 Performance agent。「显示优化中」

2、如果客户开启了general_log ,空间记录是在sys_data_size中。


  • DAS 产品侧推出来空间分析功能,可以通过这个功能进行数据库磁盘占用和空间碎片的情况,如何回收参见空间碎片自动回收
  • 上述可能存在磁盘打满的各种问题,我们放在后面的实践案例中进行解决方案的讨论。



5、性能相关

  • 如果 RDS 实例出现了卡慢的现象,不建议进行重启等相关操作,关系型数据库和NoSQL不同,对于Redis来说,重启能解决99%的问题,但 MySQL 不行,如果存在很多事务的情况下,重启只会带来实例的recovery和undo的回滚,数据库不可用的时间只会更长。需要确认数据库的运行、监控指标、慢SQL、DDL操作等情况,具体的操作业内有很多参考,可自行获取。
  • 目前阿里云上的业务以互联网交易类居多,建议如果有类似大促、双11等情况前,提前预估访问量,提前规划规格升级事宜,保证存储磁盘空间充裕。其他可供参考的优化有弹性伸缩binlog的清理策略等。




五、Q&A

Q:RDS MySQL的内存是怎么使用的?如何计算?

A:RDS MySQL目前使用内存时,很多时候遇到问题,售后反馈是内存OOM了,可是,在监控中看到的内存使用,其实并没有达到100%,可能92%左右监控就断掉了,原因是RDS划分的这块通用型/独享型规格实例的资源,会存在一些监控、HA探活、管控任务等很多线程级别的资源占用,但并不会自动计入RDS的监控中。数据库自身的内存使用,可以参考具体 MySQL 内存计算公式


Q:HA是任何时候都可以有效进行故障切换的吗?

A:并不是的,如果存在备库延迟HA便不会failover,原因很简单,此时的切换无法保证主备一致性,因此HA再判定逻辑上是无法切换的。


Q:如果跨VPC或者本地IDC机房如何内网连接RDS MySQL呢?

A:一般来说,同地域跨VPC的话,可以通过VPC对等连接来实现内网访问,不同地域的话,可以参考使用云企业网CEN,具体方案参考跨VPC互联概述

如果是本地IDC机房连接的话,参考连接本地IDC


Q:为什么云盘的延迟会高于本地SSD盘,但IOPS就更优呢?

A:因为云盘实例的 IO 操作需要经过网络链路,请求的 send/return 耗时就会长,因此 RT 就高,而本地SSD盘的数据直接落盘到本地,RT就低。IOPS高是由于 ESSD的云盘存储系统内部采用了更高效的通信机制,相关测试证明 PL3 级别IOPS最高可达 1000000,而本地盘物理机独享型的 IOPS 最高只能到 144000。


Q:RDS使用时还有什么其他限制嘛?

A:关于RDS MySQL使用的其他限制



六、总结

文章通篇下来总结其实就是售后在运维和使用 RDS MySQL 中遇到的一些问题,提前给大家暴露出来,不管您是处理客户问题,还是自己部署维护需要,只要有其中一个知识点能带给大家一点点收获,目的也就达成啦,感谢您的查阅,祝您生活愉快。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
18天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
20天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
160 11
|
2月前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~
|
2月前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
15天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
58 13
MySQL的安装&数据库的简单操作
|
21天前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
2天前
|
关系型数据库 Unix MySQL
MySQL是一种关系型数据库管理系统
MySQL是一种关系型数据库管理系统
11 2
|
5天前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
17 2
|
10天前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
22 4
|
2月前
|
人工智能 小程序 关系型数据库
【MySQL】黑悟空都掌握的技能,数据库隔离级别全攻略
本文以热门游戏《黑神话:悟空》为契机,深入浅出地解析了数据库事务的四种隔离级别:读未提交、读已提交、可重复读和串行化。通过具体示例,展示了不同隔离级别下的事务行为差异及可能遇到的问题,如脏读、不可重复读和幻读等。此外,还介绍了在MySQL中设置隔离级别的方法,包括全局和会话级别的调整,并通过实操演示了各隔离级别下的具体效果。本文旨在帮助开发者更好地理解和运用事务隔离级别,以提升数据库应用的一致性和性能。
122 2
【MySQL】黑悟空都掌握的技能,数据库隔离级别全攻略

相关产品

  • 云数据库 RDS MySQL 版
  • 云数据库 RDS
  • 下一篇
    无影云桌面