aws-doc/课程/第二阶段-核心服务/第14天-RDS托管数据库.md

187 lines
6.5 KiB
Markdown
Raw Normal View History

2026-05-08 10:24:39 +08:00
# 第14天RDS——托管关系型数据库
## 今天你将学到什么
今天学习 RDSRelational Database ServiceAWS 的托管数据库服务。简单说就是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 保证不挂,只读副本保证不慢。
---
## AuroraAWS 的王牌数据库
Aurora 是 AWS 自己重新设计的数据库引擎,兼容 MySQL 和 PostgreSQL意味着你的代码不用改但性能和可靠性远超标准版本。
**Aurora 的优势**
- 性能是标准 MySQL 的 **5 倍**
- 存储自动增长10GB 到 128TB不需要预设
- 数据自动复制 **6 份**,分布在 3 个可用区
- 即使丢失 2 份数据仍可写入,丢失 3 份仍可读取
**Aurora Serverless**
- 自动根据负载调整计算能力
- 没有请求时可以缩到 0不收计算费
- 适合流量不稳定的应用、开发测试环境
---
## 安全配置
- **放在私有子网**:数据库不应该有公网 IP只允许应用服务器访问
- **安全组**只开放数据库端口MySQL 3306PostgreSQL 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、但能处理每秒数百万次请求且延迟稳定在个位数毫秒。