防止 Azure Database for MySQL 灵活服务器被意外删除,并恢复数据

意外删除关键的 Azure 资源(例如 Azure Database for MySQL 灵活服务器)可能会中断作并损害业务连续性。 本文概述了如何使用 Azure 资源锁和 Azure Policy 防止意外删除,以及如何使用 Azure CLI 恢复已删除的服务器。

Azure 提供内置机制来保护资源免受意外删除的影响。 这些机制包括:

  • Azure 资源锁:防止删除资源或资源组。
  • Azure Policy:强制实施组织标准并保护关键基础结构。
  • Azure CLI 恢复命令:尽可能还原已删除的服务器。

防止意外删除

可以在资源和资源组级别应用资源锁。 这些锁会覆盖用户权限以防止删除。

锁定 MySQL 灵活服务器

az lock create \
 --name "PreventDeleteLock" \
  --resource-group <RESOURCE_GROUP_NAME> \
 --resource-name <MYSQL_SERVER_NAME> \
  --resource-type "Microsoft.DBforMySQL/flexibleServers" \
 --lock-type CanNotDelete

验证锁

az lock list \
 --resource-group <RESOURCE_GROUP_NAME> \
  --resource-name <MYSQL_SERVER_NAME> \
 --resource-type "Microsoft.DBforMySQL/flexibleServers" \
  -o table

删除锁

az lock delete \
 --name "PreventDeleteLock" \
  --resource-group <RESOURCE_GROUP_NAME> \
 --resource-name <MYSQL_SERVER_NAME> \
  --resource-type "Microsoft.DBforMySQL/flexibleServers"

锁定整个资源组

az lock create \
 --name "PreventDeleteGroupLock" \
  --resource-group <RESOURCE_GROUP_NAME> \
 --lock-type CanNotDelete

恢复已删除的服务器

如果意外删除了服务器,则可以使用 Azure CLI 和时间点还原(PITR)进行恢复(如果备份可用)。

使用 Azure CLI 还原

az mysql flexible-server restore \
 --resource-group <RESOURCE_GROUP_NAME> \
  --name <NEW_SERVER_NAME> \
 --source-server <DELETED_SERVER_NAME> \
  --restore-time <TIMESTAMP>

注释

确保将 <TIMESTAMP> 替换为删除前的时间戳。

最佳做法

  • 将锁应用于 CanNotDelete 关键资源和资源组。
  • 使用 Azure Policy 跨订阅强制使用锁定。
  • 定期测试还原过程,以确保恢复就绪。
  • 使用 Azure 活动日志监视锁定配置和审核更改。