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