导入大型SQL文件phpmyadmin


12

我试图在phpmyadmin中导入此SQL文件并收到此消息

#1064 - You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 
'<br /> <b>Fatal error</b>: Allowed memory size of 134217728 bytes exhausted (tr' at line 1

我该怎么做才能导入?

Answers:


12

假设您无法进一步增加内存大小,则有两种选择。

  • 如果您不熟悉命令行,并且确实想坚持使用GUI样式导入,则可以使用BigDump(http://www.ozerov.de/bigdump/)。我曾经使用过,但是已经有一段时间了。据我所知,您将下载一个名为bigdump.php的文件(带有一些说明),并将其放在MySQL DB转储文件目录下的Web服务器上,该文件太大而无法通过PHPMYADMIN导入。然后使用您的浏览器导航至它-类似于http://your-website.com/bigdump.php

  • 如果您熟悉命令行并使用基于Linux的系统,则可以使用如下代码:

    mysql -u用户名-p数据库名<FILENAME.sql

但是,在运行此命令之前,数据库和用户(具有数据库特权)将需要存在。注意我从其他来源复制了上面的命令。我总是像这样进行转储和还原:DUMP:mysqldump -u DB_USER -h DB_HOST -pDB_PASSWORD DB_NAME | gzip -9 > DB_NAME.sql.gz RESTORE:gunzip < PATH_TO_DUMP/DB_NAME.sql.gz | mysql -u DB_USER -pDB_PASSWORD DB_NAME

  • 最后,最痛苦的是,您可以选择将单个表或表组转储到足够小的转储中。然后通过PHPMYADMIN一次还原这些单个转储。

FTP和RESTORE指令:

在此处下载FileZilla:http : //filezilla-project.org/download.php? type= client

通常,您可以使用与SSH(命令行登录)相同的登录名和密码通过FTP进入服务器(尤其是共享主机)。只需确保在FileZilla中正确设置与服务器的连接即可。

连接后,默认路径可能是您的$ HOME文件夹(在nix机器上)。如果您不打算进行大量FTP传输,则只需在其中转储您想要的内容即可。您始终可以从命令行将其移动。

如果将MySQL转储通过FTP传输到$ HOME文件夹中,则名为mydb的数据库和名为mydb.sql.gz的数据库转储文件(位于$ HOME文件夹中)的RESTORE命令将为:

gunzip < $HOME/mydb.sql.gz | mysql -u DB_USER -pDB_PASSWORD mydb

您显然需要将DB_USER和DB_PASSWORD值更改为您为数据库设置的用户和密码。

记得:

  • 执行RESTORE命令之前,数据库必须已经存在(但为空)
  • 必须在RESTORE命令之前为数据库设置DB_USER和DB_PASSWORD(可以从PHPMYADMIN-“特权”选项卡执行此操作)
  • 从PHPMYADMIN设置DB_USER时,默认情况下将仅允许DB_USER从本地主机(托管数据库的服务器)访问数据库。我认为这对您的情况补助很好。当您进入更高级的DUMP和RESTORE时,您可能希望完全从另一台机器上完成此任务,这并不难,但是需要提供更多的信息,并且DB_USER必须具有适当的特权。

FTP数据库并还原它...逐步

  1. 在您的桌面上找到压缩的MySQL转储文件(示例:C:\ Web \ DB \ Dumps \ mydb.sql.zip)
  2. 下载并安装FileZilla
  3. 在FileZilla中,转到File-> Site Manager,然后单击New Site按钮(GUI的左下象限)。将主机设置为位于您的DESTINATION服务器上的域(示例:dest.com)。将协议设置为FTP或SFTP(这取决于您的主机,请询问他们)。设置用户和密码(例如:用户=授予,密码=授予的密码)-如果FTP协议是SFTP,则任何有效的SSH登录凭据集都应该起作用。
  4. (在FileZilla中)单击“连接”(最底部的底部按钮)
  5. (在FileZilla中)一旦连接到远程服务器(应该是DESTINATION服务器),请使用FileZilla的左侧导航到您在步骤1中找到的转储文件所在的目录。(本地计算机的路径在最左端,大约位于一半位置,并标记为本地站点:。在我们的示例中,本地站点:旁边的文本框显示为C:\ Web \ DB \ Dumps。)
  6. (在FileZilla中)找到“远程站点:”标签,直接位于“本地站点:”的右侧。
  7. (在FileZilla中)没有技术原因不能将DB DUMP放在FileZilla打开的文件夹中。它可能默认为您的$ HOME目录。如果您没有任何理由将数据库转储放在特定目录中(例如,出于您自己的组织目的),则请仅将路径保留在远程站点上。写下该路径(Linux示例:/ usr / grant)。
  8. (在FileZilla中)在本地站点下面显示的树下的FileZilla左半边的本地计算机上找到该文件:在步骤5中找到的标签。双击该文件,FileZilla将通过FTP将其传输到远程站点。
  9. 在DESTINATION服务器上的PHPMYADMIN中,创建一个新数据库(在“创建新数据库”文本框中键入mydb,然后单击“创建”按钮)。
  10. (在PHPMYADMIN中)从左侧菜单中选择mydb。
  11. (在PHPMYADMIN中)单击“权限”选项卡(右上)。在该页面上,单击添加新用户。
  12. (在PHPMYADMIN->特权->添加新用户中)提供用户名(例如:mydb_grant)和密码(例如:mydb_password)。在主机下拉列表中,选择本地。确保选中“授予数据库所有特权”旁边的单选按钮。然后单击执行(屏幕右下方)。
  13. SSH到您的DESTINATION服务器。
  14. (在SSH终端中)使用- cd $HOME或命令导航到您在步骤7中记下的目录cd /usr/grant。(在Linux机器上,$ HOME是一个环境变量,将等于/ usr / grant。)
  15. (在SSH终端中)执行以下命令:(gunzip < /usr/grant/mydb.sql.gz | mysql -u mydb_grant -pmydb_password mydb-p和密码之间没有空格,因为这是需要的方式,而不是错字)。

最后一条命令完成后,您的数据库已恢复。我不建议使用我提供的数据库用户名和密码,只需用自己更安全的选择替换它们即可。

没有FTP的不同服务器上的DUMP和RESTORE

如果您希望跳过FTP内容并且不介意重做DUMP,则可以通过以下方式进行操作:

  1. 登录到DESTINATION服务器(您希望数据库驻留在此处-我们将其称为destination.com)
  2. 如上所述在DESTINATION服务器上创建数据库,用户和适当的特权
  3. 确保SOURCE服务器上的特权允许SOURCE_DB_USER远程访问数据库-允许从dest.com或%(%-每个人和任何地方,只要他们具有正确的用户名和密码)就可以访问
  4. 在DESTINATION服务器上,运行:mysqldump -u SOURCE_DB_USER -h source.com -pSOURCE_DB_PASSWORD mydb| gzip -9 > $HOME/mydb.sql.gzsource.com是SOURCE服务器(数据库当前所在的位置)
  5. 然后(在DESTINATION服务器上)运行: gunzip < $HOME/mydb.sql.gz | mysql -u DEST_DB_USER -pDEST_DB_PASSWORD mydb

这是将数据库从一台服务器移至另一台服务器所需要做的所有工作。需要注意的是,我只在自己专用的Ubuntu(带有标准LAMP)和Dreamhost的VPS服务器(我相信它们运行CentOS,但我可能错了)上做到了。


3

您可以:

  • 增加 memory_limit
  • 增加 post_max_size
  • 增加 max_execution_time
  • 完成所有这些操作后必须重新启动Apache。
  • 或使用Big Dump

1

您的SQL文件是否已压缩?我有一个6MB压缩sql文件的此问题。我将其解压缩为一个53MB的未压缩sql文件,它可以正常工作。在过程中解压缩转储文件必须占用所有内存。


0

如果您可以使用mysql进行ssh访问服务器,则可以将mysql dump文件放置在某个位置,请输入mysql控制台:

mysql -u myUser myDatabase

或者,如果mysql服务器不在本地主机上,并且不仅允许本地主机连接,还允许:

mysql -u myUser -h mysql.example.com myDatabase

然后会要求您输入mysql用户的密码。现在您在mysql控制台中。在这里你可以输入

source ~/mydump.sql;

您将看到转储中的命令将如何执行。

在这种方法中,您无需担心任何php内存限制。


0

如果数据库大小大于128 MB,则将数据库分成几部分。

使用SQL Dump Splitter软件

SQL Dump Splitter是一个430 KB的应用程序,可以完全控制轻松地将大型数据库拆分为较小的SQL文件。使用SQL Dump Splitter,您可以:

  • 选择每个块的大小
  • 选择跳过注释(甚至减小数据库的大小)
  • 自动化活动。

您如何使活动自动化?我使用分割器,我不知道它是如何工作的...它完成了分割,却没有告诉我将文件分割成什么块,现在没有帮助或常见问题解答来帮助使用它。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.