2016-03-21 67 views
0

作爲另一篇文章(Script for MySQL backup to multiple files),我收到了有關創建Powershell腳本的幫助,該腳本創建MySQL數據庫的備份並生成多個文件,每個文件對應一個數據庫。可以看出,該腳本在命令mysql和mysqldump之間建立了一條管道。MySQL的腳本,輸入用戶名和密碼作爲參數

我現在的意圖是直接在腳本中刪除用戶信息和密碼。作爲另一個鏈接(How to perform a mysqldump without a password prompt?),我創建了my.cnf配置文件MYSQL_HOME,傳遞[mysqldump]上的信息,並使用標誌--defaults-extra-file。問題是這個標誌不適用於mysql.exe,所以不能使用這個解決方案。

爲了避免直接在腳本中留下用戶和密碼信息,我使用了另一篇文章(How to handle command-line arguments in PowerShell),其中顯示瞭如何配置輸入到Powershell腳本中的參數輸入。就這樣,我的劇本是這樣的:

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 
} 

當我運行下面的命令:

test.ps1 -username bkpuser -password mypass 

我得到以下信息:

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

但沒有訪問權限的問題,因爲如果我使用正確的值(不包括參數)替換$ usename和$ password的值來調用mysql和mysqldump的值,則該命令有效。

我應該改變什麼?

回答

1

PowerShell的解析器無法確定命令行參數在哪裏結束,可開始名稱的起始位置。你可以清楚地在ISE看到這一點,因爲$password應該是紅色的,但它是藍色:

PS ISE

-p$password之間只需添加空間或使用「=」:--user=$username --password=$password

+0

空間的使用並沒有解決,但** - 用戶= $用戶**和** - 密碼= $密碼**工作。謝謝! –

相關問題