mysql大数据表导入导出

时间:2021-06-11 14:33:19

客户那一台流量分析设备需要给更换成新设备,但要求保留之前的流量分析数据,查看了一下流量分析表情况,发现有几张分钟粒度的数据表数据量达到几亿条以上,数据库使用的是mysql,使用mysql 的导入导出工具mysqldump是没希望了,只能把几个大数据量的表挑出来单独处理,小数据量的表就用mysqldump搞定。

以fig_app_flow_1表为例,导出脚本如下

export_fig_app_flow_1.sh

#!/bin/sh

if [ "$#" -ne "1" ]

then

echo "please input outfile......"

exit

fi

export sqlstr="SELECT concat(CONCAT_WS('||::||',IFNULL(link_id,''),IFNULL(app_id,''),IFNULL(in_byte,''),IFNULL(out_byte, ''),IFNULL(in_pkt, ''),IFNULL(out_pkt, ''),IFNULL(in_bps, ''),IFNULL(out_bps, ''),IFNULL(capture_time, ''),'|#|#|#')) FROM fig_app_flow_1;"

echo -e `date "+%Y-%m-%d %H:%M:%S"` " begin exporting table fig_app_flow_1......"

mysql -uforceview -pforceview -D forceview -s -q -e "$sqlstr">$1

echo -e `date "+%Y-%m-%d %H:%M:%S"` " end exporting table fig_app_flow_1......"

数据导出到一个文件中,scp到新设备上,随后是导入脚本

load_fig_app_flow_1.sh

#!/bin/sh

if [ "$#" -ne "1" ]

then

echo "please input infile......"

exit

fi

export sqlinput="load data local infile '$1' into table fig_app_flow_1 FIELDS TERMINATED BY '||::||'  LINES TERMINATED BY '|#|#|#';";

echo -e `date "+%Y-%m-%d %H:%M:%S"` " begin loading table fig_app_flow_1......"


mysql -uforceview -pforceview -D forceview -s -q -e "$sqlinput"

echo -e `date "+%Y-%m-%d %H:%M:%S"` " end loading table fig_app_flow_1......"


导入导出耗时都在两三分钟左右,类似方法一个一个操作,十几个大数据表数据移植成功!