由于<无法在Powershell上运行数据库还原字符

时间:2016-07-06 11:26:05

标签: mysql powershell command-line backup restore

我正在尝试运行以下命令:

&$parameterHash["mysql"] -u $parameterHash["user"] -p"$($parameterHash['password'])" -h $parameterHash["host"] $parameterHash['database'] `< $parameterHash['backup-path']

注意整个命令的这一部分:

$parameterHash['database'] `< $parameterHash['backup-path']

这是mysql命令行的语法,用于将备份(即 SQL脚本)从文件系统位置恢复到给定数据库的名称。

首先,我不得不在Powershell中以反引号逃脱>

问题是当我从Powershell运行它时,mysql命令行无法识别整个命令。运行后,mysql会输出帮助。

如果我将该命令作为字符串输出,并且我尝试在常规CMD(即cmd.exe)中运行该命令,则它会按预期工作。

目前,我无法弄清楚发生了什么。

更新

我也试过这个:

$restoreArgs = "-u $($parameterHash["user"]) -p""$($parameterHash['password'])"" -h $($parameterHash["host"]) $($parameterHash['database']) < $($parameterHash['backup-path'])"
Start-Process $parameterHash["mysql"] $restoreArgs

......我得到了同样的结果。

1 个答案:

答案 0 :(得分:3)

PowerShell不支持输入重定向,仅支持https://github.com/rescrv/HyperDex/issues/232。我现在手头没有MySQL,所以我无法测试,但你可以试试

Get-Content $parameterHash['backup-path'] | &$parameterHash["mysql"] -u $parameterHash["user"] -p"$($parameterHash['password'])" -h $parameterHash["host"] $parameterHash['database']

如果输入必须是单个字符串,请使用参数Get-Content(PowerShell v3和更新版本)调用-Raw

Get-Content $parameterHash['backup-path'] -Raw | ...

首先通过Get-Content输出Out-String输出:

Get-Content $parameterHash['backup-path'] | Out-String | ...

另一种选择是使用CMD运行命令行,CMD支持output redirection

$mysql  = $parameterHash["mysql"]
$user   = $parameterHash["user"]
$pass   = $parameterHash['password']
$server = $parameterHash["host"]
$db     = $parameterHash['database']
$backup = $parameterHash['backup-path']

cmd /c "$mysql -u $username -p $password -h $server -d $db < $backup"