开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

用expect批量修改数据库

简介:
+关注继续查看

一,背景介绍:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/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 in `ls conf`;do
        for 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这部分,后一部分需要根据自己的需求来改。










本文转自 deng304749970 51CTO博客,原文链接:http://blog.51cto.com/damondeng/1388940,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【TP5项目统一规范】修改数据
【TP5项目统一规范】修改数据
23 0
ArcGIS的批量操作值提取至点并批量导出到excel数据操作
ArcGIS的批量操作值提取至点并批量导出到excel数据操作
149 0
ES批量删除指定id数据
ES批量删除指定id数据
538 0
MySQL修改数据类型的问题总结
昨天快下班的时候,突然开发的同事找我说有个紧急需求,负责这个业务的DBA同事回家了,想让我帮忙看看,运行个SQL语句,几秒钟就好。我一听,就本着人道主义的精神留下来处理,但是发现似乎留给我的是一个大坑。
914 0
C#:几种数据库的大数据批量插入
在之前只知道SqlServer支持数据批量插入,殊不知道Oracle、SQLite和MySql也是支持的,不过Oracle需要使用Orace.DataAccess驱动,今天就贴出几种数据库的批量插入解决方法。
939 0
mssql数据库游标批量修改符合条件的记录
//需求:由于项目刚上传,没有票数,为了表现出一定的人气,需要在一开始把各项目的票数赋一个值 , 但每个项目不能一样,否则容易看出问题,呵呵 。 DECLARE @Id varchar(50) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT Id FROM dbo.
849 0
+关注
20377
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载