我正在尝试将一个非常大的.sql文件导入到我的数据库中,该文件目前有20GB大小。我尝试使用控制台mysql数据库< backup.sql,但这需要超过24小时,并且mysql服务器不再做出反应。
我该如何导入这么大的文件呢?我认为拆分它是正确的方法,但如何正确拆分呢?它只是一个包含多个插入语句的表格。
我该如何导入这么大的文件呢?我认为拆分它是正确的方法,但如何正确拆分呢?它只是一个包含多个插入语句的表格。
sqldumpsplitter
软件,下载 link。split -l 5000 ./path/to/mysqldump.sql ./mysqldump/dbpart-
其中,5000 是你想要拆分的 SQL 命令行数。接下来的两个参数分别是源文件路径和目标文件路径。产生的每个拆分文件都会带有末尾的字母名称。简单地锁定表,然后复制该表的数据文件(.frm、.MYI、.MYD)。
立即获得一个可以导入到任何数据库的准备好的数据文件。
这种方法对于myisam非常有效。 不确定innodb是否适用。
我建议您在尝试跨多个文件保留SQL查询时考虑以下情况:
掌握了这两种情况的知识后,您可以编写一个简单的脚本,逐行处理您的SQL转储,并在找到以分号(;)结尾的行或者500行时将其拆分成块。
我曾经为类似的问题编写过这样的脚本:https://gist.github.com/pratikone/0a8d503ffe893b2111f5a1d70d3999b7
它只检查行中的分号(;),而不是行末的分号(;),但我没有遇到任何SQL查询中包含分号(;)的情况,所以它完美地工作。鉴于这一点,如果您的数据可以在查询之间有分号,则需要进行小修改。