2016-03-21 62 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

空间的使用并没有解决,但** - 用户= $用户**和** - 密码= $密码**工作。谢谢! –

相关问题