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