Import large MySQL .sql file on Windows with Force

2019-01-24 15:29发布

问题:

I would like to import a 350MB MySQL .sql file on a Windows 7 machine. I usually do this by using

mysql -uuser -p -e "source c:/path/to/file.sql" database

since < doesn't work in Powershell.

My .sql file has an error in it this time. I'd prefer to just skip the bad row and continue the import. How can I force the import to continue on Windows?

On a unix/linux based system, I could use

mysql --force ... < file.sql

but --force doesn't seem to work with the -e "source ..." command (understandably so).

Thanks, Mike

回答1:

You're probably going to have to have Powershell execute this in the standard console in order to use < properly. Technically you could use get-content and pipe the output to mysql, but I've always found that to be slow, and it somehow still keeps the file contents in memory of the Powershell session.

This is how I would execute it from the Powershell prompt (changed file path to include spaces to demonstrate inner quotes, just in case):

cmd /C 'mysql -uuser -p --force < "C:\path\with spaces\to\file.sql"'

[GC]::collect() would apparently clear it up the memory, but you can't do that until after it's done anyway. When it comes to mysql and mysqldump, I don't bother with Powershell. The default encoding used in > is Unicode, making dump files twice as big out of Powershell as out of cmd unless you remember to write | out-file dump.sql -enc ascii instead of > dump.sql.



回答2:

I'd suggest to also have a look at this SO answer, that takes advantage of source SQL command: