Данный метод подходит для SQL Server 2019. Начиная с SQL Server 2022 появилась возможность выполнять резервное копирование на S3 встроенными средствами SQL.
1. Установка модуля AWSPowerShell
- Запустите PowerShell от имени администратора.
- Выполните команду установки модуля:
Install-Module -Name AWSPowerShell -Force
Дождитесь окончания выполнения команды.
2. Подготовка скрипта
- Откройте любой текстовый редактор (например, Блокнот).
- Вставьте следующий скрипт (без изменений «для красоты»).
# === НАСТРОЙКИ ===
$S3Endpoint = "-" # Адрес S3 endpoint
$S3Bucket = "-" # Имя бакета
$S3Region = "-" # Регион
$S3AccessKey = "-" # AccessKey
$S3SecretKey = "-" # SecretKey
$SourcePath = "-" # Путь к папке с бекапами
$RemoteFolder = "-" # Имя корневая папки на стороне S3
$LogFile = "-" # Путь к файлу локального лога
# === AWS Сессия ===
Initialize-AWSDefaultConfiguration -AccessKey $S3AccessKey -SecretKey $S3SecretKey -Region $S3Region
# === Функция логирования ===
function Write-Log($msg) {
$line = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') $msg"
Add-Content -Path $LogFile -Value $line
Write-Host $line
}
# === Основной код ===
Write-Log "=== Запуск бэкапа : $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') ==="
# Перебираем все подпапки в источнике
$folders = Get-ChildItem -Path $SourcePath -Directory
foreach ($folder in $folders) {
$folderName = $folder.Name
$latestFile = Get-ChildItem -Path $folder.FullName -Filter *.bak -File |
Sort-Object LastWriteTime -Descending |
Select-Object -First 1
if (-not $latestFile) {
Write-Log "[$folderName] Файлов .bak не найдено, пропуск."
continue
}
$key = "$RemoteFolder/$folderName/$($latestFile.Name)"
Write-Log "[$folderName] Загрузка файла $($latestFile.FullName) -> s3://$S3Bucket/$key"
try {
Write-S3Object -BucketName $S3Bucket -Key $key -File $latestFile.FullName -EndpointUrl $S3Endpoint -Force
Write-Log "[$folderName] Загружен: $($latestFile.Name)"
}
catch {
Write-Log "[$folderName] Ошибка при загрузке: $_"
continue
}
}
Write-Log "=== Завершение бэкапа : $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') ==="
В блоке “=== НАСТРОЙКИ ===” укажите свои значения (endpoint, bucket, region, ключи доступа, пути и т.д.).
Сохраните файл с расширением .ps1.
3. Настройка резервного копирования в SSMS
3.1. Создание задания SQL Server Agent
- Откройте SSMS → Агент SQL Server → Задания → Создать задание…
Рисунок 1 — Создание задания в SQL Server Agent
- Во вкладке “Общие” укажите имя задания.
Рисунок 2 — Вкладка “Общие”
- Перейдите во вкладку “Шаги” и нажмите “Создать”.
Рисунок 3 — Создание шага задания
- Во вкладке “Общие” задайте имя шага, в поле “Тип” выберите “Операционная система (CmdExec)”, а в поле “Команда” укажите:
powershell -ExecutionPolicy Bypass -File "C:\Path\to\backup-to-s3.ps1"
Важно: в кавычках укажите фактический путь к созданному ранее файлу .ps1.
Рисунок 4 — Настройки шага задания
- Перейдите на вкладку “Дополнительно”. В поле “Действие при успехе” выберите “Завершить задание с успехом”. Нажмите “ОК” (в окне шага) и затем ещё раз “ОК” (в окне задания).
Рисунок 5 — Вкладка “Дополнительно”
3.2. Создание плана обслуживания
- Перейдите во вкладку “Управление” → “Планы обслуживания” → “Создать план обслуживания” и задайте имя плана.
Рисунок 6 — Создание плана обслуживания
- Дважды кликните по “ВложенныйПлан_1”, чтобы открыть свойства вложенного плана: укажите имя/описание и настройте расписание.
Рисунок 7 — Свойства вложенного плана
3.3. Задачи плана: Backup + запуск задания
- Во вложенном плане добавьте две задачи: “Резервное копирование базы данных” и “Выполнение задания агента SQL Server”.
- В задаче “Резервное копирование базы данных” (вкладка “Общее”) укажите тип резервной копии и выберите базы данных для бэкапа.
Рисунок 8 — Настройки задачи “Резервное копирование базы данных”
- Во вкладке “Целевой объект” включите “Создавать вложенный каталог для каждой базы данных”, укажите путь к папке для бэкапов и нажмите “ОК”. Этот путь должен совпадать со значением SourcePath в скрипте.
Рисунок 9 — Вкладка “Целевой объект”
- В задаче “Выполнение задания агента SQL Server” выберите ранее созданное задание (которое запускает PowerShell-скрипт).
- Сохраните план обслуживания.
Рисунок 10 — Настройка “Выполнение задания агента SQL Server”
Готово — автоматическое резервное копирование баз данных SQL в S3-хранилище настроено.