Shell 數據庫遷移實現

  • SQL數據Dump 可以使用 mysql 命令 或者 mysqldump命令進行源數據數據的導出
mysql -e "select * from trade_info" -u cs_beta -pqabeta settle_tradeflow -h l-hscdb1.h.beta.cn6.qunar.com >order_day_stat.sql
dump的數據格式如下
1  36586  QunarOTA  PPMTransform
  • 配置Mapping文件 order_day_stat.mapping  , 這個文件時用於目標源 和 源數據 表數據的關係映射
supplier_id=2
his_day=3
order_count=4
order_fee_sum=5
currency_type=6

配置config.properties 文件  ,配置數據庫的連接信息等
db_host=***.h.beta.cn6.qunar.com
db_port=3306
db_name=settle_tradeflow
db_username=cs_beta
db_password=qabeta
sql_file=tmp.sql


  • Shell 腳本進行數據解析,和SQl 插入
sqlCreator.sh 生成執行需要的Sql ,存放在tmp.sql 臨時文件中
#!/bin/bash
####################################################
#配置文件定義
DIR=`pwd`
CONFIG_FILE=$DIR"/config.properties"

####################################################
#輸入文件
input_file=$2
#映射配置
mapping=$1
#table_name
table_name=`echo $input_file | awk -F '.' '{print $1}'`

input_file=$DIR"/"$input_file
mapping=$DIR"/"$mapping
#Sql存儲位置
sql_file=`sudo cat $CONFIG_FILE | grep "sql_file" | awk -F '=' '{print $2}'`
sql_file=$DIR"/"$sql_file
####################################################

#######構造插入語句################################
#table 名字
insert_sql="insert into $table_name"
#構建Sql的name值
insert_name="("
for line in `cat $mapping`
do
	temp_name=`echo $line | awk -F '=' '{print $1}'`
	insert_name=$insert_name$temp_name","
done

last_index=`expr length $insert_name - 1` 
insert_name=`expr substr $insert_name 1 $last_index`
insert_sql=$insert_sql$insert_name') values '

values_str=''
while read line
do
	values_str=$values_str"("
	OLD_IFS="$IFS" 
	IFS="," 
	arr=($line)
	IFS="$OLD_IFS"
	len=${#arr[@]} 
	for ((i=0;i<len;++i));do		
		value=${arr[$i]}
		values_str=$values_str"'"$value"',"
	done
	last_index=`expr length "$values_str" - 1`
	values_str=`expr substr "$values_str" 1 $last_index`
	#values_str=$values_str"),"
	values_str=$values_str")"
	#將生成好的Sql寫入到文件中
	echo $insert_sql$values_str";" >> $sql_file
	values_str=''
done<$input_file
last_index=`expr length "$values_str" - 1`
values_str=`expr substr "$values_str" 1 $last_index`

#最終組裝好的執行Sql
#insert_sql=$insert_sql$values_str";"
#echo $insert_sql


sqlexcutor.sh 執行Sql 腳本
#!/bin/bash
####################################################
#配置文件定義
DIR=`pwd`
CONFIG_FILE=$DIR"/config.properties"

#####################################################
#數據庫配置信息
#數據庫地址
db_host=`sudo cat $CONFIG_FILE | grep "db_host" | awk -F '=' '{print $2}'`
#數據庫
db_name=`sudo cat $CONFIG_FILE | grep "db_name" | awk -F '=' '{print $2}'`
#端口號
db_port=`sudo cat $CONFIG_FILE | grep "db_port" | awk -F '=' '{print $2}'`
#用戶名
db_username=`sudo cat $CONFIG_FILE | grep "db_username" | awk -F '=' '{print $2}'`
#密碼
db_password=`sudo cat $CONFIG_FILE | grep "db_password" | awk -F '=' '{print $2}'`

####################################################
#sql文件
sql_file=`sudo cat $CONFIG_FILE | grep "sql_file" | awk -F '=' '{print $2}'`
sql_file=$DIR"/"$sql_file

len=`cat $sql_file | wc -l`
sql=`cat $sql_file`
mysql -s -u$db_username -p$db_password $db_name -h $db_host -P $db_port -e "$sql"

#for((i=0;i<len;++i))
#do
#	echo `cat $sql_file | sed -n "${i}p"`
#	mysql -s -u$db_username -p$db_password $db_name -h $db_host -P $db_port -e "$sql"
#done


do.sh 執行腳本

#/bin/bash
dir=`pwd`
for line in `ls | grep '.mapping'`
do
	table_name=`echo $line | awk -F '.' '{print $1}'`
	data_file=$table_name".sql"
	# 執行生成Sql語句
	`$dir/sqlcreator.sh "$line" "$data_file"`
	# 執行Sql語句
	`$dir/sqlexcutor.sh`
	#刪除Sql
#	`sudo rm $dir/tmp.sql`
done


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章