RDS MySQL 数据库运维简述

本文涉及的产品
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 从运维的视角,汇总云数据库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 中遇到的一些问题,提前给大家暴露出来,不管您是处理客户问题,还是自己部署维护需要,只要有其中一个知识点能带给大家一点点收获,目的也就达成啦,感谢您的查阅,祝您生活愉快。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
阿里云RDS云数据库全解析:产品功能、收费标准与活动参考
与云服务器ECS一样,关系型数据库RDS也是很多用户上云必买的热门云产品之一,阿里云的云数据库RDS主要包含RDS MySQL、RDS SQL Server、RDS PostgreSQL、RDS MariaDB等几个关系型数据库,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,帮助您解决数据库运维的烦恼。本文为大家介绍阿里云的云数据库 RDS主要产品及计费方式、收费标准以及活动等相关情况,以供参考。
|
2月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
2月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
MySQL 关系型数据库 RDS
RDS for MySQL CPU 性能问题分析
RDS for MySQL CPU 性能问题分析 RDS for MySQL CPU 使用率高是使用 RDS for MySQL 实例过程中比较常见的一类性能问题。 由于实例 CPU 资源打满会直接导致业务受损,且问题发生过程迅速、临界时间短 统计采集困难、问题发生后统计指标呈反向曲线,加之日常运维过程中问题征兆容易被忽视,非常容易导致用户体感问题突然性强烈,因此在这里我们对 RDS for MySQL 的 CPU 使用率高的原因做一个比较详细的分析说明。
2573 57
|
MySQL 关系型数据库 数据库

相关产品

  • 云数据库 RDS MySQL 版
  • 云数据库 RDS
  • 推荐镜像

    更多
    下一篇
    oss云网关配置