AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 7746
Accepted
grant tailor
grant tailor
Asked: 2011-11-09 22:39:23 +0800 CST2011-11-09 22:39:23 +0800 CST 2011-11-09 22:39:23 +0800 CST

导入大型 SQL 文件 phpmyadmin

  • 772

我正在尝试在 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

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

mysql php
  • 5 5 个回答
  • 67450 Views

5 个回答

  • Voted
  1. Best Answer
    gabe
    2011-11-09T23:16:44+08:002011-11-09T23:16:44+08:00

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

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

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

      mysql -u 用户名 -p 数据库名 < 文件名.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 传输,只需在其中转储您想要的内容。您始终可以从命令行移动它。

    如果您通过 FTP 将 MySQL 转储到您的 $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 设置 DB_USER 和 DB_PASSWORD(您可以从 PHPMYADMIN - Privileges 选项卡执行此操作)
    • 当您从 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 中找到的转储文件所在的目录。(本地机器的路径在最左边,大约一半的位置,标记为 Local site:。在我们的示例中,Local site: 旁边的文本框将显示为 C:\Web\DB\Dumps。)
    6. (在 FileZilla 中)直接在 Local Site: 右侧找到 Remote site: 标签。
    7. (在 FileZilla 中)没有技术原因不能将 DB DUMP 放在 FileZilla 打开的文件夹中。它可能会默认为您的 $HOME 目录。如果您没有任何理由将 DB Dump 放在特定目录中(例如出于您自己的组织目的),则将路径单独保留在远程站点上。记下该路径(Linux 示例:/usr/grant)。
    8. (在 FileZilla 中)在 FileZilla 左半部分的本地计算机上找到您在步骤 5 中找到的“本地站点:”标签下方的树下的文件。双击该文件,FileZilla 会将其通过 FTP 传输到您的远程站点。
    9. 在 DESTINATION 服务器上的 PHPMYADMIN 中,创建一个新数据库(在 Create new database 文本框中输入 mydb 并单击 Create 按钮)。
    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.gzsource.com 是 SOURCE 服务器(数据库当前所在的位置)
    5. 然后(在 DESTINATION 服务器上)运行:gunzip < $HOME/mydb.sql.gz | mysql -u DEST_DB_USER -pDEST_DB_PASSWORD mydb

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

    • 12
  2. Salman
    2011-11-09T23:21:48+08:002011-11-09T23:21:48+08:00

    你可以:

    • 增加memory_limit
    • 增加post_max_size
    • 增加max_execution_time
    • 完成所有这些后必须重新启动 Apache。
    • 或使用大转储
    • 3
  3. Jeremy
    2012-04-02T07:35:20+08:002012-04-02T07:35:20+08:00

    您的 SQL 文件是否已压缩?我在使用 6MB 压缩 sql 文件时遇到了这个问题。我将它解压成一个 53MB 的未压缩 sql 文件,它可以工作。进程内转储文件的解压缩必须占用所有内存。

    • 1
  4. Sumit Bijvani
    2011-11-09T23:08:56+08:002011-11-09T23:08:56+08:00

    如果您的数据库大小超过 128 MB,则将您的数据库分成几部分。

    使用SQL Dump Splitter软件

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

    • 选择每个块的大小
    • 选择跳过评论(甚至减少数据库的大小)
    • 自动化活动。
    • 0
  5. yas375
    2011-11-09T23:20:14+08:002011-11-09T23:20:14+08:00

    如果您可以通过 mysql 对服务器进行 ssh 访问,那么您可以将带有 mysql 转储的文件放在某个地方,请输入 mysql 控制台:

    mysql -u myUser myDatabase
    

    或者,如果 mysql 服务器位于 localhost 以外的位置,并且不仅允许来自 localhost 的连接:

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

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

    source ~/mydump.sql;
    

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

    在这种方法中,您不关心任何 php 内存限制。

    • 0

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve