本教程介绍如何将 Microsoft SQL Server 2022 数据库直接备份到 Cloud Storage 存储桶,并在之后恢复该数据库。SQL Server 2022 中推出了 SQL Server 备份原生功能,为基于云的灾难恢复和数据迁移提供了具有成本效益的无缝策略。
SQL Server 备份原生功能利用 BACKUP TO URL
和 RESTORE FROM URL
命令来实现,支持与 S3 兼容的对象存储(包括 Cloud Storage)。这样,省去了中间的本地存储环节,从而简化备份工作流、减少运维开销。
本教程面向数据库管理员和工程师。
创建 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 设置。
选择互操作标签页。
在您用户账号的访问密钥下,点击创建密钥。
请妥善保存生成的访问密钥和 Secret。在下一步中需要用到它们。
对于生产环境,建议您为服务账号使用基于哈希的消息认证码 (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';
替换以下内容:
- 将
CREDENTIAL_NAME
替换为凭证的名称。 - 将
ACCESS_KEY
替换为您在上一部分创建的访问密钥。 - 将
SECRET
替换为您在上一部分创建的 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;
替换以下内容:
- 将
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';
替换以下内容: