Shell脚本导出导入MySQL建表语句

一、导出sql语句

1、需求:

1.1、根据数据库表名,把不同的数据库建表语句导入不同的文件夹中,
1.2、每个表的建表语句生成单个文件

2、shell脚本如下:

#!/bin/bash
### 数据库连接,用户名:root, 密码:root
dbcn='mysql -uroot -proot';  

#### 数据库名
db=stp_product_service;  

### 获取数据库中表个数
ct=`$dbcn -N -e " SELECT COUNT(1)  FROM information_schema.TABLES AS t WHERE t.TABLE_SCHEMA = '$db' AND t.TABLE_TYPE = 'BASE TABLE' ; "`;  
echo '数据库表总数量:'$ct;
## shell 文件所在目录
workdir=$(cd $(dirname $0); pwd);

## 创建建表语句存放文件夹
sqldir=$workdir/createTable;
mkdir -p $sqldir;
mkdir -p $sqldir/Bond;
mkdir -p $sqldir/Fx;
mkdir -p $sqldir/Irs;
mkdir -p $sqldir/Sirp;
mkdir -p $sqldir/BcidTradePlatform;
mkdir -p $sqldir/BCIDMember;
mkdir -p $sqldir/Ccmm;

# 遍历数据库中的所有表
ii=0; 
while [ $ii -lt $ct ];
do  
	p=$ii;  
	let ii++;  
	echo '----------------第'$ii'张表------------------';
	
	## 获取表名
	table_name=`$dbcn -N -e " SELECT t.TABLE_NAME FROM information_schema.TABLES AS t  where  t.TABLE_SCHEMA = '$db' AND t.TABLE_TYPE = 'BASE TABLE' limit $p,1;"`;  
	echo '表名:'$table_name;

	## 获取建表语句
	table_ddl=`$dbcn $db -N -e "SHOW CREATE TABLE  $table_name ;"`;
	echo '建表语句:'${table_ddl#*${table_name}};
	
	## 根据表名,把建表语句放入指定文件中
	if [[ $table_name == bond* ]]; then
		echo -e ${table_ddl#*${table_name}} > $sqldir/Bond/${table_name}_DDL.sql ;
	elif [[ $table_name == fx* ]]; then
		echo -e ${table_ddl#*${table_name}} > $sqldir/Fx/${table_name}_DDL.sql ;
	elif [[ $table_name == irs* ]]; then
		echo -e ${table_ddl#*${table_name}} > $sqldir/Irs/${table_name}_DDL.sql ;
	elif [[ $table_name == sirp* ]]; then
		echo -e ${table_ddl#*${table_name}} > $sqldir/Sirp/${table_name}_DDL.sql ;
	elif [[ $table_name == bcid_trdpl* ]]; then
		echo -e ${table_ddl#*${table_name}} > $sqldir/BcidTradePlatform/${table_name}_DDL.sql ;
	elif [[ $table_name == bcid* ]]; then
		echo -e ${table_ddl#*${table_name}} > $sqldir/BCIDMember/${table_name}_DDL.sql ;
	else
		echo -e ${table_ddl#*${table_name}} > $sqldir/Ccmm/${table_name}_DDL.sql ;
	fi
	echo '--------------------------------------------------------------------------------------------';
done 

echo '数据库建表语句导出完毕!';

二、导入sql语句

1、需求

根据前面导出的建表语句,导入新的数据库中

2、shell实现1

把所有建表语句全部写入同一个临时文件中,一次性执行完毕,文件开头关闭外键约束检查,文件结尾开启外键约束检查
因为是临时外键约束,所以每次执行都要关闭或检查,否则每次执行前,临时外键约束都会重置为全局外键约束

#!/bin/bash
### 数据库连接,用户名:root, 密码:root
dbcn='mysql -uroot -proot';  

#### 数据库名 ###############################
db=stp_test;

mysql_source(){  
	for file_name in `ls -A $1`  
	do  
		if [ -f $1$file_name ];then  
		    
			# 建表语句追加到临时文件中
			cat $1$file_name >> $2;
			echo -e ";" >> $2;
			echo a=$1$file_name;
		fi  
	done  
}  

## shell文件所在目录
workdir=$(cd $(dirname $0); pwd);
## sql建表文件根目录 ###########################
sqldir=$workdir/createTable

## 临时文件
tempfile=$sqldir/temp.sql;

## 建表语句所在的文件夹
bonddir=$sqldir/Bond/;
fxdir=$sqldir/Fx/;
irsdir=$sqldir/Irs/;
sirpdir=$sqldir/Sirp/;
bcidTrdplDir=$sqldir/BcidTradePlatform/;
bcidDir=$sqldir/BCIDMember/;
ccmmdir=$sqldir/Ccmm/;

## 导入语句前关闭外键约束
echo -e "SET FOREIGN_KEY_CHECKS=0;" > $tempfile;

## 把所有的建表语句导入到临时文件中
mysql_source $bonddir $tempfile;
mysql_source $fxdir $tempfile;
mysql_source $irsdir $tempfile;
mysql_source $sirpdir $tempfile;
mysql_source $bcidTrdplDir $tempfile;
mysql_source $bcidDir $tempfile;
mysql_source $ccmmdir $tempfile;

## 导入语句后开启外键约束
echo -e "SET FOREIGN_KEY_CHECKS=1;" >> $tempfile;

## 执行临时文件中的建表语句
$dbcn $db -N -e "source $tempfile" ;

## 删除临时文件
rm $tempfile;

echo 'success';


3、shell实现2

利用全局外键约束,不必把所有的建表语句放入同一个文件中执行,但是最后不要忘记开启

#!/bin/bash
### 数据库连接,用户名:root, 密码:root
dbcn='mysql -uroot -proot';  

#### 数据库名
db=stp_test;

mysql_source(){  
	for file_name in `ls -A $1`  
	do  
		if [ -f $1$file_name ];then  
			echo a=$1$file_name;
			$dbcn $db -N -e "source $1$file_name" ;
		fi  
	done  
}  

## shell文件所在目录
workdir=$(cd $(dirname $0); pwd);
sqldir=$workdir/createTable

## 建表语句所在的文件夹
bonddir=$sqldir/Bond/;
fxdir=$sqldir/Fx/;
irsdir=$sqldir/Irs/;
sirpdir=$sqldir/Sirp/;
bcidTrdplDir=$sqldir/BcidTradePlatform/;
bcidDir=$sqldir/BCIDMember/;
ccmmdir=$sqldir/Ccmm/;

## 导入语句前关闭外键约束检查(全局变量)
$dbcn $db -N -e "SET GLOBAL FOREIGN_KEY_CHECKS=0;";

mysql_source $bonddir;
mysql_source $fxdir;
mysql_source $irsdir;
mysql_source $sirpdir;
mysql_source $bcidTrdplDir;
mysql_source $bcidDir;
mysql_source $ccmmdir;

## 导出语句前开启外键约束检查(全局变量)
$dbcn $db -N -e "SET GLOBAL FOREIGN_KEY_CHECKS=1;";

echo 'import success';

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值