由于近来需要从其它机器拉一堆数据到一台机器上做数据分析,由于涉及到数据库比较,数据也不大不小的,要手工一个一倒腾真是累的半死,于是弄了个脚本
实现功能,根据指定文件下的数据库文件命令格式,
str=1234_`date +%y%m%d%H%M`.gz
echo "开始备份..."`date`
mysqldump -uroot -pxxxxxx--quick --add-drop-table --extended-insert qeedoo | gzip > $str
echo "开始备份..."`date`
mysqldump -uroot -pxxxxxx--quick --add-drop-table --extended-insert qeedoo | gzip > $str
echo "备份完毕..."`date`
这是相关的数据库备份脚本由于名称的有一个特点即_`date +%y%m%d%H%M`.gz从_开始后面的都相同,前面的话有纯数字的组成也有字母跟数字,数字与字母。
因为涉及到mysql的问题,即mysql不能以纯数字的命令一个数据库,所以操作步骤如下:
一、提取相关数据库备份文件的名称
二、以纯数字为前缀的给他加上后缀com
二、创建数据库导入数据
由于以前手工导过数据,但这些数据都没有用了,所以现在需要先批量drop相关库
for i in `cat mysqldata`
do
mysql -u root <<QUERY_SQL
DROP DATABASE IF EXISTS $i;
QUIT
QUERY_SQL
done
do
mysql -u root <<QUERY_SQL
DROP DATABASE IF EXISTS $i;
QUIT
QUERY_SQL
done
从mysqldata文件里取到相关数据库的名,如果存在删掉,记得如果需要保留的数据库需要拿掉不在放在mysqldata文件里,这里面的数据库是show databases 出来的
好了进入正题。
echo "type your data path!"
read path
for sqldata in `ls $path`
read path
for sqldata in `ls $path`
gunzip $sqldata
do
str=`echo ${sqldata%_*}` #取_之前的字符串
do
str=`echo ${sqldata%_*}` #取_之前的字符串
name=`echo ${sqldata%.*}` #把.gz后缀去掉
echo $str #打印正在处理的数据库
expr $str + 0 1>/dev/null 2>1 #用_之前的字符串进行expr运算
if [ $? -eq 0 ];then #通过判断返回值确认_之前的字符串是否为纯数字
str1=${str}com #为数字时添加后缀com
else
str1=${str}
fi
echo $str #打印正在处理的数据库
expr $str + 0 1>/dev/null 2>1 #用_之前的字符串进行expr运算
if [ $? -eq 0 ];then #通过判断返回值确认_之前的字符串是否为纯数字
str1=${str}com #为数字时添加后缀com
else
str1=${str}
fi
#进入mysql处理
mysql -u root <<QUERY_SQL
#如果有密码可以用mysql -uroot -pxxxx <<QUERY_SQL
DROP DATABASE IF EXISTS $str1;
create database $str1;
use $str1;
source $path/$name;
QUIT
QUERY_SQL
#echo $$ #打印出正在运行的进程号如果不小心进入了死循环直接kill -9 该进程号就可以了当然也可以用ps -ef过滤出来看
done
create database $str1;
use $str1;
source $path/$name;
QUIT
QUERY_SQL
#echo $$ #打印出正在运行的进程号如果不小心进入了死循环直接kill -9 该进程号就可以了当然也可以用ps -ef过滤出来看
done
记得由于是直接处理字符串的,在进入的path目录里只允许有相关的数据库文件,因为如你在该目录下建了a b之类的该脚本也会例行处理
本文转自 qwjhq 51CTO博客,原文链接:http://blog.51cto.com/bingdian/187613