mysql - MySQL 脚本,用户名和密码作为参数输入

标签 mysql powershell

在另一篇文章 ( 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,该命令就可以工作。

我应该改变什么?

最佳答案

PowerShell 的解析器无法确定命令行参数的结束位置和可用名称的开始位置。您可以在 ISE 中清楚地看到这一点,因为 $password 应该是红色的,但它是蓝色的:

PS ISE

只需在 -p$password 之间添加空格或使用“=”: --user=$username --password=$password

关于mysql - MySQL 脚本,用户名和密码作为参数输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36132807/

相关文章:

php - 将 MySQL 查询分成 $query 和 $result 有什么值(value)?

mysql - sql行值作为列?

powershell - 是否可以在PSObject中为 “for”做一个?

azure - Pester/PowerShell 输出应匹配/包含 $a 或 $b

如果目录不存在,Powershell 'Move-Item' 不会创建目录

powershell - [ADSI]::Exists 抛出异常而不是返回 False

arrays - 将目录文件夹名称存储到阵列 Powershell

php - 如何在准备好的语句中绑定(bind)嵌套查询的参数?

sql - mySQL返回每个类别的前5名

php - 通过 mySQL DB 迭代并将字符串转换为不同的编码