自动将 RDS 备份 SQL 服务器到 S3
Automate RDS backup SQL Server to S3
我在 AWS RDS 上有一个 SQL 服务器 运行ning。我目前有一个 S3 存储桶,用于存储我通过 SQL Server Management Studio 使用以下脚本生成的备份:
exec msdb.dbo.rds_backup_database
@source_db_name='database_name',
@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name_and_extension',
@overwrite_S3_backup_file=1;
问题是我必须手动执行这些备份。
有什么方法可以每天自动这个脚本到运行吗?
此外,通过 RDS 备份每天自动执行,但这些备份通过我的 S3 存储桶不可见。
有什么方法可以将这些自动备份存储在我的 s3 中吗?
RDS 快照和备份不是您直接存储的东西 -- RDS 代表您为您存储它 -- 所以没有 select 存储桶或区域的选项:它总是存储在一个RDS 实例所在的同一 AWS 区域中的 S3 存储桶。无法修改。
您无法从 S3 控制台看到来自 RDS 备份和快照的数据,因为它没有存储在您的任何一个 S3 存储桶中——它存储在一个由 RDS 服务拥有和控制的存储桶中区域。
如果您想 运行 自动执行您的脚本,我建议启动一个小型 ec2 实例并将其安装为 cron。
自动执行 AWS RDS 本机备份(或还原)。使用存储过程调用的单个步骤创建 SQL 代理作业。然后可以 运行 按需或通过向作业添加计划来安排。下面是一个示例作业,但也可以在 SSMS 中定义。 (这是在版本 13.0.5292.0 中完成的)
USE [msdb]
GO
/****** Object: Job [db_export_to_aws_s3] Script Date: 7/30/2019 12:03:45 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [[Uncategorized (Local)]] Script Date: 7/30/2019 12:03:45 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'db_export_to_aws_s3',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Export job to send database backup to AWS S3.',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'rds_admin', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [aws_rds_native_backup_to_s3] Script Date: 7/30/2019 12:03:45 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'aws_rds_native_backup_to_s3',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec msdb.dbo.rds_backup_database
@source_db_name=''MY_TEST_DB'',
@s3_arn_to_backup_to=''arn:aws:s3:::test_aws_s3_bucket/MY_TEST_DB-dev.bak'',
@overwrite_S3_backup_file=1;',
@database_name=N'master',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'DailyDatabaseBackup',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20190712,
@active_end_date=99991231,
@active_start_time=50000,
@active_end_time=235959,
@schedule_uid=N'67a62f634-d4657-4d9c-56bc-c34569278e8c'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO
我在 AWS RDS 上有一个 SQL 服务器 运行ning。我目前有一个 S3 存储桶,用于存储我通过 SQL Server Management Studio 使用以下脚本生成的备份:
exec msdb.dbo.rds_backup_database
@source_db_name='database_name',
@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name_and_extension',
@overwrite_S3_backup_file=1;
问题是我必须手动执行这些备份。
有什么方法可以每天自动这个脚本到运行吗?
此外,通过 RDS 备份每天自动执行,但这些备份通过我的 S3 存储桶不可见。
有什么方法可以将这些自动备份存储在我的 s3 中吗?
RDS 快照和备份不是您直接存储的东西 -- RDS 代表您为您存储它 -- 所以没有 select 存储桶或区域的选项:它总是存储在一个RDS 实例所在的同一 AWS 区域中的 S3 存储桶。无法修改。
您无法从 S3 控制台看到来自 RDS 备份和快照的数据,因为它没有存储在您的任何一个 S3 存储桶中——它存储在一个由 RDS 服务拥有和控制的存储桶中区域。
如果您想 运行 自动执行您的脚本,我建议启动一个小型 ec2 实例并将其安装为 cron。
自动执行 AWS RDS 本机备份(或还原)。使用存储过程调用的单个步骤创建 SQL 代理作业。然后可以 运行 按需或通过向作业添加计划来安排。下面是一个示例作业,但也可以在 SSMS 中定义。 (这是在版本 13.0.5292.0 中完成的)
USE [msdb]
GO
/****** Object: Job [db_export_to_aws_s3] Script Date: 7/30/2019 12:03:45 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object: JobCategory [[Uncategorized (Local)]] Script Date: 7/30/2019 12:03:45 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
END
DECLARE @jobId BINARY(16)
EXEC @ReturnCode = msdb.dbo.sp_add_job @job_name=N'db_export_to_aws_s3',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'Export job to send database backup to AWS S3.',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'rds_admin', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object: Step [aws_rds_native_backup_to_s3] Script Date: 7/30/2019 12:03:45 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'aws_rds_native_backup_to_s3',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'exec msdb.dbo.rds_backup_database
@source_db_name=''MY_TEST_DB'',
@s3_arn_to_backup_to=''arn:aws:s3:::test_aws_s3_bucket/MY_TEST_DB-dev.bak'',
@overwrite_S3_backup_file=1;',
@database_name=N'master',
@flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'DailyDatabaseBackup',
@enabled=1,
@freq_type=4,
@freq_interval=1,
@freq_subday_type=1,
@freq_subday_interval=0,
@freq_relative_interval=0,
@freq_recurrence_factor=0,
@active_start_date=20190712,
@active_end_date=99991231,
@active_start_time=50000,
@active_end_time=235959,
@schedule_uid=N'67a62f634-d4657-4d9c-56bc-c34569278e8c'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
GO