매일 다른 조직에서 sftp된 DB를 복원하는 PowerShell 스크립트가 있습니다. 최근에 훨씬 더 큰 또 다른 데이터베이스를 받기 시작했습니다. 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
스스로 답을 찾았으면 좋겠지만 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