使用cmd,我将运行mysql -uroot database < filename.sql来导入数据库转储(从文件中读取并传递给MySQL)。然而,<在powershell中是“保留”的。
相反,在powershell中,我使用get-content filename.sql | mysql -uroot database。请注意,powershell在将filename.sql传递给MySQL之前,会将它完全读入内存,而对于大型数据库转储,它只是耗尽了内存。
显然,我可以通过cmd来执行这些任务,但是我有一些powershell脚本可以自动执行这样的任务,而且我不想要批量地重写它们。在这种情况下,filename.sql是在自动化开始时通过PS参数指定的变量。
那么,我如何克服这个内存限制呢?是否有另一种方法直接将文件内容输送到MySQL?
发布于 2011-01-25 01:19:00
你可以试试
mysql -uroot -pYourPassword -e "source C:\temp\filename.SQL"或
mysql --user=root --password=YourPassword --execute="source C:\temp\filename.SQL"如果事情开始变得复杂,也许您应该编写一个执行复杂任务的C#控制台应用程序。
发布于 2011-01-25 01:26:53
不确定这是否适用于您的应用程序(它应该一次处理1000条记录的文件,而不是一次处理所有记录):
get-content filename.sql -readcount 1000 |% {$_ | mysql -uroot database}发布于 2014-04-27 00:20:40
我想说的是,对于大型文件,请远离cmdlet。我一直在使用30+百万行的文件做类似的事情,通过使用下面的代码没有问题。它在速度和内存消耗方面都表现得非常好.
$reader = [IO.File]::OpenText($filetoread)
while ($reader.Peek() -ge 0) {
$line = $reader.ReadLine()
#do your thing here
}
$reader.Close()https://stackoverflow.com/questions/4788935
复制相似问题