导入大型 SQL 文件 phpmyadmin

gra*_*lor 12 mysql phpmyadmin php

我正在尝试在 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
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能执行此导入?

小智 12

假设您不能进一步增加内存大小,那么有几个选项。

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

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

    mysql -u USERNAME -p DATABASENAME < FILENAME.sql

但是,在运行此命令之前,数据库和用户(具有数据库权限)需要存在。注意我从另一个来源复制了上述命令。我总是像这样做我的转储和恢复:转储:mysqldump -u DB_USER -h DB_HOST -pDB_PASSWORD DB_NAME | gzip -9 > DB_NAME.sql.gz 恢复:gunzip < PATH_TO_DUMP/DB_NAME.sql.gz | mysql -u DB_USER -pDB_PASSWORD DB_NAME

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

FTP 和恢复说明:

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

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

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

如果您通过 FTP 将 MySQL 转储到您的 $HOME 文件夹中,那么名为 mydb 的数据库和名为 mydb.sql.gz 的数据库转储文件(在 $HOME 文件夹中)的 RESTORE 命令将是:

gunzip < $HOME/mydb.sql.gz | mysql -u DB_USER -pDB_PASSWORD mydb
Run Code Online (Sandbox Code Playgroud)

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

记住:

  • 在执行 RESTORE 命令之前,DB 必须已经存在(但为空)
  • 必须在 RESTORE 命令之前为 DB 设置 DB_USER 和 DB_PASSWORD(您可以从 PHPMYADMIN - Privileges 选项卡执行此操作)
  • 当您从 PHPMYADMIN 设置 DB_USER 时,它将默认仅允许 DB_USER 从本地主机(托管数据库的服务器)访问数据库。我假设这对您的情况补助金很好。当您进入更高级的转储和恢复时,您可能希望完全从另一台机器上完成,这并不难,但需要提供更多的信息和具有适当权限的 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 中)一旦连接到远程服务器(应该是您的目标服务器),使用 FileZilla 的左侧导航到您在步骤 1 中找到的转储文件所在的目录。(本地机器的路径在最左边,大约一半的地方,它被标记为本地站点:。在我们的示例中,本地站点:旁边的文本框将显示为 C:\Web\DB\Dumps。)
  6. (在 FileZilla 中)直接在本地站点:右侧找到远程站点:标签。
  7. (在 FileZilla 中)没有技术原因不能将 DB DUMP 放在 FileZilla 打开的文件夹中。它可能会默认为您的 $HOME 目录。如果您没有任何理由将 DB Dump 放在特定目录中 - 例如出于您自己的组织目的 - 则将路径留在远程站点上。记下该路径(Linux 示例:/usr/grant)。
  8. (在 FileZilla 中)在 FileZilla 左半部分的本地机器上找到文件,就在本地站点下方显示的树下:在步骤 5 中找到的标签。双击该文件,FileZilla 会将其通过 FTP 传输到您的远程站点。
  9. 在 DESTINATION 服务器上的 PHPMYADMIN 中,创建一个新数据库(在“创建新数据库”文本框中键入 mydb 并单击“创建”按钮)。
  10. (在 PHPMYADMIN 中)从左侧菜单中选择 mydb。
  11. (在 PHPMYADMIN 中)单击权限选项卡(右上角)。在该页面上单击添加新用户。
  12. (在 PHPMYADMIN->Privileges->Add New User 中)提供用户名(例如:mydb_grant)和密码(例如:mydb_password)。在主机下拉列表中选择本地。确保选中“授予数据库的所有权限”旁边的单选按钮。然后单击 Go(屏幕右下角)。
  13. 通过 SSH 连接到您的 DESTINATION 服务器。
  14. (在您的 SSH 终端中)导航到您在第 7 步中记下的目录。使用类似 -cd $HOME或的命令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.gz其中 source.com 是 SOURCE 服务器(数据库当前所在的位置)
  5. 然后(在 DESTINATION 服务器上)运行: gunzip < $HOME/mydb.sql.gz | mysql -u DEST_DB_USER -pDEST_DB_PASSWORD mydb

这应该就是将数据库从一台服务器移动到另一台服务器所需要做的全部工作。需要注意的是,我只在我自己的专用 Ubuntu(使用标准 LAMP)和 Dreamhost 的 VPS 服务器(我相信它运行 CentOS,但我可能是错的)上这样做过。