2

我正在尝试创建一个 Wikipedia DB 副本(大约 50GB),但是最大的 SQL 文件有问题。

我使用 linux split 实用程序将大小为 GB 的文件拆分为 300 MB 的块。例如

split -d -l 50 ../enwiki-20070908-page page.input.

在我的服务器上,平均 300MB 文件需要 3 个小时。我有 ubuntu 12.04 服务器操作系统和 Mysql 5.5 服务器。

我正在尝试如下:

mysql -u username -ppassword database < category.sql

注意:这些文件由插入语句组成,它们不是 CSV 文件。

Wikipedia 提供数据库转储供下载,因此每个人都可以创建 Wikipedia 的副本。您可以在此处找到示例文件: Wikipedia Dumps

我认为由于我的 MySQL 服务器的设置,导入速度很慢,但我不知道应该更改什么。我在具有不错处理器和 2GB RAM 的机器上使用标准的 Ubuntu MySQL 配置。有人可以帮助我为我的系统配置合适的配置吗?

我尝试将 innodb_buffer_pool_size 设置为 1GB,但没有白费。

4

2 回答 2

3

由于您的内存少于 50GB(因此您无法在内存中缓冲整个数据库),因此瓶颈是磁盘子系统的写入速度。

加快导入的技巧:

  • MyISAM 不是事务性的,在单线程插入中要快得多。尝试加载到 MyISAM 中,然后ALTER将表加载到INNODB
    • 用于ALTER TABLE .. DISABLE KEYS避免逐行更新索引(仅限 MyISAM)
    • 设置bulk_insert_buffer_size在您的插入尺寸之上(仅限 MyISAM)
    • 设置unique_checks = 0为不检查唯一约束。

有关更多信息,请参阅MySQL 手册中的 InnoDB 表的批量数据加载

注意:如果原始表有外键约束,使用 MyISAM 作为中间格式是个坏主意。

于 2013-09-23T14:09:54.373 回答
1

如果您的数据库不是面向事务的,请使用 MyISAM,通常比 InnoDB 快得多。您是否研究过使用任何表分区/分片技术?

将巨大的 MyISAM 转换为 InnoDB 将再次遇到性能问题,所以我不确定我是否会这样做。但是禁用和重新启用密钥可能会有所帮助......

于 2013-09-24T00:25:32.317 回答