我正在尝试将非常大的.sql文件导入我的数据库。该文件目前是20GB大。我尝试使用控制台mysql数据库< backup.sql但现在需要超过24小时,而mysql服务器不再做出任何反应。
如何导入这么大的文件?我认为拆分它是要走的路,但我怎样才能正确拆分?它只有一个包含多个插入语句的表。
答案 0 :(得分:1)
MySQL具有内置于该语言中的api驱动表插入。见下文。 使用此:http://dev.mysql.com/doc/refman/5.1/en/load-data.html
您需要将文件从插入语句重新格式化为某种形式的csv等,但这应该比单个语句更快的顺序,因为它是一种与RDBMS通信的方式“我即将上传一个大量的数据,保存重新设置和簿记的开销直到最后,确保你有足够的空间并抓住那个空间而不是每次填满,确保你使用适当的锁等等,等等。“ / p>
答案 1 :(得分:0)
只需锁定表格,然后复制此表格数据文件(.frm,.MYI,.MYD)。
您可以立即获得可以导入任何数据库的现成数据文件。
这种方法对myisam非常有效。 不确定innodb。
答案 2 :(得分:0)
您可以拆分sql文件并将其导入数据库。
拆分sqldump文件的最简单方法是使用sqldumpsplitter
软件,下载link
或者使用此终端命令拆分
split -l 5000 ./path/to/mysqldump.sql ./mysqldump/dbpart-
这里5000是sql命令的行数,你更喜欢拆分。接下来的两个参数分别是源路径和目标路径。将为单个拆分文件指定一个名称,并在其末尾附加字母。
希望它可以帮助有这个问题的其他人。
答案 3 :(得分:0)
我建议您在尝试跨分割文件保留SQL查询时考虑以下情况:
有了这两种情况的知识,您可以编写一个简单的脚本,逐行处理您的SQL转储,并在找到以分号(;)结尾的行或者500行这样的行时将其拆分。
我为类似的问题编写了这样一个脚本:https://gist.github.com/pratikone/0a8d503ffe893b2111f5a1d70d3999b7
它只检查行中的分号(;)而不是行的末尾,但是我没有查询中有分号(;)的任何SQL查询,所以它工作得非常好。鉴于此,如果您的数据在查询之间可以有分号,那么这是一个很小的变化。