$configMysqlPassword = 'backup'
# Path to MySQL CLI program
-$configMysqlCli = 'C:\Program Files\MariaDB 10.5\bin\mysql.exe'
+$configMysqlCli = 'mysql.exe'
# Path to mysqldump CLI program
-$configMysqldumpCli = 'C:\Program Files\MariaDB 10.5\bin\mysqldump.exe'
+$configMysqldumpCli = 'mysqldump.exe'
# Directory where to store the backups
$configBackupDir = 'backup'
# Number of backups to keep, set to 0 to keep all backups
$configBackupRotate = 7
+# Compress backups (limited to 2 GB due to usage of Compress-Archive)
+$configBackupCompress = $False
+
# Directory where to store the logfiles
$configLogDir = 'log'
# Number of logfiles to keep, set to 0 to keep all logfiles
return $databases
}
-function Create-Backup([String]$database, [String]$target) {
+function Invoke-DatabaseBackup([String]$database, [String]$target) {
& $configMysqldumpCli --host=$configMysqlHost --port=$configMysqlPort --user=$configMysqlUser --password=$configMysqlPassword --single-transaction --result-file=$target $database
if($LastExitCode -ne 0) {
throw "mysqldump exited with Exit code $LastExitCode"
}
+
+ if($configBackupCompress) {
+ Compress-Archive -Path $target -DestinationPath "$target.zip"
+ Remove-Item -Path $target
+ }
}
function Invoke-FileRotation {
Param (
$defaultDbExclude = @('information_schema', 'performance_schema')
-$patternBackupFile = '^backup-.+-\d{8,}-\d{6}\.sql$'
+$patternBackupFile = '^backup-.+-\d{8,}-\d{6}\.sql(\.zip)?$'
$patternLogFile = '^log-\d{8,}-\d{6}\.log$'
$currDaytime = Get-Date -format 'yyyyMMdd-HHmmss'
$databaseBackupFile = Join-Path -Path $databaseBackupDir -ChildPath "backup-$d-$currDaytime.sql"
- Write-Log "Backing up $d to $databaseBackupFile..." -Path $logFile
+ if($configBackupCompress) {
+ Write-Log "Backing up $d to compressed file $databaseBackupFile.zip..." -Path $logFile
+ }
+ else {
+ Write-Log "Backing up $d to $databaseBackupFile..." -Path $logFile
+ }
try {
- Create-Backup $d $databaseBackupFile
+ Invoke-DatabaseBackup $d $databaseBackupFile
Invoke-FileRotation -Dir $databaseBackupDir -MaxFiles $configBackupRotate -Pattern $patternBackupFile -LogFile $logFile
}
catch {