用expect批量修改数据库

时间:2021-10-13 07:46:39

一,背景介绍:

    此脚本产生的原因,由于公司不让开发人员自己修改数据库,因此开发需要将修改的sql语句发给运维,而公司数据库很多,平台有三个,测试平台,预发布平台,正式平台。脚本就是这种状态下产生的。

#!/bin/bash
###install expect###
if ! rpm -qa |grep expect &>/dev/null;then
sudo yum -y install expect
fi
####put sql file to server################
put_file() {
expect << EOF
spawn scp alter.sql $user@$host:/tmp
expect {
"*yes/no*" {send "yes\n"; exp_continue}
"*password:" {send "$passwd\n";exp_continue}
eof {
exit
}
}
EOF
}
#########alter database###############
alter() {
expect << EOF
spawn ssh $user@$host "/usr/local/mysql/bin/mysql -uroot -p$mysqlpw $db < /tmp/alter.sql"
expect {
"*yes/no*" {send "yes\n"; exp_continue}
"*password:" {send "$passwd\n";exp_continue}
eof {
exit
}
}
EOF
}
########### $1 platform,$2 database#####
svn co http://svn.yeezhao.com/svn/project/active-mkt/operation/conf/
for c in `ls conf`;do
for i in `ls conf/$c |sed -n "/$1\.cfg$/p"`;do
host=`grep mysql conf/$c/$i |grep $2 |awk -F / '{print $3}'|awk -F : '{print $1}'`
#echo $host
if [ ! $host = "" ];then
if [ $host = $(cat host.txt |grep $host |awk '{print $1}') ];then
user=`cat host.txt|grep $host|awk '{print $2}'`
passwd=`cat host.txt|grep $host|awk '{print $3}'`
mysqlpw=`cat host.txt|grep $host|awk '{print $4}'`
db=$2
put_file
alter
fi
fi
done
done

二,脚本注释:

1,host.txt文件格式:第一列需要连接主机,第二列用户名,第三列密码,第四列mysql的root密码,mysql  root用户只能在本地登录。

192.168.1.122    summba    summba  summba

d02.yeezhao.com    summba  123456 123456

d04.yeezhao.com    summba  123456 123456

2,脚本中的host需要先从svn中的config中获取,程序连接数据库都去zk中获取用户名与密码。

3,脚本运行:

sh run.sh -d db_yeezhao_owl

4,各位主要需要学习expect这部分,后一部分需要根据自己的需求来改。


本文出自 “damon” 博客,请务必保留此出处http://damondeng.blog.51cto.com/1038075/1388940