Meilleur auteur de réponses
Backup BDD MySQL Powershell

Question
-
Bonjour,
je souhaite faire un backup de plusieurs BDD MySQL via un script Powershell.
J'effectue déjà la manip sur une base.
Voici le script que j'ai écrit, je suis parti de mon script mono base pour y intégrer plusieurs bases. Mon problème est que lors de l’exécution le nom de l'export SQL ne contient pas le nom de ma DB et en plus de ça le fichier est vide.
$d= Get-Date $dString = $d.Year.ToString() + "-" + $d.Month.ToString() + "-" + $d.Day.ToString() + "_" + $d.Hour.ToString() + "-" + $d.Minute.ToString() + "-" + $d.Minute.ToString() $backupFilePath = "\\srv-rmessprod\d$\Script\RmessProd-" + $DB + "_" + $dString + ".sql" $backupFilePathzip = $backupFilePath + ".zip" $SKIPDATABASES="Database|information_schema|bamdb|bpmdb|bw_manager|bw_training|performance_schema|mysql|logsdb|publicationdb|rmess|schedulerdb|support|workdb" $DB=& '\\srv-rmessprod\d$\Blueway\mysql\bin\mysql.exe' -h [IP] -u [ID] -p[MDP] -proot22 --execute="show databases;" | Select-string -NotMatch $SKIPDATABASES | export-csv "\\srv-rmessprod\d$\Script\temp-bck.csv" $DBcsv="\\srv-rmessprod\d`$\Script\temp-bck.csv" foreach ($dblist in $DBcsv) { $backupFilePath = "\\srv-rmessprod\d$\Script\RmessProd-" + $database + "_" + $dString + ".sql" $database=$dblist.Line $dump = "& '\\srv-rmessprod\d$\Blueway\mysql\bin\mysqldump.exe' -h [IP] -u [ID] -p[MDP] $database --quick --lock-tables=false --compress > " + $backupFilePath Write-Host $dump invoke-expression $dump | out-null }
En n'affichant que le contenu de la boucle je m'aperçois qu'elle n'affiche rien non plus.
$SKIPDATABASES="Database|information_schema|bamdb|bpmdb|bw_manager|bw_training|performance_schema|mysql|logsdb|publicationdb|rmess|schedulerdb|support|workdb" $DB=& '\\srv-rmessprod\d$\Blueway\mysql\bin\mysql.exe' -h [IP] -u [ID] -p[MDP] --execute="show databases;" | Select-string -NotMatch $SKIPDATABASES | export-csv "\\srv-rmessprod\d$\Script\temp-bck.csv" $DBcsv="\\srv-rmessprod\d$\Script\temp-bck.csv" foreach ($dblist in $DBcsv) { Write-Host $dblist.Line }
Voici le contenu de mon CSV
#TYPE Microsoft.PowerShell.Commands.MatchInfo "IgnoreCase","LineNumber","Line","Filename","Path","Pattern","Context","Matches" "True","7","comptabilite","InputStream","InputStream","Database|information_schema|bamdb|bpmdb|bw_manager|bw_training|performance_schema|mysql|logsdb|publicationdb|rmess|schedulerdb|support|workdb",,"System.Text.RegularExpressions.Match[]" "True","8","facturation","InputStream","InputStream","Database|information_schema|bamdb|bpmdb|bw_manager|bw_training|performance_schema|mysql|logsdb|publicationdb|rmess|schedulerdb|support|workdb",,"System.Text.RegularExpressions.Match[]" "True","9","laszlodb","InputStream","InputStream","Database|information_schema|bamdb|bpmdb|bw_manager|bw_training|performance_schema|mysql|logsdb|publicationdb|rmess|schedulerdb|support|workdb",,"System.Text.RegularExpressions.Match[]"
Pouvez-vous m'aider ?
Izhocell
Réponses
-
ton bloc:
$d= Get-Date $dString = $d.Year.ToString() + "-" + $d.Month.ToString() + "-" + $d.Day.ToString() + "_" + $d.Hour.ToString() + "-" + $d.Minute.ToString() + "-" + $d.Minute.ToString()
Qui fait appel deux fois au paramètre Minute, peut facilement être remplacer par:
$dString = (get-date).ToString("yy-MM-dd_hh-mm-ss")
ta ligne
$backupFilePath = "\\srv-rmessprod\d$\Script\RmessProd-" + $DB + "_" + $dString + ".sql"
fait appel à la variable $DB qui n'est pas encore peuplée à ce moment là.
Tu exporte un CSV:
export-csv "\\srv-rmessprod\d$\Script\temp-bck.csv"
mais tu ne le réimporte pas:
$DBcsv="\\srv-rmessprod\d`$\Script\temp-bck.csv"
à ce moment là, la variable $DBcsv contient juste un string: "\\srv-rmessprod\d`$\Script\temp-bck.csv"
alors, soir tu importe le csv comme il faut avec Import-csv
$DBcsv = import-csv "\\srv-rmessprod\d`$\Script\temp-bck.csv"
Soit tu peuple la variable $DBcsv directement en une ligne:
$DBcsv = '\\srv-rmessprod\d$\Blueway\mysql\bin\mysql.exe' -h [IP] -u [ID] -p[MDP] --execute="show databases;" | Select-string -NotMatch $SKIPDATABASES
A tester....
- Marqué comme réponse Izho_cell lundi 11 juillet 2016 07:25
Toutes les réponses
-
ton bloc:
$d= Get-Date $dString = $d.Year.ToString() + "-" + $d.Month.ToString() + "-" + $d.Day.ToString() + "_" + $d.Hour.ToString() + "-" + $d.Minute.ToString() + "-" + $d.Minute.ToString()
Qui fait appel deux fois au paramètre Minute, peut facilement être remplacer par:
$dString = (get-date).ToString("yy-MM-dd_hh-mm-ss")
ta ligne
$backupFilePath = "\\srv-rmessprod\d$\Script\RmessProd-" + $DB + "_" + $dString + ".sql"
fait appel à la variable $DB qui n'est pas encore peuplée à ce moment là.
Tu exporte un CSV:
export-csv "\\srv-rmessprod\d$\Script\temp-bck.csv"
mais tu ne le réimporte pas:
$DBcsv="\\srv-rmessprod\d`$\Script\temp-bck.csv"
à ce moment là, la variable $DBcsv contient juste un string: "\\srv-rmessprod\d`$\Script\temp-bck.csv"
alors, soir tu importe le csv comme il faut avec Import-csv
$DBcsv = import-csv "\\srv-rmessprod\d`$\Script\temp-bck.csv"
Soit tu peuple la variable $DBcsv directement en une ligne:
$DBcsv = '\\srv-rmessprod\d$\Blueway\mysql\bin\mysql.exe' -h [IP] -u [ID] -p[MDP] --execute="show databases;" | Select-string -NotMatch $SKIPDATABASES
A tester....
- Marqué comme réponse Izho_cell lundi 11 juillet 2016 07:25
-