欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

解决大批量数据插入mysql问题:使用mysqlimport工具从文件中导入

程序员文章站 2022-06-15 15:01:31
...

    在我们日常项目中,经常会涉及对mysql数据库的读写操作,当需要大批量导入数据时,使用传统的insert方式,会使效率非常慢,解决的办法有:1、拼接sql  2、使用存储过程  3、使用工具从文件中导入。在这里我们要介绍的是使用mysqlimport工具导入。一般来说,在我们安装完成mysql后,该工具已经安装好了,直接使用即可。

    首先来了解下mysqlimport工具的基本配置项,打开终端,输入mysqlimport --help,即可看到对应的选项含义,现在我们只提取几个重要的来做说明:
    

-h mysql户主机IP, 例如 -h 127.0.0.1
-u mysql登录用户名 ,例如 -u username
-p mysql用户名对应登录密码(-p与密码之间不能有空格),例如 -ppassword
-L 代表取本地主机的所有文件
--fields-terminated-by 待导入文件中字段数据的分隔符

 

 

 

 

 

 

了解了以上基本配置项,我们来做实践一下:把dat_acct_item_919_201901.csv文件中的数据导入到数据库为LMS,表名为dat_acct_item_919_201901的表中,需要注意的一点是:文件名=表名,否则无法导入。

dat_acct_item_919_201901.csv文件中数据格式如下,数据以","分隔,

解决大批量数据插入mysql问题:使用mysqlimport工具从文件中导入

所以导入命令如下为:mysqlimport -h 127.0.0.1 -u root -proot -L LMS /home/delphi/myshare/dat_acct_item_919_201901.csv --fields-terminated-by=","

数据库名LMS 后边 跟的是导入文件的绝对路径,可以把命令封账到脚本里,脚本名为test.sh,脚本里统计的导入时间如下:

starttime=`date +'%Y-%m-%d %H:%M:%S'`
mysqlimport -h 127.0.0.1 -u root -proot -L LMS /home/delphi/myshare/dat_acct_item_919_201901.csv --fields-terminated-by=",";
endtime=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);
echo "本次运行时间: "$((end_seconds-start_seconds))"s"

现在直接运行test.sh脚本,可以看到25452条数据,1S就可以全部倒完:
解决大批量数据插入mysql问题:使用mysqlimport工具从文件中导入

解决大批量数据插入mysql问题:使用mysqlimport工具从文件中导入