作为另一篇文章(Script for MySQL backup to multiple files),我收到了创建Powershell脚本的帮助,该脚本创建了MySQL数据库的备份并生成了多个文件,每个文件对应一个数据库。可以看出,脚本在命令mysql和mysqldump之间建立了一个管道。
我现在的目的是直接在脚本中删除用户信息和密码。作为另一个链接(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,则该命令可以正常工作。
我应该改变什么?