本教程介绍如何将 Microsoft SQL Server 2022 数据库直接备份到 Cloud Storage 存储桶,并在之后恢复该数据库。SQL Server 2022 中推出了 SQL Server 备份原生功能,为基于云的灾难恢复和数据迁移提供了具有成本效益的无缝策略。
SQL Server 备份原生功能利用 BACKUP TO URL
和 RESTORE FROM URL
命令来实现,支持与 S3 兼容的对象存储(包括 Cloud Storage)。这样,省去了中间的本地存储环节,从而简化备份工作流、减少运维开销。
本教程面向数据库管理员和工程师。
目标
本教程介绍如何完成以下任务来实现目标:- 创建新的 Cloud Storage 存储桶
- 配置 SQL Server 连接器
- 备份数据库
- 通过备份恢复数据库
费用
在本文档中,您将使用 Google Cloud的以下收费组件:
如需根据您的预计使用量来估算费用,请使用价格计算器。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
在本教程中,您需要一个 Google Cloud 项目。您可创建一个新项目,也可选择已创建的项目:
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, activate Cloud Shell.
确保已安装并运行 Microsoft SQL Server 2022 或更高版本。
确保您的 Google Cloud 项目和 SQL Server 都具有执行备份和恢复任务所需的权限。
确保与访问密钥关联的用户或服务账号有权在 Cloud Storage 存储桶中创建和查看对象。
确保用于执行备份的 SQL Server 用户账号具有备份数据库和备份日志权限。
选择您的 Google Cloud 项目。
gcloud config set project PROJECT_ID
创建存储分区。 如需创建存储桶,请按如下所示运行
gcloud storage buckets create
命令。gcloud storage buckets create gs://BUCKET_NAME --location=BUCKET_LOCATION
替换以下内容:
- 将
BUCKET_NAME
替换为存储桶的唯一名称。 - 将
BUCKET_LOCATION
替换为存储桶所在位置。 在 Google Cloud 控制台中,前往 Cloud Storage 设置。
选择互操作标签页。
在您用户账号的访问密钥下,点击创建密钥。
请妥善保存生成的访问密钥和 Secret。在下一步中需要用到它们。
- 将
CREDENTIAL_NAME
替换为凭证的名称。 - 将
ACCESS_KEY
替换为您在上一部分创建的访问密钥。 - 将
SECRET
替换为您在上一部分创建的 Secret。 - 将
CREDENTIAL_NAME
替换为您在第 3 步中创建的凭证的名称。例如sql_backup_credentials
。 - 将
BUCKET_NAME
替换为您在第 1 步中创建的存储桶的名称。 - 将
FOLDER_NAME
替换为您要将备份文件存储到的文件夹的名称。 - 将
BACKUP_FILE_NAME
替换为备份文件的名称。 FORMAT
:覆盖现有备份文件并创建新的媒体集。STATS
:报告备份进度。COMPRESSION
:压缩备份,从而减小文件大小并缩短上传时间。MAXTRANSFERSIZE
:建议使用此参数,以避免因大型备份文件而出现 I/O 错误。- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
- 探索有关 Google Cloud 的参考架构、图表和最佳做法。查看我们的 Cloud 架构中心。
创建 Cloud Storage 存储桶
您可以使用 Google Cloud 控制台或使用
gcloud storage
命令创建 Cloud Storage 存储桶。如需使用
gcloud storage
命令创建 Cloud Storage 存储桶,请按以下步骤操作。配置 S3 互操作性并创建访问密钥
如要让 SQL Server 能够使用 S3 协议与 Cloud Storage 进行通信,您必须启用互操作性并生成访问密钥,具体步骤如下:
对于生产环境,建议您为服务账号使用基于哈希的消息认证码 (HMAC) 密钥,以提高安全性和增强管控性。
向 SQL Server 添加凭证
如要让 SQL Server 能够向 Cloud Storage 存储桶进行身份验证,您必须在 SQL Server 中创建一个凭证对象来存储 Cloud Storage 访问密钥和 Secret。为此,请在 SQL Server Management Studio (SSMS) 中运行以下 T-SQL 命令。
CREATE CREDENTIAL CREDENTIAL_NAME WITH IDENTITY = 'S3 Access Key', SECRET = 'ACCESS_KEY:SECRET';
替换以下内容:
请务必设置
IDENTITY = 'S3 Access Key'
,因为它会告知 SQL Server 使用新的 S3 连接器。Secret 应采用“访问密钥 + 英文冒号 + Secret 密钥”格式。示例:
CREATE CREDENTIAL sql_backup_credentials WITH IDENTITY = 'S3 Access Key', SECRET = 'GOOGGE3SVF7OQE5JRMLQ7KWB:b31Pl8Tx1ARJfdGOsbgMFQNbk3nPdlT2UCYzs1iC';
将数据备份到 Cloud Storage
有了凭证后,您现在可以使用
BACKUP DATABASE
命令和TO URL
选项将数据库直接备份到 Cloud Storage 存储桶。在网址前添加s3://storage.googleapis.com
前缀以使用 S3 连接器,如下所示。BACKUP DATABASE DATABASE_NAME TO URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME.bak' WITH CREDENTIAL = 'CREDENTIAL_NAME', FORMAT, STATS = 10, MAXTRANSFERSIZE = 10485760, COMPRESSION;
替换以下内容:
该命令中使用的备份参数的说明如下:
如需了解详情,请参阅 SQL Server 备份到与 S3 兼容的对象存储的网址。
对于非常大的数据库,您可以按如下方式将备份拆分为多个文件。
BACKUP DATABASE DATABASE_NAME TO URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME_0.bak', URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME_1.bak' -- ... more files WITH CREDENTIAL = 'CREDENTIAL_NAME', FORMAT, STATS = 10, MAXTRANSFERSIZE = 10485760, COMPRESSION;
从 Cloud Storage 恢复数据
您可以使用
RESTORE DATABASE
命令直接通过存储在 Cloud Storage 中的备份文件恢复数据库,如下所示。RESTORE DATABASE DATABASE_NAME FROM URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME.bak' WITH CREDENTIAL = 'CREDENTIAL_NAME';
替换以下内容:
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请执行以下操作:
删除项目
后续步骤
-