一,背景介紹:
此腳本產生的原因,由於公司不讓開發人員自己修改數據庫,因此開發需要將修改的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這部分,後一部分需要根據自己的需求來改。