Резервное копирование SQL Server по URL-адресу хранилища объектов, совместимого с S3
Область применения: SQL Server 2022 (16.x)
В этой статье приведены основные понятия, требования и компоненты, необходимые для использования хранилища объектов, совместимого с S3, в качестве назначения резервного копирования. Функции резервного копирования и восстановления практически аналогичны работе с функцией Резервное копирование SQL Server по URL-адресу для Хранилища BLOB-объектов Azure в качестве типа устройства резервного копирования.
Сведения о поддерживаемых платформах см. в списке поставщиков хранилищ объектов, совместимых с S3.
Обзор
SQL Server 2022 (16.x) представляет интеграцию хранилища объектов с платформой данных, что позволяет интегрировать SQL Server с хранилищем объектов, совместимым с S3, в дополнение к служба хранилища Azure. Чтобы обеспечить эту интеграцию, SQL Server поддерживает соединитель S3, который использует REST API S3 для подключения к любому поставщику хранилища объектов, совместимого с S3. SQL Server 2022 (16.x) расширяет существующий синтаксис BACKUP/RESTORE TO/FROM URL, добавив поддержку нового соединителя S3 с помощью REST API.
URL-адреса, указывающие на S3-совместимые ресурсы, содержат префикс s3://
для указания того, что используется соединитель S3. URL-адреса, начинающиеся с s3://
всегда, предполагают, что базовый протокол .https
Ограничения для количества частей и размера файла
Для хранения данных поставщик хранилища объектов, совместимый с S3, должен разделить файлы в нескольких блоках, называемых частями, похожими на блочные BLOB-объекты в Хранилище BLOB-объектов Azure.
Каждый файл может быть разделен до 10 000 частей, каждый размер части составляет от 5 МБ до 20 МБ, этот диапазон управляется командой T-SQL BACKUP с помощью параметра MAXTRANSFERSIZE. Значение MAXTRANSFERSIZE
по умолчанию — 10 МБ, поэтому размер каждой части по умолчанию составляет 10 МБ.
Максимально поддерживаемый размер одного файла является результатом умножения 10 000 частей на MAXTRANSFERSIZE
. Если требуется резервное копирование большего файла, его необходимо разделить с чередованием до 64 URL-адресов. Максимальный поддерживаемый размер файла равен 10 000 частям, умноженным на MAXTRANSFERSIZE
URL-адресов.
Примечание.
Для изменения MAXTRANSFERSIZE
значений требуется использование СЖАТИЯ.
Необходимые условия для конечной точки S3
Конечная точка S3 должна быть настроена следующим образом:
- Необходимо настроить TLS. Предполагается, что все подключения будут безопасно передаваться по протоколу HTTPS, а не HTTP. Конечная точка проверяется сертификатом, установленным на узле ОС SQL Server.
- Учетные данные, созданные в хранилище объектов, совместимом с S3, с соответствующими разрешениями для выполнения операции. Пользователь и пароль, созданные на уровне хранения, называются
Access Key ID
иSecret Key ID
. Необходимо выполнить проверку подлинности в конечной точке S3. - Должен быть настроен хотя бы один контейнер. Не удается создать или настроить контейнеры из SQL Server 2022 (16.x).
Безопасность
Разрешения резервного копирования
Чтобы подключить SQL Server к хранилищу объектов, совместимым с S3, необходимо установить два набора разрешений, один на SQL Server, а также на уровне хранилища.
В SQL Server учетная запись пользователя, используемая для выдачи команд BACKUP или RESTORE, должна находиться в роли базы данных db_backupoperator с разрешениями на изменение разрешений учетных данных .
На уровне хранилища:
- В AWS S3 создайте пользовательскую роль и конкретное состояние, для которого требуется доступ к API S3. Для резервного копирования и восстановления требуются следующие разрешения: ListBucket (Обзор), PutObject (запись — для резервного копирования).
- В другом хранилище, совместимом с S3, пользователь (
Access Key ID
) должен иметь разрешения ListBucket и WriteOnly .
Восстановление разрешений
Если восстанавливаемая база данных не существуют, для выполнения инструкции RESTORE у пользователя должны быть разрешения CREATE DATABASE
. Если база данных существует, члены предопределенных ролей сервера sysadmin
и dbcreator
, а также владелец базы данных (dbo
) по умолчанию обладают разрешениями RESTORE.
Разрешения на выполнение инструкции RESTORE даются ролям, в которых данные о членстве всегда доступны серверу. Так как членство в предопределенной роли базы данных может быть проверено только тогда, когда база данных доступна и не повреждена, что не всегда имеет место при выполнении инструкции RESTORE, члены предопределенной роли базы данных db_owner
не имеют разрешений RESTORE.
На уровне хранилища:
- В AWS S3 создайте пользовательскую роль и конкретное состояние, для которого требуется доступ к API S3. Для резервного копирования и восстановления требуются следующие разрешения: ListBucket (Обзор), GetObject (чтение — для восстановления).
- В другом хранилище, совместимом с S3, пользователь (
Access Key ID
) должен иметь разрешения ListBucket и ReadOnly .
Поддерживаемые функции
Общие сведения о поддерживаемых функциях BACKUP
и RESTORE
:
- Размер одного файла резервной копии может составлять до 200 000 МиБ на URL-адрес (со значением
MAXTRANSFERSIZE
, установленном на 20 МБ). - Резервные копии можно чередовать не более чем по 64 URL-адресам.
- Зеркальное отображение поддерживается, но только по URL-адресам. Зеркальное отображение с помощью URL-адреса и ДИСКА не поддерживается.
- Сжатие поддерживается и рекомендуется.
- Поддерживается шифрование.
- Восстановление по URL-адресу с S3-совместимым хранилищем объектов не имеет ограничений по размеру.
- При восстановлении базы данных определяется значением,
MAXTRANSFERSIZE
назначенным на этапе резервного копирования. - URL-адреса можно указать либо в формате виртуального узла, либо в формате пути.
WITH CREDENTIAL
поддерживается.REGION
поддерживается, а значение по умолчанию —us-east-1
.MAXTRANSFERSIZE
диапазон от 5 МБ до 20 МБ. 10 МБ — это значение по умолчанию для соединителя S3.
Поддерживаемые аргументы для резервного копирования
WITH options |
Конечная точка S3 | Примечания. |
---|---|---|
BLOCKSIZE |
Y | MAXTRANSFERSIZE определяет размер части. |
BUFFERCOUNT |
Y | |
COMPRESSION |
Y | |
COPY_ONLY |
Y | |
CREDENTIAL |
Y | |
DESCRIPTION |
Y | |
DIFFERENTIAL |
Y | |
ENCRYPTION |
Y | |
FILE_SNAPSHOT |
N | |
MAXTRANSFERSIZE |
Y | От 5 МБ (5 242 880 байт) до 20 МБ (20 971 520 байт), значение по умолчанию — 10 МБ (10 485 760 байт). |
MEDIADESCRIPTION |
Y | |
MEDIANAME |
Y | |
MIRROR TO |
Y | Работает только с другим URL-адресом и MIRROR URL DISK не поддерживается. |
NAME |
Y | |
NOFORMAT / FORMAT |
Y | |
NOINIT / INIT |
N | Добавление не поддерживается. Чтобы перезаписать резервную копию, используйте WITH FORMAT . |
NO_CHECKSUM / CHECKSUM |
Y | |
NO_TRUNCATE |
Y | |
REGION |
Y | Значение по умолчанию: us-east-1 . Должен использоваться с BACKUP_OPTIONS . |
STATS |
Y |
Поддерживаемые аргументы для восстановления
WITH options |
Конечная точка S3 | Примечания. |
---|---|---|
BLOCKSIZE |
Y | MAXTRANSFERSIZE определяет размер части. |
BUFFERCOUNT |
N | |
CHECKSUM / NO_CHECKSUM |
Y | |
CREDENTIAL |
Y | |
ENABLE_BROKER / ERROR_BROKER_CONVERSATIONS / NEW_BROKER |
Y | |
FILE |
N | Логические имена не поддерживаются RESTORE FROM URL . |
FILESTREAM |
Y | |
KEEP_CDC |
Y | |
KEEP_REPLICATION |
Y | |
LOADHISTORY |
Y | |
MAXTRANSFERSIZE |
Y | |
MEDIANAME |
Y | |
MEDIAPASSWORD |
N | Требуется для некоторых резервных копий, выполненных в версиях до SQL Server 2012. |
MOVE |
Y | |
PARTIAL |
Y | |
PASSWORD |
N | Требуется для некоторых резервных копий, выполненных в версиях до SQL Server 2012. |
RECOVERY / NORECOVERY / STANDBY |
Y | |
REGION |
Y | Значение по умолчанию: us-east-1 . Должен использоваться с RESTORE_OPTIONS . |
REPLACE |
Y | |
RESTART |
Y | |
RESTRICTED_USER |
Y | |
REWIND / NOREWIND |
N | |
STATS |
Y | |
STOP_ON_ERROR / CONTINUE_AFTER_ERROR |
Y | |
STOPAT / STOPATMARK / STOPBEFOREMARK |
Y | |
UNLOAD / NOUNLOAD |
N |
Область/регион
Поставщик хранилища объектов, совместимый с S3, может предложить возможность определить конкретный регион для расположения контейнера. Использование этого необязательного параметра может обеспечить большую гибкость, указав регион, к которому принадлежит конкретный контейнер. Для этого параметра требуется совместное использование WITH
либо BACKUP_OPTIONS
RESTORE_OPTIONS
. Эти параметры требуют объявления значения в формате JSON. Это позволяет сценариям, в которых поставщик хранилища, совместимый с S3, может иметь один и тот же универсальный URL-адрес, но распространяться по нескольким регионам. В этом случае команда резервного копирования или восстановления указывает на указанные регионы без необходимости изменять URL-адрес.
Если значение не объявлено, us-east-1
присваивается значение по умолчанию.
Пример резервного копирования:
WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-1"}}'
Пример восстановления:
WITH RESTORE_OPTIONS = '{"s3": {"region":"us-west-1"}}'
Поддержка Linux
SQL Server использует WinHttp
для реализации клиента HTTP REST API-интерфейсов, которые он использует. Он использует хранилище сертификатов ОС для проверки сертификатов TLS, представленных конечной http(s)
точкой. Тем не менее, в SQL Server на Linux центр сертификации необходимо разместить в предопределенном месте для создания в /var/opt/mssql/security/ca-certificates
. В этой папке могут храниться и поддерживаться только первые 50 сертификатов. ЦС должен находиться на месте перед запуском процесса SQL Server.
SQL Server считывает сертификаты из папки во время запуска и добавляет их в хранилище доверия.
Только суперпользователю предоставляется право на запись в папке, а пользователю mssql
— право на чтение.
Неподдерживаемые функции
- Резервное копирование в хранилище объектов, совместимое с S3, с небезопасным
http
URL-адресом, не поддерживается. Клиенты отвечают за настройку узла S3 с URL-адресомhttps
, и эта конечная точка проверяется сертификатом, установленным на узле ОС SQL Server. - Резервное копирование в S3-совместимое хранилище объектов не поддерживается в выпусках SQL Server Express и SQL Server Express Advanced Services.
Ограничения
Ниже перечислены текущие ограничения резервного копирования и восстановления с S3-совместимым хранилищем объектов:
- Из-за текущего ограничения S3 Standard REST API временные незафиксированные файлы данных, созданные в хранилище объектов, совместимом с клиентом (из-за текущей многопартийной операции отправки) во время выполнения команды BACKUP T-SQL, не удаляются в случае сбоев. Эти незафиксированные блоки данных продолжают сохраняться в хранилище объектов, совместимом с S3, в случае сбоя команды BACKUP T-SQL или отмены. Если резервная копия выполнена успешно, эти временные файлы автоматически удаляются хранилищем объектов для формирования окончательного файла резервной копии. Некоторые поставщики хранилища, совместимые с S3, обрабатывают временные файлы через систему сборщика мусора.
- Длина URL-адреса ограничена 259 символами. В этом ограничении учитывается полная строка, включая имя соединителя
s3://
. Таким образом, допустимый предел составляет 254 символа. Тем не менее, мы рекомендуем придерживаться лимита в 200 символов, чтобы учесть возможное введение параметров запроса. - Имя учетных данных SQL ограничено 128 символами в формате UTF-16.
- Идентификатор секретного ключа не должен иметь
:
символ.
Стиль пути и стиль виртуального узла
Резервное копирование в S3 поддерживает запись URL-адреса как в стиле пути, так и в стиле виртуального узла.
Пример стиля пути: s3://<endpoint>:<port>/<bucket>/<backup_file_name>
Пример виртуального узла: s3://<bucket>.<domain>/<backup_file_name>
Примеры
Создание учетных данных
- Имя учетных данных должно указать путь к хранилищу и существует несколько стандартов для этого в зависимости от платформы хранения.
- Параметр IDENTITY всегда должен иметь значение
'S3 Access Key'
при использовании соединителя S3. - Идентификатор ключа доступа и идентификатор секретного ключа не должны содержать двоеточие. Идентификатор ключа доступа и идентификатор секретного ключа — это пользователь и пароль, созданные в хранилище объектов, совместимом с S3.
- Допускаются только буквенно-цифровые значения.
- Идентификатор ключа доступа должен иметь надлежащие разрешения на хранилище объектов, совместимого с S3.
Используйте CREATE CREDENTIAL для создания учетных данных уровня сервера для проверки подлинности с конечной точкой хранилища объектов, совместимой с S3.
USE [master];
CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]
WITH
IDENTITY = 'S3 Access Key',
SECRET = '<AccessKeyID>:<SecretKeyID>';
GO
BACKUP DATABASE [SQLTestDB]
TO URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH FORMAT /* overwrite any existing backup sets */
, STATS = 10
, COMPRESSION;
Однако AWS S3 поддерживает два разных стандарта URL-адреса.
S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER>
(по умолчанию)S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>
Существует несколько подходов к успешному созданию учетных данных для AWS S3.
-- S3 bucket name: datavirtualizationsample
-- S3 bucket region: us-west-2
-- S3 bucket folder: backup
CREATE CREDENTIAL [s3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup]
WITH
IDENTITY = 'S3 Access Key'
, SECRET = 'accesskey:secretkey';
GO
BACKUP DATABASE [AdventureWorks2022]
TO URL = 's3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup/AdventureWorks2022.bak'
WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO
или
CREATE CREDENTIAL [s3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup]
WITH
IDENTITY = 'S3 Access Key'
, SECRET = 'accesskey:secretkey';
GO
BACKUP DATABASE [AdventureWorks2022]
TO URL = 's3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup/AdventureWorks2022.bak'
WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO
Резервное копирование по URL-адресу
В следующем примере выполняется полное резервное копирование базы данных в конечную точку хранилища объектов с чередованием нескольких файлов:
BACKUP DATABASE <db_name>
TO URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
, URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
, URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
--
, URL = 's3://<endpoint>:<port>/<bucket>/<database>_64.bak'
WITH FORMAT -- overwrite
, STATS = 10
, COMPRESSION;
Восстановление из URL-адреса
В следующем примере выполняется восстановление базы данных из расположения конечной точки хранилища объектов:
RESTORE DATABASE <db_name>
FROM URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
, URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
, URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
--
, URL = 's3://<endpoint>:<port>/<bucket>/<database>_64.bak'
WITH REPLACE -- overwrite
, STATS = 10;
Параметры шифрования и сжатия
В следующем примере показано, как создать резервную копию и восстановить AdventureWorks2022
базу данных с шифрованием, MAXTRANSFERSIZE
как 20 МБ и сжатие:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = <password>;
GO
CREATE CERTIFICATE AdventureWorks2022Cert
WITH SUBJECT = 'AdventureWorks2022 Backup Certificate';
GO
-- Backup database
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'
WITH FORMAT, MAXTRANSFERSIZE = 20971520, COMPRESSION,
ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = AdventureWorks2022Cert)
GO
-- Restore database
RESTORE DATABASE AdventureWorks2022
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'
WITH REPLACE
Использование региона для резервного копирования и восстановления
В следующем примере показано, как создать резервную копию и восстановить AdventureWorks2022
базу данных с помощью REGION_OPTIONS
:
Вы можете параметризировать регион в каждой BACKUP
/ RESTORE
команде. Обратите внимание на строку региона S3 в строке BACKUP_OPTIONS
и RESTORE_OPTIONS
, например, '{"s3": {"region":"us-west-2"}}'
. Регион по умолчанию — us-east-1
. Вот простой пример:
-- Backup Database
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'
WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}'
-- Restore Database
RESTORE DATABASE AdventureWorks2022
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'
WITH
MOVE 'AdventureWorks2022'
TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022.mdf'
, MOVE 'AdventureWorks2022_log'
TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022.ldf'
, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'
Например:
-- S3 bucket name: datavirtualizationsample
-- S3 bucket region: us-west-2
-- S3 bucket folder: backup
CREATE CREDENTIAL [s3://datavirtualizationsample.s3.amazonaws.com/backup]
WITH
IDENTITY = 'S3 Access Key'
, SECRET = 'accesskey:secretkey';
GO
BACKUP DATABASE [AdventureWorks2022]
TO URL = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
WITH
BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}' -- REGION AS PARAMETER)
, COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO
RESTORE DATABASE AdventureWorks2022_1
FROM URL = 's3://datavirtualizationsample.s3.amazonaws.com/backup/AdventureWorks2022.bak'
WITH
MOVE 'AdventureWorks2022'
TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.mdf'
, MOVE 'AdventureWorks2022_log'
TO 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_1.ldf'
, STATS = 10, RECOVERY
, REPLACE, RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'; -- REGION AS PARAMETER)
GO
Связанный контент
- Рекомендации по резервному копированию SQL Server по URL-адресу для использования S3-совместимого хранилища объектов и устранение неполадок
- Рекомендации по резервному копированию SQL Server по URL-адресу для Хранилища BLOB-объектов Microsoft Azure и устранение неполадок
- CREATE CERTIFICATE (Transact-SQL)
- Резервное копирование SQL Server по URL-адресу для Microsoft Хранилище BLOB-объектов Azure