用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這部分,後一部分需要根據自己的需求來改。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章