3

我的公司收到了一个超过 20 GB 的 .sql 文件,以响应来自政府的数据请求。我没有很多选项可以获取不同格式的数据,因此我需要如何在合理的时间内导入数据的选项。我正在使用 Navicat 的批处理执行工具在高端服务器(Win 2008 64bit,MySQL 5.1)上运行它。它已经运行了 14 个小时,并且没有显示接近完成的迹象。

有谁知道这种交易的任何更高速度的选择?或者这是我应该期待的大文件大小?

谢谢

4

4 回答 4

9

我猜你的意思是它是mysqldump作为数据库备份生成的文件,所以它主要包含CREATE TABLEINSERT语句。

(但严格来说,SQL 脚本可以包含任何内容,例如定义和执行长时间运行的存储过程、导致死锁的查询等。我假设情况并非如此。)

鉴于您拥有备份文件并且无法更改其文件类型,您可以执行以下操作来加快恢复速度:

  1. 禁用外键检查:(SET FOREIGN_KEY_CHECKS=0记得之后重新启用)。也禁用唯一检查:SET UNIQUE_CHECKS=0

  2. 如果您使用 MyISAM 表,请确保您key_buffer_size的设置尽可能大。默认为 8MB,最大为 4GB。我会尝试1GB。

    这些最初的提示来自 Baron Schwartz 的一篇文章:http: //lists.mysql.com/mysql/206866

  3. 如果您使用 InnoDB 表,请确保您innodb_buffer_pool_size的设置尽可能大。默认为 8MB,最大为 4GB。我会尝试1GB。

  4. innodb_flush_log_at_trx_commit = 2如果您使用 InnoDB 表,请在还原期间设置。

  5. @Mark B 在下面添加了一个很好的建议,以在还原期间禁用密钥。这就是你的做法:

    ALTER TABLE <table-name> DISABLE KEYS;
    ...run your restore...
    ALTER TABLE <table-name> ENABLE KEYS;
    

    但是该命令一次只影响一个表。您必须为每个表发出单独的命令。也就是说,通常情况下一个表比其他表大得多,因此您可能只需要禁用该大表的键。

    此外,如果包含您的还原的 SQL 脚本删除并重新创建表,这将绕过禁用键。在创建表之后和插入行之前,您必须找到某种方法来插入命令以禁用键。sed在将 SQL 脚本提供给 mysql 客户端之前,您可能需要创造性地预处理 SQL 脚本。

  6. 使用带有--innodb-optimize-keys选项的 Percona Server 版本的 mysqldump 。

于 2010-05-11T15:22:56.353 回答
2

周围有很多工具,但我建议使用 Navicat GUI 来执行此操作。根据我的经验,它可以在 8GB RAM 的主机上在 6 小时内运行 48GB *.sql 文件。

这里的解释(有点): 在此处输入图像描述 二次点击选择的数据库,选择“执行SQL文件”,选择文件,如果你想选择“错误继续”,最后运行它。我知道它显示了一个 MySQL DB,但适用于大多数使用/流行的 DBMS。

我真的不建议在他们的 sql 查询生成器中“打开”这样比例的文件,它会阻塞机器,因为 RAM 会一次又一次地满负荷运行。

这也适用于 Macintosh OS 作为 Navicat 应用程序的主机,一旦你连接到给定的 DB 服务器,你就可以在任何你想要的地方运行它,直到现在在 RHEL、Ubuntu 服务器、Debian 和 Windows 服务器上运行良好。

于 2015-07-02T18:13:29.600 回答
1

为此,请在 MySQL 中使用 BULK Import。

于 2010-05-11T15:11:45.673 回答
0

仅请求表定义和 .csv 中的数据。然后进行批量导入。

于 2010-05-11T16:51:43.637 回答