Azure数据库迁移:从Single Server到Flexible Server #
概述 #
Azure Database for MySQL和PostgreSQL的Single Server版本即将退役,需要迁移到更现代化的Flexible Server架构。本文档提供完整的迁移指南和最佳实践。
为什么要迁移? #
Single Server的限制 #
- 性能限制:计算和存储紧密耦合
- 功能受限:缺少高级功能和自定义配置
- 扩展性差:垂直扩展选项有限
- 即将停用:Microsoft计划停止支持
Flexible Server的优势 #
- 灵活架构:计算和存储解耦
- 更好性能:支持更多计算规格
- 高可用性:内置高可用性选项
- 成本优化:按需付费模式
- 高级功能:支持更多数据库功能
迁移策略 #
1. 评估阶段 #
当前环境分析 #
# 检查当前数据库配置
az mysql server show --resource-group <rg-name> --name <server-name>
# 查看数据库列表
az mysql db list --resource-group <rg-name> --server-name <server-name>
# 检查当前工作负载
az monitor metrics list --resource <resource-id> --metric "cpu_percent,memory_percent"
兼容性检查 #
- 版本兼容性:确认数据库版本支持
- 功能兼容性:检查使用的功能是否支持
- 连接字符串:更新应用程序连接配置
2. 迁移方法 #
方法一:Azure Database Migration Service (DMS) #
graph LR
A[Source Single Server] --> B[Azure DMS]
B --> C[Target Flexible Server]
B --> D[监控和验证]
优点:
- 自动化程度高
- 支持最小停机时间
- 内置验证功能
方法二:mysqldump/pg_dump #
# MySQL导出
mysqldump -h source-server.mysql.database.azure.com \
-u username@source-server -p \
--single-transaction --routines --triggers \
database_name > backup.sql
# 导入到Flexible Server
mysql -h target-server.mysql.database.azure.com \
-u username -p \
database_name < backup.sql
方法三:Azure CLI迁移命令 #
# 创建迁移任务
az mysql flexible-server migration create \
--resource-group <rg-name> \
--name <migration-name> \
--source-server <source-server> \
--target-server <target-server>
详细迁移步骤 #
步骤1:准备Flexible Server #
# 创建Flexible Server
az mysql flexible-server create \
--resource-group <rg-name> \
--name <new-server-name> \
--location <location> \
--admin-user <admin-username> \
--admin-password <admin-password> \
--sku-name Standard_B2s \
--tier Burstable \
--storage-size 20 \
--version 8.0
步骤2:配置网络和安全 #
# 配置防火墙规则
az mysql flexible-server firewall-rule create \
--resource-group <rg-name> \
--name <server-name> \
--rule-name AllowAll \
--start-ip-address 0.0.0.0 \
--end-ip-address 255.255.255.255
# 配置VNet集成(如果需要)
az mysql flexible-server vnet-rule create \
--resource-group <rg-name> \
--name <server-name> \
--vnet-rule-name <rule-name> \
--vnet-name <vnet-name> \
--subnet <subnet-name>
步骤3:执行数据迁移 #
使用DMS迁移 #
- 创建DMS项目
- 配置源和目标
- 选择数据库
- 运行迁移
- 监控进度
使用脚本迁移 #
#!/bin/bash
# 迁移脚本示例
SOURCE_HOST="source-server.mysql.database.azure.com"
TARGET_HOST="target-server.mysql.database.azure.com"
USERNAME="admin_user"
DATABASE_LIST=("db1" "db2" "db3")
for db in "${DATABASE_LIST[@]}"; do
echo "Migrating database: $db"
# 导出数据
mysqldump -h $SOURCE_HOST -u $USERNAME -p \
--single-transaction --routines --triggers \
$db > ${db}_backup.sql
# 创建目标数据库
mysql -h $TARGET_HOST -u $USERNAME -p \
-e "CREATE DATABASE IF NOT EXISTS $db;"
# 导入数据
mysql -h $TARGET_HOST -u $USERNAME -p \
$db < ${db}_backup.sql
echo "Migration completed for: $db"
done
步骤4:验证迁移 #
-- 检查表数量
SELECT COUNT(*) FROM information_schema.tables
WHERE table_schema = 'your_database';
-- 检查数据行数
SELECT table_name, table_rows
FROM information_schema.tables
WHERE table_schema = 'your_database';
-- 验证索引
SHOW INDEX FROM your_table;
步骤5:更新应用程序 #
连接字符串更新 #
# 旧的连接字符串 (Single Server)
OLD_CONNECTION = "mysql://username@servername:[email protected]:3306/database"
# 新的连接字符串 (Flexible Server)
NEW_CONNECTION = "mysql://username:[email protected]:3306/database"
配置文件更新 #
# application.yml
spring:
datasource:
url: jdbc:mysql://new-server.mysql.database.azure.com:3306/mydb
username: myuser
password: ${DB_PASSWORD}
driver-class-name: com.mysql.cj.jdbc.Driver
最佳实践 #
1. 迁移前准备 #
- 备份验证:确保现有备份可用
- 停机窗口:规划合适的维护窗口
- 回滚计划:准备回滚策略
- 性能基线:记录当前性能指标
2. 迁移过程中 #
- 分批迁移:对于大型数据库,考虑分批迁移
- 实时监控:监控迁移进度和性能
- 数据验证:持续验证数据完整性
- 日志记录:详细记录迁移过程
3. 迁移后优化 #
- 性能调优:根据新环境调整配置
- 监控设置:配置新的监控和告警
- 备份策略:更新备份和恢复策略
- 文档更新:更新相关文档和流程
常见问题和解决方案 #
连接问题 #
# 测试连接
mysql -h server.mysql.database.azure.com -u username -p
# 检查防火墙规则
az mysql flexible-server firewall-rule list \
--resource-group <rg-name> --name <server-name>
性能问题 #
-- 检查慢查询
SELECT * FROM mysql.slow_log WHERE start_time > '2024-01-01';
-- 优化表
OPTIMIZE TABLE your_table;
权限问题 #
-- 检查用户权限
SHOW GRANTS FOR 'username'@'%';
-- 授予权限
GRANT ALL PRIVILEGES ON database.* TO 'username'@'%';
监控和维护 #
关键指标监控 #
- CPU使用率
- 内存使用率
- 存储使用率
- 连接数
- 查询性能
告警配置 #
# 创建CPU使用率告警
az monitor metrics alert create \
--name "High CPU Usage" \
--resource-group <rg-name> \
--scopes <resource-id> \
--condition "avg cpu_percent > 80" \
--description "CPU usage is above 80%"
成本优化 #
1. 正确选择规格 #
- Burstable:适用于轻载工作负载
- General Purpose:适用于大多数工作负载
- Memory Optimized:适用于内存密集型应用
2. 存储优化 #
- 按需扩展:根据实际需求调整存储
- 备份保留:合理设置备份保留期
- 预留实例:考虑长期使用的预留折扣
总结 #
迁移到Flexible Server是一个重要的架构升级,能够带来更好的性能、灵活性和成本效益。通过careful planning和proper execution,可以实现smooth migration with minimal downtime。
关键要点 #
- 提前规划:充分评估和准备
- 选择合适的迁移方法:根据业务需求选择
- 充分测试:在生产环境迁移前进行充分测试
- 持续优化:迁移后持续监控和优化
注意:本文档基于Azure Database迁移最佳实践整理,具体实施时请根据实际环境调整。