本教程介绍如何将 Microsoft SQL Server 2022 数据库直接备份到 Cloud Storage 存储桶,并在以后恢复该数据库。SQL Server 备份原生功能于 SQL Server 2022 中推出,可为基于云的灾难恢复和数据迁移提供无缝且经济高效的策略。
SQL Server 备份原生功能利用支持与 S3 兼容的对象存储(包括 Cloud Storage)的 BACKUP TO URL
和 RESTORE FROM URL
命令。这样一来,您无需使用中间本地存储空间,从而简化备份工作流程并减少运营开销。
本教程面向数据库管理员和工程师。
目标
本教程介绍了如何完成以下任务来实现目标:- 创建新的 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.
-
Make sure 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 用户账号具有备份数据库和备份日志权限。
创建 Cloud Storage 存储桶
您可以使用 Google Cloud 控制台或使用 gcloud storage
命令创建 Cloud Storage 存储桶。
如需使用 gcloud storage
命令创建 Cloud Storage 存储桶,请按以下步骤操作。
选择您的 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
:存储桶的位置。
配置 S3 互操作性并创建访问密钥
如需允许 SQL Server 使用 S3 协议与 Cloud Storage 通信,您必须启用互操作性并生成访问密钥,具体步骤如下:
在 Google Cloud 控制台中,前往 Cloud Storage 设置。
选择互操作标签页。
在您用户账号的访问密钥下,点击创建密钥。
请妥善保存生成的访问密钥和密钥。您将在下一步中用到它们。
对于生产环境,我们建议您使用服务账号基于哈希的消息认证码 (HMAC) 密钥,以提高安全性和管理效率。
向 SQL Server 添加凭据
如需允许 SQL Server 通过 Cloud Storage 存储桶进行身份验证,您必须在 SQL Server 中创建一个凭据对象来存储 Cloud Storage 访问密钥和密码。为此,请在 SQL Server Management Studio (SSMS) 中运行以下 T-SQL 命令。
CREATE CREDENTIAL CREDENTIAL_NAME WITH IDENTITY = 'S3 Access Key', SECRET = 'ACCESS_KEY:SECRET';
替换以下内容:
CREDENTIAL_NAME
:为您的凭据命名。ACCESS_KEY
:您在上一部分中创建的访问密钥。SECRET
:使用您在上一部分中创建的 Secret。
IDENTITY = 'S3 Access Key'
至关重要,因为它会告知 SQL Server 使用新的 S3 连接器。密钥应采用以下格式:访问密钥,后跟英文冒号,然后是私有密钥。
示例:
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;
替换以下内容:
CREDENTIAL_NAME
您在第 3 步中创建的凭据的名称。例如 -sql_backup_credentials
。BUCKET_NAME
您在第 1 步中创建的存储桶的名称。FOLDER_NAME
您要将备份文件存储到的文件夹的名称。BACKUP_FILE_NAME
备份文件的名称。
该命令中使用的备份参数的说明如下:
FORMAT
:覆盖现有备份文件并创建新的介质集。STATS
:报告备份进度。COMPRESSION
:压缩备份,从而减小文件大小并缩短上传时间。MAXTRANSFERSIZE
:建议使用,以避免出现大型备份文件的 I/O 错误。
如需了解详情,请参阅 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 账号产生费用,请执行以下操作:
删除项目
- 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 架构中心。