Eu tenho um script do PowerShell que restaura diariamente um banco de dados sftp de outra organização. Recentemente comecei a receber outro banco de dados bem maior. MySQL é um serviço do Azure em execução na versão 5.6. Eu tentei em uma v5.7 temporária também. O script funciona para arquivos de 700 MB, mas falha em arquivos > 1 GB. Usar o MySQL Workbench no meu desktop ou no servidor funciona, portanto não é uma restrição de memória no servidor.
O snippet de código é muito semelhante a [restaurando um banco de dados mysql via powershell:
$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
Obtendo o seguinte erro:
Falha ao executar o programa 'mysql.exe': exceção do tipo 'System.OutOfMemoryException' foi lançada
Eu acho que é devido ao get-content ser canalizado para o cmd mysql e tentar carregar na memória. Existe alguma maneira de processar isso de forma diferente? Estou procurando exemplos há algum tempo, mas não encontrei nenhum que eu possa usar facilmente.
Agradeço qualquer ajuda.
Responder1
Gostaria de ter encontrado a resposta sozinho, mas o crédito deve ir para o Suporte da 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