小编Men*_*Of2的帖子

优化MySQL以并行导入海量数据文件。每表1个连接

我正在为大型网站迁移做一些准备工作。

该数据库的大小约为10GB,几个表包含超过1500万条记录。不幸的是,由于我的职权范围之外的客户关系,它仅以SQL格式出现在一个大的mysqldump文件中,但是您知道如何进行。我的目标是最大程度地减少停机时间,从而尽快导入数据。

我试图像这样使用标准的MySQL CLI接口:

$mysql database_name < superhuge_sql_file -u username -p
Run Code Online (Sandbox Code Playgroud)

但是,这非常慢。

为了加快处理速度,我使用awk将文件与相关数据一起拆分为每个表的块,并构建了一个小shell脚本来尝试并行导入表,如下所示:

#!/bin/sh

awk '/DROP TABLE/{f=0 ;n++; print >(file="out_" n); close("out_" n-1)} f{ print > file}; /DROP TABLE/{f=1}'  superhuge.sql

for (( i = 1; i <= 95; i++ )) 
do
    mysql -u admin --password=thepassword database_name < /path/to/out_$i &
done
Run Code Online (Sandbox Code Playgroud)

值得一提的是,这是一个“使用一次并销毁”脚本(脚本中的密码等)。

现在,这可以正常工作,但在四核服务器上目前尚需3个多小时才能完成。这些表确实是并行导入的,但不是一次全部导入,在此过程中尝试通过CLI获取MySQL服务器信息非常缓慢。我不知道为什么,但是在此过程中尝试使用相同的mysql用户帐户访问表时挂起。max_user_connections是无限的。

我已在my.cnf中将最大连接数设置为500,但未在此服务器上配置MySQL。

我四处寻找,但是想知道是否有任何MySQL配置选项可以帮助加快此过程,或者我错过的任何其他方法都可以更快地完成。

mysql parallel-processing import

6
推荐指数
2
解决办法
4669
查看次数

标签 统计

import ×1

mysql ×1

parallel-processing ×1