78 lines
3.4 KiB
PowerShell
78 lines
3.4 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Skrypt do bezpiecznego przenoszenia backupów SQL na S3 przy użyciu rclone.
|
|
.DESCRIPTION
|
|
Używa operacji 'rclone move', aby najpierw bezpiecznie skopiować pliki na S3,
|
|
zweryfikować je, a następnie usunąć z lokalnego dysku serwera.
|
|
W przypadku błędu raportuje zdarzenie do Windows Event Log.
|
|
#>
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# ========================================================
|
|
# KONFIGURACJA
|
|
# ========================================================
|
|
$RcloneExePath = "C:\ProgramData\chocolatey\bin\rclone.exe" # Zmień na właściwą ścieżkę do rclone.exe
|
|
$SourceDir = "C:\SQLBackups" # Katalog główny z backupami baz danych
|
|
$S3Destination = "s3-backup-remote:nazwa-twojego-bucketa/SQLBackups/$(env:COMPUTERNAME)"
|
|
$LogDir = "C:\DBAdmin\logs"
|
|
$LogFile = Join-Path $LogDir "rclone_backup_$(Get-Date -Format 'yyyyMMdd_HHmmss').log"
|
|
|
|
# Upewnij się, że katalog logów istnieje
|
|
if (-not (Test-Path $LogDir)) {
|
|
New-Item -Path $LogDir -ItemType Directory -Force | Out-Null
|
|
}
|
|
|
|
# ========================================================
|
|
# URUCHOMIENIE TRANSFERU
|
|
# ========================================================
|
|
Write-Host "Rozpoczynam proces bezpiecznego przenoszenia backupów z $SourceDir do $S3Destination..."
|
|
|
|
# Parametry zapewniające niezawodność:
|
|
# move - Przenosi (kopiuje, weryfikuje, kasuje oryginał)
|
|
# --checksum - Bezwzględnie weryfikuje sumy kontrolne po skopiowaniu
|
|
# --retries 5 - Przy błędzie sieci ponawia do 5 razy
|
|
# --retries-sleep 15s - Oczekiwanie między powtórzeniami
|
|
# --delete-empty-src-dirs - Usuwa foldery, z których opróżniono wszystkie backupy
|
|
$RcloneArgs = @(
|
|
"move", $SourceDir, $S3Destination,
|
|
"--checksum",
|
|
"--retries", "5",
|
|
"--retries-sleep", "15s",
|
|
"--delete-empty-src-dirs",
|
|
"--log-file=$LogFile",
|
|
"--log-level=INFO"
|
|
)
|
|
|
|
# Uruchomienie rclone
|
|
& $RcloneExePath $RcloneArgs
|
|
|
|
$RcloneExitCode = $LASTEXITCODE
|
|
|
|
# ========================================================
|
|
# WERYFIKACJA I ALERTOWANIE
|
|
# ========================================================
|
|
|
|
# Rejestracja źródła w EventLog, jeśli nie istnieje (wymaga praw admina przy pierwszym uruchomieniu)
|
|
$EventSource = "SQLBackupToS3"
|
|
if (-not [System.Diagnostics.EventLog]::SourceExists($EventSource)) {
|
|
try {
|
|
New-EventLog -LogName Application -Source $EventSource
|
|
} catch {
|
|
Write-Warning "Nie udało się utworzyć źródła zdarzeń. Prawdopodobnie brak uprawnień administratora."
|
|
}
|
|
}
|
|
|
|
if ($RcloneExitCode -eq 0) {
|
|
$successMsg = "Pomyślnie przeniesiono backupy SQL na S3. Log: $LogFile"
|
|
Write-Host $successMsg -ForegroundColor Green
|
|
try { Write-EventLog -LogName Application -Source $EventSource -EntryType Information -EventId 1000 -Message $successMsg } catch {}
|
|
} else {
|
|
$errorMsg = "BŁĄD KRYTYCZNY: Nie udało się przenieść wszystkich backupów SQL na S3. Kod wyjścia rclone: $RcloneExitCode. Szczegóły sprawdź w logu: $LogFile"
|
|
Write-Host $errorMsg -ForegroundColor Red
|
|
try { Write-EventLog -LogName Application -Source $EventSource -EntryType Error -EventId 1001 -Message $errorMsg } catch {}
|
|
|
|
# [Opcjonalnie] Tutaj możesz dodać skrypt wysyłający maila lub webhook (Teams/Slack):
|
|
# Invoke-RestMethod -Uri "WEBHOOK_URL" -Method Post -Body (@{text=$errorMsg} | ConvertTo-Json)
|
|
}
|