RDS MySQL 数据库运维简述

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 从运维的视角,汇总云数据库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 中遇到的一些问题,提前给大家暴露出来,不管您是处理客户问题,还是自己部署维护需要,只要有其中一个知识点能带给大家一点点收获,目的也就达成啦,感谢您的查阅,祝您生活愉快。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
关系型数据库 MySQL API
实时计算 Flink版产品使用合集之可以通过mysql-cdc动态监听MySQL数据库的数据变动吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
79 0
|
6天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
60 0
|
5天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
43 0
|
5天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(上)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
47 0
|
5天前
|
前端开发 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
37 0
|
6天前
|
SQL 关系型数据库 Serverless
阿里云关系型数据库RDS
阿里云关系型数据库RDS
58 18
|
6天前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
91 3
mysql 设置环境变量与未设置环境变量连接数据库的区别
|
SQL Java 数据库连接
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
141 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
105 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
|
存储 SQL 关系型数据库
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(五)-存储过程
113 0
MySQL---数据库从入门走向大神系列(五)-存储过程

相关产品

  • 云数据库 RDS MySQL 版