2016-03-21 7 views
0

Als ein weiterer Beitrag (Script for MySQL backup to multiple files), erhielt ich Hilfe, ein Powershell-Skript zu erstellen, das Sicherung von MySQL-Datenbanken erstellt und mehrere Dateien erzeugt, eine für jede Datenbank. Wie zu sehen ist, erstellt das Skript eine Pipeline zwischen einem Befehl mysql und mysqldump.Skript für MySQL mit Benutzer und Passwort als Parameter eingegeben

Meine Absicht ist jetzt, die Benutzerinformationen und das Passwort direkt im Skript zu entfernen. Als weiteren Link (How to perform a mysqldump without a password prompt?) habe ich die my.cnf-Konfigurationsdatei MYSQL_HOME erstellt, die Informationen zu [mysqldump] übergeben und das Flag --defaults-extra-file verwendet. Das Problem ist, dass dieses Flag für mysql.exe nicht funktioniert, daher konnte diese Lösung nicht verwendet werden.

Um zu vermeiden, die Benutzer- und Passwort-Informationen direkt im Skript zu lassen, habe ich einen anderen Beitrag (How to handle command-line arguments in PowerShell) verwendet, der zeigt, wie Parameter konfiguriert werden, die in Powershell-Skripte eingegeben werden. Damit sah mein Skript dies wie:

param (
    [string]$username = $(throw "-username is required."), 
    [string]$password = $(Read-Host "Input password, please") 
) 

$BACKUPDATE = Get-Date -UFormat "%Y-%m-%d_%H%M%S" 
$BKPFOLDER='E:\bkp' 
$MYSQL_HOME="C:\MYSQL" 

Set-Location "$MYSQL_HOME\bin" 
    & .\mysql.exe -N -s -r -u $username -p$password -e 'show databases' | % { 
    & .\mysqldump.exe -u $username -p$password --single-transaction $_ | 
     Out-File "$BKPFOLDER\${_}_$BACKUPDATE.sql" -Encoding Ascii 
} 

Wenn ich den folgenden Befehl:

test.ps1 -username bkpuser -password mypass 

ich die folgende Meldung:

ERROR 1045 (28000): Access denied for user 'bkpuser'@'localhost' (using password: YES) 

Aber es gibt keine Zugriffsberechtigung Problem , denn wenn ich die Werte von $ username und $ password ersetze, um mysql und mysqldump mit korrekten Werten (ausschließlich des Parameters) aufzurufen, funktioniert der Befehl.

Was soll ich ändern?

Antwort

1

Der PowerShell-Parser kann nicht bestimmen, wo das Befehlszeilenargument endet und der vairable Name beginnt. Sie können dies deutlich in ISE, weil $password rot sein sollte, aber es ist blau:

PS ISE

Nur Leerzeichen zwischen -p und $password oder verwenden „=“: --user=$username --password=$password

+0

die Nutzung von Raum hat nicht aufgelöst, aber ** - user = $ user ** und ** - password = $ password ** funktioniert. Vielen Dank! –

Verwandte Themen