Shell 数据库迁移实现
2014-04-05 01:49
162 查看
SQL数据Dump 可以使用 mysql 命令 或者 mysqldump命令进行源数据数据的导出
1 36586 QunarOTA PPMTransform
配置Mapping文件 order_day_stat.mapping , 这个文件时用于目标源 和 源数据 表数据的关系映射
配置config.properties 文件 ,配置数据库的连接信息等
Shell 脚本进行数据解析,和SQl 插入
sqlCreator.sh 生成执行需要的Sql ,存放在tmp.sql 临时文件中
sqlexcutor.sh 执行Sql 脚本
do.sh 执行脚本
mysql -e "select * from trade_info" -u cs_beta -pqabeta settle_tradeflow -h l-hscdb1.h.beta.cn6.qunar.com >order_day_stat.sqldump的数据格式如下
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
相关文章推荐
- 数据库(三)为Python shell添加新的功能和使用Flask-Migrate实现数据库迁移
- Kettle实现数据库迁移
- CentOS中使用Shell脚本实现每天自动备份网站文件和数据库并上传到FTP中
- 用kettle实现数据库迁移之oracle到mysql
- 高性能java实现不同服务器直接的数据库迁移。
- web服务文件更新自动同步、数据库主从复制、shell脚本实现网站代码备份和mysql备份
- 针对数据量较大的表,需要进行跨库复制,采用navcat 实现sqlite数据库跨数据库的数据表迁移 [转载]
- Laravel实现数据库迁移与支持中文的填充
- shell 实现文本导入oracle 数据库
- python实现数据库迁移脚本
- 使用imp/impdb和管道实现数据库的快速迁移
- Windows服务实现不同平台数据库表的迁移
- kettle实现数据库迁移----多表复制向导
- 数据库迁移--java实现
- kettle7.0下实现数据库整体迁移
- shell+html+div+css实现数据库冷备文件检查
- python实现数据库跨服务器迁移
- 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
- 数据库相关:实现不同数据库之间的迁移
- 迁移Simple-TODO Nodejs实现版至CouchDB数据库