将用户名和密码作为参数输入的 MySQL 脚本

Posted

技术标签:

【中文标题】将用户名和密码作为参数输入的 MySQL 脚本【英文标题】:script for MySQL with user and password entered as a parameter 【发布时间】:2016-07-08 01:35:24 【问题描述】:

作为另一篇帖子 (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,命令就可以了。

我应该改变什么?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

空间的使用没有解决,但是--user=$user--password=$password有效。谢谢!

以上是关于将用户名和密码作为参数输入的 MySQL 脚本的主要内容,如果未能解决你的问题,请参考以下文章

php 表单的输入字段显示数据库用户名和密码

如何使用用户输入作为参数运行 .py 脚本

Jmeter参数化

jmeter参数化

怎么用shell脚本 去 读取MySQL中的数据,并把数据传到该脚本中? 谢谢!

JMeter--参数化