透過powershell恢復大型mysql資料庫時出錯

透過powershell恢復大型mysql資料庫時出錯

我有一個 PowerShell 腳本,每天從另一個組織還原 sftp 資料庫。最近開始接收另一個更大的資料庫。 MySQL 是一項執行 v 5.6 的 Azure 服務。我也在臨時的 v5.7 上嘗試過。腳本適用於 700MB 文件,但不適用於 > 1GB 文件。在我的桌面或伺服器上使用 MySQL Workbench 是可行的,因此伺服器中沒有記憶體限制。

程式碼片段與 [ 非常相似透過powershell恢復mysql資料庫:

$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

希望我自己找到了答案,但功勞必須歸功於 Microsoft 支持

$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 

相關內容