]> git.p6c8.net - psmysqlbackup.git/blobdiff - psmysqlbackup.ps1
Updated README
[psmysqlbackup.git] / psmysqlbackup.ps1
index f248efd476bc9573b0ff052edbcf029cc9f85fb8..e7b2f5fbfd43e416beeb9397a207656a7df4dbf2 100644 (file)
@@ -8,19 +8,31 @@
 
 # Config
 
+# MySQL host
 $configMysqlHost = "localhost"
+# Port of MySQL host
 $configMysqlPort = 3306
+# MySQL user using to connect to MySQL
 $configMysqlUser = "backup"
+# Password for MySQL user
 $configMysqlPassword = "backup"
 
+# Path to MySQL CLI program
 $configMysqlCli = "C:\Program Files\MariaDB 10.5\bin\mysql.exe"
+# Path to mysqldump CLI program
 $configMysqldumpCli = "C:\Program Files\MariaDB 10.5\bin\mysqldump.exe"
 
+# Directory where to store the backups
 $configBackupDir = "backup"
+# Number of backups to keep, set to 0 to keep all backups
 $configRotate = 7
 
+# Databases to backup, leave empty to backup all databases
 $configDbBackup = @()
+# If $configDbBackup is empty, don't backup the databases defined here
 $configDbExclude = @("test")
+# If $configDbBackup is empty, don't backup the databases matching these patterns
+$configDbExcludePattern = @()
 
 # End of config
 
@@ -68,8 +80,9 @@ $defaultDbExclude = @("information_schema", "performance_schema")
 
 $currDaytime = Get-Date -format "yyyyMMdd-HHmmss"
 
+# Get a list of all databases
 try {
-    $databases = Get-Databases | Where-Object {!($_ -in $defaultDbExclude -or $_ -in $configDbExclude)}
+    $databases = Get-Databases | Where-Object {!($_ -in $defaultDbExclude)}
 }
 catch {
     Write-Output "Failed to get list of databases"
@@ -77,6 +90,8 @@ catch {
     exit 1
 }
 
+# Create a list of databases to backup
+
 $databasesToBackup = @()
 
 if($configDbBackup -and $configDbBackup.count -gt 0) {
@@ -90,14 +105,35 @@ if($configDbBackup -and $configDbBackup.count -gt 0) {
     }
 }
 else {
-    $databasesToBackup = $databases
+    :excludeOuter
+    foreach($rDb in $databases) {
+        if($rDb -in $configDbExclude) {
+            continue;
+        }
+
+        foreach($cPattern in $configDbExcludePattern) {
+            if($rDb -match $cPattern) {
+                continue excludeOuter;
+            }
+        }
+
+        $databasesToBackup += $rDb
+    }
 }
 
+# Iterate over the list of databases and back them up and rotate the backups
 foreach($d in $databasesToBackup) {
     $databaseBackupDir = Join-Path -Path $configBackupDir -ChildPath $d
 
     if(!(Test-Path $databaseBackupDir)) {
-        New-Item -ItemType directory -Path $databaseBackupDir -ErrorAction Stop | Out-Null
+        try {
+            New-Item -ItemType directory -Path "$databaseBackupDir" -ErrorAction Stop | Out-Null
+        }
+        catch {
+            Write-Output "Failed to create directory $databaseBackupDir"
+            Write-Output $_
+            exit 1
+        }
     }
 
     $databaseBackupFile = Join-Path -Path $databaseBackupDir -ChildPath "backup-$d-$currDaytime.sql"

patrick-canterino.de