用expect批量修改数据库

一,背景介绍:

    此脚本产生的原因,由于公司不让开发人员自己修改数据库,因此开发需要将修改的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这部分,后一部分需要根据自己的需求来改。


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

用expect批量修改数据库,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。