客户那一台流量分析设备需要给更换成新设备,但要求保留之前的流量分析数据,查看了一下流量分析表情况,发现有几张分钟粒度的数据表数据量达到几亿条以上,数据库使用的是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......"
导入导出耗时都在两三分钟左右,类似方法一个一个操作,十几个大数据表数据移植成功!