我有一个 PowerShell 脚本,它每天从另一个组织恢复 sftp 数据库。最近开始接收另一个大得多的数据库。MySQL 是一个运行 v 5.6 的 Azure 服务。我也在临时的 v5.7 上尝试过它。脚本适用于 700MB 的文件,但无法处理大于 1GB 的文件。在我的桌面或服务器上使用 MySQL Workbench 可以工作,因此它不是服务器中的内存限制。
代码片段与[非常相似通过 powershell 恢复 mysql db:
$MySQLHost = 'aaaa.mysql.database.azure.com'
$MySQLAdminUserName = 'bbbb@aaaa-qa'
$MySQLAdminPassword = 'zzzzz'
$MySQLDatabase = 'abcde'
$MyFilePath = "C:\SFTP\qcis_backup\"
$MyUnzipDirectory = $MyFilePath + "database" + "\"
$MyDumpFilePath = $MyUnzipDirectory + "dump.sql"
get-content $MyDumpFilePath | &"C:\Program Files\MySQL\MySQL Workbench 8.0 CE\mysql.exe" -h $MySQLHost -u $MySQLAdminUserName --password=$MySQLAdminPassword --database=$MySQLDatabase
收到以下错误:
程序“mysql.exe”运行失败:引发了“System.OutOfMemoryException”类型的异常
我认为这是由于 get-content 被传送到 mysql cmd 并尝试加载到内存中。有没有其他方法可以处理这个问题?我一直在寻找示例,但没有找到任何可以轻松使用的示例。
感谢任何帮助。
答案1
希望我自己能找到答案,但功劳必须归功于微软支持
$MySQLcmd = -join("&","`"C:","\Program Files\MySQL\MySQL Workbench 8.0 CE\mysql.exe`"")
$MySQLcmd = -join($MySQLcmd," -h ", $MySQLHost, " -u ",$MySQLAdminUserName," --password=",$MySQLAdminPassword," --database=",$MySQLDatabase," -e `"source ",$MyDumpFilePath,"`"")
invoke-expression $MySQLcmd