6.5 KiB
第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:备用数据库(实时同步) │
└─────────────────────────────────┘
工作原理:
- 平时所有读写都走主数据库
- 主数据库的每一笔写入都实时同步到备用数据库
- 如果主数据库挂了,AWS 自动在 60-120 秒内切换到备用数据库
- 你的应用不需要改任何代码(因为连接地址没变,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 密码连接:创建专用的数据库用户,给最小权限
今天的小测验
- 用 RDS 和自己在 EC2 上装数据库,最大的区别是什么?
- Multi-AZ 解决什么问题?只读副本解决什么问题?
- 为什么 Multi-AZ 的备用数据库不能用来读取数据?
- Aurora 相比普通 MySQL RDS 有什么优势?
延伸阅读
明天预告
明天学习 DynamoDB——AWS 的 NoSQL 数据库。它和 RDS 完全不同:没有表结构、没有 SQL、但能处理每秒数百万次请求且延迟稳定在个位数毫秒。