# 第14天:RDS——托管关系型数据库 ## 今天你将学到什么 今天学习 RDS(Relational Database Service),AWS 的托管数据库服务。简单说就是:AWS 帮你装好数据库、帮你备份、帮你打补丁、帮你做高可用,你只管用。 --- ## 为什么不自己装数据库 你完全可以在 EC2 上自己安装 MySQL。但这意味着你要负责: | 你要做的事 | 频率 | 难度 | |-----------|------|------| | 安装数据库软件 | 一次 | 中 | | 配置参数调优 | 偶尔 | 高 | | 定期备份 | 每天 | 中 | | 测试备份能否恢复 | 每月 | 高 | | 打安全补丁 | 每月 | 中 | | 版本升级 | 每年 | 高 | | 配置主从复制(高可用) | 一次 | 很高 | | 主库挂了手动切换 | 紧急 | 很高 | | 磁盘快满了扩容 | 偶尔 | 中 | | 监控性能问题 | 持续 | 高 | **用 RDS 的话**:以上所有事情 AWS 帮你做。你只需要关心: - 数据库表怎么设计 - SQL 查询怎么写 - 应用怎么连接数据库 **生活类比**:自己装数据库就像自己养一头奶牛(要喂草、挤奶、看病)。用 RDS 就像订牛奶(每天送到门口,你只管喝)。 --- ## RDS 支持哪些数据库 | 数据库引擎 | 特点 | 适合场景 | |-----------|------|----------| | MySQL | 最流行的开源数据库 | Web 应用、博客、电商 | | PostgreSQL | 功能最强的开源数据库 | 复杂查询、地理数据、JSON 数据 | | MariaDB | MySQL 的社区分支 | MySQL 的替代品 | | Oracle | 老牌商业数据库 | 传统企业应用 | | SQL Server | 微软的数据库 | .NET 应用 | | Aurora | AWS 自研,兼容 MySQL/PostgreSQL | **性能最好,推荐新项目使用** | **新手建议**:学习用 MySQL 或 PostgreSQL(免费、资料多)。正式项目推荐 Aurora(性能是普通 MySQL 的 5 倍)。 --- ## RDS 帮你做了什么 ### 自动备份 - 每天自动给数据库拍一次"快照" - 保留 1-35 天(你设置) - 支持**时间点恢复**:可以恢复到过去任意一秒的状态 **举个例子**:今天下午 3 点有人误删了一张重要的表。你可以把数据库恢复到下午 2:59 的状态,数据就回来了。 ### 自动打补丁 - 数据库软件有安全漏洞时,AWS 自动帮你更新 - 在你指定的维护窗口执行(比如每周日凌晨 3 点) - 不需要你操心 ### 监控 - 自动收集 CPU、内存、磁盘、连接数等指标 - 可以设置告警(比如磁盘使用率超过 80% 就通知你) --- ## 高可用:Multi-AZ(多可用区部署) 这是 RDS 最重要的功能之一。 ### 问题:数据库挂了怎么办? 如果你的数据库只有一台,它所在的数据中心停电了、硬盘坏了、或者发生了任何故障,你的整个应用就瘫痪了。 ### 解决方案:Multi-AZ 开启 Multi-AZ 后,AWS 会自动在另一个可用区创建一个**备用数据库**: ``` 你的应用 ↓ 数据库连接地址(DNS) ↓ ┌─────────────────────────────────┐ │ 可用区 A:主数据库(处理所有读写)│ │ 可用区 B:备用数据库(实时同步) │ └─────────────────────────────────┘ ``` **工作原理**: 1. 平时所有读写都走主数据库 2. 主数据库的每一笔写入都实时同步到备用数据库 3. 如果主数据库挂了,AWS 自动在 60-120 秒内切换到备用数据库 4. 你的应用不需要改任何代码(因为连接地址没变,DNS 自动指向新的主库) **你的用户甚至感觉不到数据库切换了。** --- ## 只读副本(Read Replica) ### 问题:数据库读取压力太大怎么办? 很多应用是"读多写少"的——比如电商网站,浏览商品(读)的人远多于下单(写)的人。一台数据库扛不住这么多读取请求。 ### 解决方案:只读副本 创建一个或多个"只读副本",专门处理读取请求: ``` 你的应用 ├── 写操作(下单、修改资料)→ 主数据库 └── 读操作(浏览商品、查看订单)→ 只读副本 1 / 只读副本 2 ``` **特点**: - 数据从主库异步复制到只读副本(有轻微延迟,通常几毫秒) - 最多可以创建 5 个只读副本(Aurora 可以 15 个) - 可以跨 Region 创建(让全球用户就近读取) ### Multi-AZ vs 只读副本 | | Multi-AZ | 只读副本 | |--|----------|----------| | 目的 | 高可用(防故障) | 性能扩展(分担读取压力) | | 能否读取 | 不能(纯备份) | 能(专门用来读) | | 数据同步 | 同步(实时) | 异步(有轻微延迟) | | 故障切换 | 自动 | 需要手动提升为主库 | | 跨 Region | 不支持 | 支持 | **两者可以同时使用**:Multi-AZ 保证不挂,只读副本保证不慢。 --- ## Aurora:AWS 的王牌数据库 Aurora 是 AWS 自己重新设计的数据库引擎,兼容 MySQL 和 PostgreSQL(意味着你的代码不用改),但性能和可靠性远超标准版本。 **Aurora 的优势**: - 性能是标准 MySQL 的 **5 倍** - 存储自动增长(10GB 到 128TB),不需要预设 - 数据自动复制 **6 份**,分布在 3 个可用区 - 即使丢失 2 份数据仍可写入,丢失 3 份仍可读取 **Aurora Serverless**: - 自动根据负载调整计算能力 - 没有请求时可以缩到 0(不收计算费) - 适合流量不稳定的应用、开发测试环境 --- ## 安全配置 - **放在私有子网**:数据库不应该有公网 IP,只允许应用服务器访问 - **安全组**:只开放数据库端口(MySQL 3306,PostgreSQL 5432)给应用服务器 - **加密**:启用存储加密和传输加密 - **不要用 Root 密码连接**:创建专用的数据库用户,给最小权限 --- ## 今天的小测验 1. 用 RDS 和自己在 EC2 上装数据库,最大的区别是什么? 2. Multi-AZ 解决什么问题?只读副本解决什么问题? 3. 为什么 Multi-AZ 的备用数据库不能用来读取数据? 4. Aurora 相比普通 MySQL RDS 有什么优势? --- ## 延伸阅读 - [RDS 用户指南](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/) - [Aurora 用户指南](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/) - [RDS 免费套餐详情](https://aws.amazon.com/rds/free/) --- ## 明天预告 明天学习 DynamoDB——AWS 的 NoSQL 数据库。它和 RDS 完全不同:没有表结构、没有 SQL、但能处理每秒数百万次请求且延迟稳定在个位数毫秒。