<# .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) }