有个测试需要向mysql中批量导入大量数据, 首先想到的是source和loaddata,使用脚本配合,但是导入时因为数据比较大的缘故或是其他原因,导致source失败。
后来找到了一个简单方法,一句搞定。
已经知道要导入的文件,ll如下。如图所示多个库多个文件。
-rw-r--r-- 1 root root 13158906 4月 25 15:37 database.table_s2_tmp.sql
-rw-r--r-- 1 root root 2873 4月 25 15:37 database.table_s3.sql
-rw-r--r-- 1 root root 228317198 4月 25 15:38 database.table_s3_tmp_30.sql
-rw-r--r-- 1 root root 67877941 4月 25 15:38 database.table_s3_tmp_7.sql
-rw-r--r-- 1 root root 117999480 4月 25 15:38 database.table_s3_tmp.sql
-rw-r--r-- 1 root root 181120296 4月 25 15:38 database1.table_s4.sql
-rw-r--r-- 1 root root 181121016 4月 25 15:39 database1.table_s4_tmp.sql
-rw-r--r-- 1 root root 2869 4月 25 15:39 database1.table_sa.sql
-rw-r--r-- 1 root root 385396393 4月 25 15:40 database2.table_sa_tmp_30.sql
-rw-r--r-- 1 root root 119759525 4月 25 15:41 database2.table_sa_tmp_7.sql
-rw-r--r-- 1 root root 171142847 4月 25 15:40 database2.table_sa_tmp.sql
获取要导入的文件名,存入一个文件 ll |awk '{print $NF}' >tb.txt.
shell脚本如下
#!/bin/bash
path=/home/mengniu/tb.txt #导入文件列表
user=root
password=root
port=3306
host=127.0.0.1
cat $path |while read line
do
dbname=`echo $line|awk '{print $NF}' |awk -F. '{print $1}'` #获取dbname
echo $dbname
echo $line #导入的文件名
mysql -h$host -u$user -p$password -P$port -D$dbname < /home/root/xxx/$line
done