Azure SQL 数据库 #

什么是 Azure SQL 数据库? #

Azure SQL 数据库是完全托管的关系型数据库服务,基于 Microsoft SQL Server 引擎。

text
┌─────────────────────────────────────────────────────────────┐
│                    Azure SQL 数据库概览                      │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  特点                                                        │
│  ├── 完全托管:无需管理基础设施                             │
│  ├── 高可用:99.99% SLA                                     │
│  ├── 自动扩展:弹性扩展                                     │
│  ├── 内置智能:自动优化                                     │
│  └── 安全合规:内置安全功能                                 │
│                                                             │
│  部署选项                                                    │
│  ├── 单一数据库:独立数据库                                 │
│  ├── 弹性池:资源共享                                       │
│  └── 托管实例:实例级兼容                                   │
│                                                             │
│  适用场景                                                    │
│  ├── 云原生应用                                             │
│  ├── SaaS 应用                                              │
│  ├── 企业应用                                               │
│  └── 数据仓库                                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

购买模型 #

vCore 模型 #

text
┌─────────────────────────────────────────────────────────────┐
│                    vCore 购买模型                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  服务层级                                                    │
│  ├── 通用目的 (General Purpose)                             │
│  │   ├── 平衡计算和存储                                     │
│  │   ├── 适合大多数工作负载                                 │
│  │   └── 2-80 vCore                                        │
│  │                                                         │
│  ├── 业务关键 (Business Critical)                           │
│  │   ├── 高性能、低延迟                                     │
│  │   ├── 本地 SSD 存储                                      │
│  │   └── 2-80 vCore                                        │
│  │                                                         │
│  └── 超大规模 (Hyperscale)                                  │
│      ├── 超大存储                                           │
│      ├── 快速恢复                                           │
│      └── 2-128 vCore                                       │
│                                                             │
│  硬件代数                                                    │
│  ├── Gen5: Intel Ice Lake                                  │
│  ├── Fsv2: Intel Skylake                                   │
│  └── DC: AMD EPYC                                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

DTU 模型 #

text
┌─────────────────────────────────────────────────────────────┐
│                    DTU 购买模型                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  服务层级                                                    │
│  ├── 基本 (Basic)                                           │
│  │   ├── 5 DTU                                              │
│  │   ├── 2 GB 存储                                          │
│  │   └── 适合小型应用                                       │
│  │                                                         │
│  ├── 标准 (Standard)                                         │
│  │   ├── 10-3000 DTU                                        │
│  │   ├── 250 GB - 1 TB                                      │
│  │   └── 适合生产应用                                       │
│  │                                                         │
│  └── 高级 (Premium)                                          │
│      ├── 125-4000 DTU                                       │
│      ├── 500 GB - 4 TB                                      │
│      └── 适合关键应用                                       │
│                                                             │
│  DTU = 数据库事务单位                                        │
│  └── 综合 CPU、内存、I/O 的度量                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

创建 SQL 数据库 #

使用 Azure CLI #

bash
# 创建资源组
az group create --name myResourceGroup --location eastus

# 创建 SQL Server
az sql server create \
  --name mysqlserver \
  --resource-group myResourceGroup \
  --location eastus \
  --admin-user sqladmin \
  --admin-password "P@ssw0rd123!"

# 创建 SQL 数据库
az sql db create \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name myDatabase \
  --service-objective S0 \
  --tier Standard

# 查看数据库
az sql db show \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name myDatabase

使用 Azure 门户 #

text
┌─────────────────────────────────────────────────────────────┐
│                    创建 SQL 数据库步骤                       │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  步骤 1: 基本信息                                            │
│  ├── 订阅选择                                               │
│  ├── 资源组选择/创建                                        │
│  ├── 数据库名称                                             │
│  └── 服务器选择/创建                                        │
│                                                             │
│  步骤 2: 计算+存储                                           │
│  ├── 购买模型:vCore/DTU                                    │
│  ├── 服务层级                                               │
│  ├── 计算规格                                               │
│  └── 存储大小                                               │
│                                                             │
│  步骤 3: 网络                                                │
│  ├── 连接方式:公网/私有端点                                │
│  ├── 防火墙规则                                             │
│  └── VNet 规则                                              │
│                                                             │
│  步骤 4: 安全                                                │
│  ├── Azure AD 管理员                                        │
│  └── 数据加密                                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

连接数据库 #

连接字符串 #

text
┌─────────────────────────────────────────────────────────────┐
│                    连接字符串                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ADO.NET                                                     │
│  Server=tcp:mysqlserver.database.windows.net,1433;          │
│  Database=myDatabase;                                       │
│  User ID=sqladmin;                                          │
│  Password=P@ssw0rd123!;                                     │
│  Encrypt=True;                                              │
│  TrustServerCertificate=False;                              │
│                                                             │
│  JDBC                                                        │
│  jdbc:sqlserver://mysqlserver.database.windows.net:1433;    │
│  database=myDatabase;                                       │
│  user=sqladmin@mysqlserver;                                 │
│  password=P@ssw0rd123!;                                     │
│  encrypt=true;                                              │
│  trustServerCertificate=false;                              │
│                                                             │
│  Node.js (mssql)                                            │
│  mssql://sqladmin:P@ssw0rd123!@mysqlserver.database.windows.net:1433/myDatabase?encrypt=true
│                                                             │
└─────────────────────────────────────────────────────────────┘

使用 SQL Server Management Studio #

bash
# 下载 SSMS
# https://aka.ms/ssmsfullsetup

# 连接信息
服务器名称: mysqlserver.database.windows.net
身份验证: SQL Server 身份验证
登录名: sqladmin
密码: P@ssw0rd123!

使用 Azure Data Studio #

bash
# 下载 Azure Data Studio
# https://aka.ms/azuredatastudio

# 连接信息同 SSMS

防火墙配置 #

bash
# 添加客户端 IP
az sql server firewall-rule create \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name AllowMyIP \
  --start-ip-address <your-ip> \
  --end-ip-address <your-ip>

# 允许 Azure 服务
az sql server firewall-rule create \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name AllowAzureServices \
  --start-ip-address 0.0.0.0 \
  --end-ip-address 0.0.0.0

数据库操作 #

基本操作 #

sql
-- 创建表
CREATE TABLE Users (
    Id INT PRIMARY KEY IDENTITY(1,1),
    Name NVARCHAR(100) NOT NULL,
    Email NVARCHAR(200) NOT NULL,
    CreatedAt DATETIME2 DEFAULT GETDATE()
);

-- 插入数据
INSERT INTO Users (Name, Email) VALUES 
    ('Alice', 'alice@example.com'),
    ('Bob', 'bob@example.com');

-- 查询数据
SELECT * FROM Users;

-- 更新数据
UPDATE Users SET Email = 'alice.new@example.com' WHERE Name = 'Alice';

-- 删除数据
DELETE FROM Users WHERE Name = 'Bob';

使用 Azure CLI #

bash
# 执行 SQL 查询
az sql db query \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name myDatabase \
  --query-text "SELECT * FROM Users"

# 导出数据库
az sql db export \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name myDatabase \
  --storage-uri https://mystorage.blob.core.windows.net/backup/mydb.bacpac \
  --storage-key <storage-key> \
  --storage-key-type StorageAccessKey \
  --admin-user sqladmin \
  --admin-password "P@ssw0rd123!"

# 导入数据库
az sql db import \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name myNewDatabase \
  --storage-uri https://mystorage.blob.core.windows.net/backup/mydb.bacpac \
  --storage-key <storage-key> \
  --storage-key-type StorageAccessKey \
  --admin-user sqladmin \
  --admin-password "P@ssw0rd123!"

弹性池 #

弹性池概念 #

text
┌─────────────────────────────────────────────────────────────┐
│                    弹性池                                    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                    弹性池                            │   │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐   │   │
│  │  │ 数据库1 │ │ 数据库2 │ │ 数据库3 │ │ 数据库4 │   │   │
│  │  │ (高负载)│ │ (低负载)│ │ (中等)  │ │ (空闲)  │   │   │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘   │   │
│  │                                                     │   │
│  │  共享资源池:eDTU 或 vCore                           │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  优势:                                                      │
│  ├── 成本优化:资源共享                                     │
│  ├── 性能灵活:按需使用                                     │
│  └── 管理简化:统一管理                                     │
│                                                             │
│  适用场景:                                                  │
│  ├── SaaS 多租户                                            │
│  ├── 多数据库应用                                           │
│  └── 负载波动大                                             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

创建弹性池 #

bash
# 创建弹性池
az sql elastic-pool create \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name myElasticPool \
  --db-dtu-max 100 \
  --db-dtu-min 10 \
  --dtu 200

# 添加数据库到池
az sql db update \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name myDatabase \
  --elastic-pool myElasticPool

高可用和灾难恢复 #

高可用选项 #

text
┌─────────────────────────────────────────────────────────────┐
│                    高可用选项                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  区域冗余                                                    │
│  ├── 跨可用区复制                                           │
│  ├── 自动故障转移                                           │
│  └── 99.995% SLA                                            │
│                                                             │
│  异地复制                                                    │
│  ├── 跨区域复制                                             │
│  ├── 可读次要副本                                           │
│  └── 手动故障转移                                           │
│                                                             │
│  自动故障转移组                                              │
│  ├── 自动故障转移                                           │
│  ├── 多数据库管理                                           │
│  └── 透明故障转移                                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

配置异地复制 #

bash
# 创建次要副本
az sql db replica create \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name myDatabase \
  --partner-server mysqlserver-secondary \
  --partner-resource-group myResourceGroup

# 故障转移
az sql db replica set-primary \
  --resource-group myResourceGroup \
  --server mysqlserver-secondary \
  --name myDatabase

性能优化 #

自动调优 #

bash
# 启用自动调优
az sql db tuning-option update \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name myDatabase \
  --options "forceLastGoodPlan=on,createIndex=on,dropIndex=on"

# 查看调优建议
az sql db recommended-action list \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name myDatabase

查询性能洞察 #

sql
-- 查看最耗资源的查询
SELECT TOP 10
    qs.query_id,
    qt.query_sql_text,
    qs.avg_duration / 1000.0 AS avg_duration_ms,
    qs.avg_cpu_time / 1000.0 AS avg_cpu_ms,
    qs.count_executions
FROM sys.query_store_query qs
JOIN sys.query_store_query_text qt ON qs.query_text_id = qt.query_text_id
ORDER BY qs.avg_duration DESC;

安全配置 #

数据加密 #

bash
# 启用透明数据加密 (TDE)
az sql db tde set \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name myDatabase \
  --status Enabled

# 使用客户管理的密钥
az sql db tde set \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --name myDatabase \
  --status Enabled \
  --encryption-protector-type AzureKeyVault \
  --server-key-name myKey

Azure AD 认证 #

bash
# 设置 Azure AD 管理员
az sql server ad-admin create \
  --resource-group myResourceGroup \
  --server mysqlserver \
  --display-name "Azure AD Admin" \
  --object-id <object-id>

最佳实践 #

性能建议 #

text
┌─────────────────────────────────────────────────────────────┐
│                    性能最佳实践                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 选择正确的服务层级                                       │
│     └── 根据工作负载特性选择                                │
│                                                             │
│  2. 使用连接池                                               │
│     └── 减少连接开销                                        │
│                                                             │
│  3. 优化查询                                                 │
│     └── 使用索引、避免全表扫描                              │
│                                                             │
│  4. 启用自动调优                                             │
│     └── 自动优化性能                                        │
│                                                             │
│  5. 监控性能                                                 │
│     └── 使用 Query Performance Insight                      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

安全建议 #

text
┌─────────────────────────────────────────────────────────────┐
│                    安全最佳实践                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 使用 Azure AD 认证                                       │
│     └── 替代 SQL 认证                                       │
│                                                             │
│  2. 启用 TDE                                                 │
│     └── 加密静态数据                                        │
│                                                             │
│  3. 限制网络访问                                             │
│     └── 使用私有端点                                        │
│                                                             │
│  4. 启用审计                                                 │
│     └── 记录数据库活动                                      │
│                                                             │
│  5. 定期备份                                                 │
│     └── 配置备份策略                                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

下一步 #

现在你已经掌握了 Azure SQL 数据库的使用,接下来学习 Cosmos DB 了解全球分布式数据库!

最后更新:2026-03-29