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