Dela via


SQL Server säkerhetskopiering till URL för S3-kompatibel objektlagring

Gäller för: SQL Server 2022 (16.x)

Den här artikeln beskriver de begrepp, krav och komponenter som krävs för att använda S3-kompatibel objektlagring som ett mål för säkerhetskopiering. Säkerhetskopierings- och återställningsfunktionerna liknar konceptuellt att arbeta med SQL Server-säkerhetskopiering till URL för Azure Blob Storage som en typ av säkerhetskopieringsenhet.

Information om stödda plattformar finns i leverantörer av S3-kompatibel objektlagring.

Översikt

SQL Server 2022 (16.x) introducerar objektlagringsintegrering till dataplattformen, så att du kan integrera SQL Server med S3-kompatibel objektlagring utöver Azure Storage. För att tillhandahålla den här integreringen har SQL Server stöd för en S3-anslutning, som använder S3 REST API för att ansluta till valfri provider av S3-kompatibel objektlagring. SQL Server 2022 (16.x) utökar den befintliga URL-syntaxen för säkerhetskopiering/återställning till/från genom att lägga till stöd för den nya S3-anslutningen via REST API:et.

URL:er som pekar på S3-kompatibla resurser prefixas med s3:// för att ange att S3-anslutningsappen används. URL:er som börjar med s3:// förutsätter alltid att det underliggande protokollet är https.

Delnummer och filstorleksbegränsningar

För att lagra data måste den S3-kompatibla objektlagringsprovidern dela upp filer i flera block som kallas delar, ungefär som blockblobar i Azure Blob Storage.

Varje fil kan delas upp till 10 000 delar, varje delstorlek varierar från 5 MB till 20 MB. Det här intervallet styrs av T-SQL BACKUP-kommandot via parametern MAXTRANSFERSIZE. Standardvärdet MAXTRANSFERSIZE för är 10 MB, därför är standardstorleken för varje del 10 MB. Även om det här värdet anger den maximala överföringsstorleken garanterar det inte att varje skickad del är 10 MB. Storleken på delen påverkas av dataanslutningen. Om det till exempel finns 4 MB data i anslutning till 2 MB data skickas 6 MB efter att ha nått den minsta storleksdelen på 5 MB. Om det finns 12 MB intilliggande data skickas data upp till maxstorleken (10 MB), och de återstående 2 MB skickas i nästa del. S3-kontaktören försöker alltid skicka den maximala möjliga datastorleken, men den överskrider aldrig värdet MAXTRANSFERSIZE.

Den maximala storleken som stöds för en enskild fil är resultatet av 10 000 delar * MAXTRANSFERSIZE. Om det krävs för att säkerhetskopiera en större fil, måste den delas upp eller fördelas över upp till 64 URL:er. Den slutliga maximala storleken på en fil som stöds är 10 000 delar * MAXTRANSFERSIZE * URL:er.

Anmärkning

Användningen av COMPRESSION krävs för att ändra MAXTRANSFERSIZE värden.

Förutsättningar för S3-slutpunkten

S3-slutpunkten måste konfigureras på följande sätt:

  • TLS måste konfigureras. Det förutsätts att alla anslutningar överförs säkert via HTTPS, inte HTTP. Slutpunkten godkänns av ett certifikat som är installerat på SQL Server-värdsnoden.
  • Autentiseringsuppgifter som skapats på den S3-kompatibla objektlagringen med rätt behörighet för att utföra åtgärden. Användaren och lösenordet som skapas på lagringsskiktet heter Access Key ID och Secret Key ID. Du behöver både autentisera dig mot S3-slutpunkten.
  • Minst en bucket har konfigurerats. Bucketar kan inte skapas eller konfigureras från SQL Server 2022 (16.x).

Säkerhet

Behörigheter för säkerhetskopiering

För att ansluta SQL Server till S3-kompatibel objektlagring måste två uppsättningar behörigheter upprättas, en på SQL Server och även på lagringsskiktet.

På SQL Server ska användarkontot som används för att utfärda säkerhetskopierings- eller ÅTERSTÄLLNINGskommandon finnas i db_backupoperator databasrollen med Ändra eventuella behörigheter för autentiseringsuppgifter .

På lagringsskiktet:

  • I AWS S3 skapar du en anpassad roll och anger specifikt vilket S3 API som kräver åtkomst. Säkerhetskopiering och återställning kräver följande behörigheter: ListBucket (Bläddra), PutObject (Skriv – för säkerhetskopiering).
  • I annan S3-kompatibel lagring måste användaren (Access Key ID) ha både ListBucket - och WriteOnly-behörigheter .

Återställ behörigheter

Om databasen som återställs inte finns måste användaren ha CREATE DATABASE behörighet att köra RESTORE. Om databasen existerar, tilldelas behörigheter som standard till medlemmar i sysadmin och dbcreator fasta serverroller samt ägaren (dbo) av databasen.

ÅTERSTÄLLNINGsbehörigheter ges till roller där medlemskapsinformation alltid är lättillgänglig för servern. Eftersom fast databasrollmedlemskap endast kan kontrolleras när databasen är tillgänglig och oskadad, vilket inte alltid är fallet när RESTORE körs, har medlemmar i den fasta databasrollen db_owner inte ÅTERSTÄLLNINGsbehörighet.

På lagringsskiktet:

  • I AWS S3 skapar du en anpassad roll och anger specifikt vilket S3 API som kräver åtkomst. Säkerhetskopiering och återställning kräver följande behörigheter: ListBucket (Bläddra), GetObject (Läs – för återställning).
  • I annan S3-kompatibel lagring måste användaren (Access Key ID) ha både ListBucket - och ReadOnly-behörigheter .

Funktioner som stöds

Översikt på hög nivå över de funktioner som stöds för BACKUP och RESTORE:

  1. En enskild säkerhetskopieringsfil kan vara upp till 200 000 MiB per URL (med MAXTRANSFERSIZE värdet 20 MB).
  2. Säkerhetskopior kan fördelas över högst 64 URL:er.
  3. Spegling stöds, men endast över URL:er. Spegling med både URL och DISK stöds inte.
  4. Komprimering stöds och rekommenderas.
  5. Kryptering stöds.
  6. Återställning från URL med S3-kompatibelt objektlagring har ingen storleksbegränsning.
  7. När du återställer en databas bestäms MAXTRANSFERSIZE av det värde som angavs under säkerhetskopieringen.
  8. URL:er kan anges antingen i formatstil för virtuell värd eller sökväg.
  9. WITH CREDENTIAL stöds.
  10. REGION stöds och standardvärdet är us-east-1.
  11. MAXTRANSFERSIZE varierar från 5 MB till 20 MB. 10 MB är standardvärdet för S3-anslutningsappen.

Argument som stöds för säkerhetskopiering

WITH Alternativ S3-slutpunkt Noteringar
BLOCKSIZE Y MAXTRANSFERSIZE avgör delstorleken.
BUFFERCOUNT Y
COMPRESSION Y
COPY_ONLY Y
CREDENTIAL Y
DESCRIPTION Y
DIFFERENTIAL Y
ENCRYPTION Y
FILE_SNAPSHOT N
MAXTRANSFERSIZE Y Från 5 MB (5 242 880 byte) till 20 MB (20 971 520 byte) är standardvärdet 10 MB (10 485 760 byte).
MEDIADESCRIPTION Y
MEDIANAME Y
MIRROR TO Y Fungerar bara med en annan URL, MIRROR med URL och DISK stöds inte.
NAME Y
NOFORMAT / FORMAT Y
NOINIT / INIT N Appendering stöds inte. Om du vill skriva över en säkerhetskopia använder du WITH FORMAT.
NO_CHECKSUM / CHECKSUM Y
NO_TRUNCATE Y
REGION Y Standardvärdet är us-east-1. Måste användas med BACKUP_OPTIONS.
STATS Y

Argument som stöds för återställning

WITH Alternativ S3-slutpunkt Noteringar
BLOCKSIZE Y MAXTRANSFERSIZE avgör delstorleken.
BUFFERCOUNT N
CHECKSUM / NO_CHECKSUM Y
CREDENTIAL Y
ENABLE_BROKER / ERROR_BROKER_CONVERSATIONS / NEW_BROKER Y
FILE N Logiska namn stöds inte med RESTORE FROM URL.
FILESTREAM Y
KEEP_CDC Y
KEEP_REPLICATION Y
LOADHISTORY Y
MAXTRANSFERSIZE Y
MEDIANAME Y
MEDIAPASSWORD N Krävs för vissa säkerhetskopior som gjorts i versioner före SQL Server 2012.
MOVE Y
PARTIAL Y
PASSWORD N Krävs för vissa säkerhetskopior som gjorts i versioner före SQL Server 2012.
RECOVERY / NORECOVERY / STANDBY Y
REGION Y Standardvärdet är us-east-1. Måste användas med 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

Region

Din S3-kompatibla objektlagringsprovider kan erbjuda möjligheten att fastställa en specifik region för bucketplatsen. Användningen av den här valfria parametern kan ge större flexibilitet genom att ange vilken region som en viss bucket tillhör. Den här parametern kräver användning av WITH tillsammans med antingen BACKUP_OPTIONS eller RESTORE_OPTIONS. Dessa alternativ kräver att värdet deklareras i JSON-format. Detta möjliggör scenarier där en S3-kompatibel lagringsprovider kan ha samma universella URL men distribueras i flera regioner. I det här fallet pekar kommandopunkten för säkerhetskopiering eller återställning till de angivna regionerna utan att du behöver ändra URL:en.

Om inget värde deklareras us-east-1 tilldelas som standard.

Exempel på säkerhetskopiering:

WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-1"}}'

Exempel på återställning:

WITH RESTORE_OPTIONS = '{"s3": {"region":"us-west-1"}}'

Linux-stöd

SQL Server använder WinHttp för att implementera klienten för HTTP REST-API:er som används. Det förlitar sig på operativsystemets certifikatlager för validering av de TLS-certifikat som presenteras av http(s) slutpunkten. SQL Server på Linux måste dock ca:en placeras på en fördefinierad plats för att skapas på /var/opt/mssql/security/ca-certificates, endast de första 50 certifikaten kan lagras och stödjas i den här mappen. Certifikatet måste vara på plats innan SQL Server-processen startas.

SQL Server läser certifikaten från mappen under starten och lägger till dem i förtroendearkivet.

Endast superanvändare ska kunna skriva i mappen, medan mssql användaren måste kunna läsa.

Funktioner som inte stöds

  • Säkerhetskopiering till S3-kompatibel objektlagring med en osäker URL http stöds inte. Kunderna ansvarar för att konfigurera sin S3-server med en https URL och slutpunkten verifieras av ett certifikat som är installerat på SQL Server OS.
  • Säkerhetskopiering till S3-kompatibel objektlagring stöds inte i SQL Server Express och SQL Server Express med Advanced Services-utgåvor.

Begränsningar

Följande är de aktuella begränsningarna för säkerhetskopiering och återställning med S3-kompatibel objektlagring:

  • På grund av den nuvarande begränsningen av S3 Standard REST API tas de tillfälligt ogenomförda datafilerna som skapas i kundens S3-kompatibla objektlagring (på grund av en pågående uppladdningsåtgärd för flera delar) inte bort om det uppstår fel vid säkerhetskopieringen när T-SQL-kommandot BACKUP körs. Dessa ogenomförda datablock fortsätter att sparas i S3-kompatibel objektlagring om T-SQL-kommandot backup misslyckas eller avbryts. Om säkerhetskopieringen lyckas tas dessa temporära filer bort automatiskt av objektarkivet för att bilda den slutliga säkerhetskopieringsfilen. Vissa S3-kompatibla lagringsleverantörer hanterar tillfälliga filer via sitt system för skräpinsamling.
  • Den totala URL-längden är begränsad till 259 tecken. Den fullständiga strängen räknas i den här begränsningen s3:// , inklusive anslutningsnamnet. Den användbara gränsen är alltså 254 tecken. Vi rekommenderar dock att du håller dig till en gräns på 200 tecken för att möjliggöra en eventuell introduktion av frågeparametrar.
  • SQL-autentiseringsuppgifternas namn begränsas av 128 tecken i UTF-16-format.
  • Hemligt nyckel-ID får inte innehålla : tecken.

Sökvägsformat och virtuellt värdformat

Att säkerhetskopiera till S3 stöder att URL:en kan skrivas i både sökvägstil och virtuell värdstil.

Exempel på sökvägsformat: s3://<endpoint>:<port>/<bucket>/<backup_file_name>

Exempel på virtuell värd: s3://<bucket>.<domain>/<backup_file_name>

Exempel

Skapa autentiseringsuppgifter

  • Namnet på autentiseringsuppgifterna ska ange lagringssökvägen och det finns flera standarder för detta beroende på lagringsplattformen.
  • Identiteten ska alltid vara 'S3 Access Key' när du använder S3-anslutningsappen.
  • Åtkomstnyckel-ID och hemligt nyckel-ID får inte innehålla ett kolon. Åtkomstnyckel-ID och hemligt nyckel-ID är användaren och lösenordet som skapats på den S3-kompatibla objektlagringen.
  • Endast alfanumeriska värden tillåts.
  • Åtkomstnyckel-ID:t måste ha rätt behörigheter för S3-kompatibel objektlagring.

Använd CREATE CREDENTIAL för att skapa en autentiseringsuppgift på servernivå för autentisering med den S3-kompatibla objektlagringsslutpunkten.

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 stöder dock två olika url-standarder.

  • S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER> (standardinställning)
  • S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

Det finns flera metoder för att skapa en autentiseringsuppgift för 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

Eller:

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

Säkerhetskopiera till URL

I följande exempel utförs en fullständig databassäkerhetskopia till objektlagringsslutpunkten, uppdelad över flera filer.

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;

Återställa från URL

I följande exempel utförs en databasåterställning från platsen för objektlagringsslutpunkten:

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;

Alternativ för kryptering och komprimering

I följande exempel visas hur du säkerhetskopierar och återställer AdventureWorks2022 databasen med kryptering, MAXTRANSFERSIZE som 20 MB och komprimering:

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

Använd region för säkerhetskopiering och återställning

I följande exempel visas hur du säkerhetskopierar och återställer AdventureWorks2022 databasen med hjälp av REGION_OPTIONS:

Du kan parametrisera regionen i varje BACKUP / RESTORE kommando. Observera den S3-specifika regionsträngen BACKUP_OPTIONS i och RESTORE_OPTIONS, till exempel '{"s3": {"region":"us-west-2"}}'. Standardregionen är us-east-1. Ett enkelt exempel:

-- 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"}}'

Till exempel:

-- 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