none
Backup BDD MySQL Powershell RRS feed

  • 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

    vendredi 8 juillet 2016 07:54

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
    samedi 9 juillet 2016 12:45

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
    samedi 9 juillet 2016 12:45
  • Super ça fonctionne.

    J'avais oublié le import-csv.

    Merci.

    lundi 11 juillet 2016 07:24