# !/bin/bash
############中文说明######################
#本程序的一些提示需要中文支持,如系统没有安装中文包,请先安装:yum -y groupinstall chinese-support
############使用说明######################
#.运行本程序之前,有几个注意事项,数据库的表需要实现创建好,字段要和源文件的字段一一对应
#.本程序需要一些参数,示例:./script.sh /tmp/test.txt table_name ,
#.上述示例中:script.sh是程序文件名,/tmp/test.txt是源文件,table_name是数据库的表名,","是源文件中的字段分隔符
#.此程序算是version_1.0版本,功能较简单,如果有下版本,将加入源文件的切割功能,正在测试文件切割的性能
#.此外,还需要一些参数需要在程序中指定,比如mysql的账户和密码,还有具体数据库实例
##########################################
MysqlUser=root #指定mysql的账户
MysqlPass= #指定mysql的密码
sourcefile=$
targetfile=$
db=mytest #指定数据库实例
if [ -z "$3" ];then
delimit=","
else
delimit=$
fi
MysqlCmd="mysql -u$MysqlUser -p$MysqlPass $db"
#LoaddataCmd="LOAD DATA LOW_PRIORITY LOCAL INFILE '$sourcefile' IGNORE INTO TABLE $targetfile CHARACTER SET utf8 FIELDS TERMINATED BY '$delimit';"
[ -z "$sourcefile" ]&&{
echo '没有指定源文件...'
exit
}
[ -z "$targetfile" ]&&{
echo '没有指定数据库的表...'
exit
}
if [ ! -f "$sourcefile" ]; then
echo "源文件不存在,请检查!程序结束..."
sleep
exit
fi
echo -n "运行此程序前,请确认源文件为[${sourcefile}],目标数据库表为[${targetfile}],分隔符为[${delimit}](未指定则默认为\",\"): "
read -n -p "(y/n)? " anw
if [ "$anw" = y ];then
echo ""
echo "程序继续,正在处理,请等待..."
elif [ "$anw" = n ];then
echo ""
echo "程序已结束..."
exit
else
echo ""
echo "选择错误,程序将结束,请重新运行程序,并输入(y/n)"
exit
fi
echo "正在统计文件大小!请等待..."
sleep ;
echo "..."
{
file_size=`du -sh $sourcefile |awk '{print$1}'`
}&&{
echo "[${sourcefile}]文件大小为:$file_size"
}
sleep ;
echo "..."
echo "正在导入..."
seconds_1=$(date +%s)
$MysqlCmd -e "LOAD DATA LOW_PRIORITY LOCAL INFILE '$sourcefile' IGNORE INTO TABLE $targetfile CHARACTER SET utf8 FIELDS TERMINATED BY '$delimit';"
seconds_2=$(date +%s)
if [ $? -eq ]; then
echo "导入完成!"
echo "耗时: `expr $seconds_2 - $seconds_1`秒"
exit
else
echo "导入未完成,请检查错误!"
exit
fi
