Shell +Cygwinterminal+WinMySQL 传参数授权
前言:新公司因为部分业务原因有好几百组win机器装MySQL授权登录比较麻烦,简单的写了一个shell传值自动授权的脚本,保存复用。
#!/bin/bash
#author liding@zlhy.com function helpfunc(){
echo -e "\033[36m Please check your parameters, -D for db name, -M main library IP, -I for authorized IP address
options:
-D Need to authorize the db name
-M Execute on this IP
-I Authorized IP
-T Authorization type 1 is the program account, 2 read-only account, 3 administrator account ; you can specify multiple to ',' separation
eg : mysqlha_winreplication.sh -D -M -I -T
Generate 3 accounts:
1st: program link account. permissions: SELECT, INSERT, UPDATE, DELETE, EXECUTE, no DROP, CREATE;
2nd: read-only account. permissions: Select
3rd: administrator account. permissions: ALL \033[0m" }
############################################
type=2 if [ $# -lt 1 ] ;
then
helpfunc
exit 1
else while getopts "M:D:I:T:" Option
do
case $Option in
D) db=$OPTARG;;
M) master_ip=$OPTARG;;
I) grant_ip=$OPTARG;;
T) type=$OPTARG;;
*) helpfunc; exit 1; ;;
esac
done fi type=$(echo $type |tr ',' ' ')
function GetPwd(){
status=$1
if [ $status -eq 0 ];then
A=`head -c 500 /dev/urandom | tr -dc A-Z |head -c 1`
B=`head -c 500 /dev/urandom | tr -dc [:alnum:]| head -c 6`
C=`echo $RANDOM$RANDOM|cut -c 2`
echo $A$B$C
else
A=`head -c 500 /dev/urandom | tr -dc A-Z |head -c 1`
B=`head -c 500 /dev/urandom | tr -dc [:alnum:]| head -c 12`
C=`echo $RANDOM$RANDOM|cut -c 2`
echo $A$B$C
fi
} # echo -e "\033[42;37m \033[0m"
function GetProgram(){
pro_pwd=$(GetPwd 0)
#ssh administrator@${master_ip} "cd /cygdrive/d/data/mysqld_master && cmd /c sql.bat \"$sql\"
##读写
pro_sql="GRANT SELECT,INSERT,UPDATE,DELETE,EXECUTE ON ${db}.* TO ${db}@'"localhost"' IDENTIFIED BY '"$pro_pwd"'; "
pro_sql1="GRANT SELECT,INSERT,UPDATE,DELETE,EXECUTE ON ${db}.* TO ${db}@'"${grant_ip}"' IDENTIFIED BY '"$pro_pwd"'; "
for sql in "$pro_sql" "$pro_sql1"
do
if ssh administrator@${master_ip} "cd /cygdrive/d/data/mysqld_master && cmd /c sql.bat \"$sql\" ";then
:
else
echo -e "\033[31m To grant authorization{IP:${master_ip} 权限:读写 } faild \033[0m"
fi
done
echo -e "\033[32m To grant authorization{IP:${master_ip} 权限:读写 } sucess \033[0m"
echo -e "\033[32m 读写账户:${db} \033[0m"
echo -e "\033[32m 读写密码:${pro_pwd} \033[0m"
} function GetSelect(){
select_pwd=$(GetPwd 1)
##只读
select_sql="GRANT SELECT ON ${db}.* TO ${db}_r@'"localhost"' IDENTIFIED BY '"$select_pwd"';"
select_sql1="GRANT SELECT ON ${db}.* TO ${db}_r@'"${grant_ip}"' IDENTIFIED BY '"$select_pwd"';"
for sql in "$select_sql" "$select_sql1"
do
if ssh administrator@${master_ip} "cd /cygdrive/d/data/mysqld_master && cmd /c sql.bat \"$sql\" ";then
:
else
echo -e "\033[31m To grant authorization{IP:${master_ip} 权限:只读 } faild \033[0m"
fi
else
echo -e "\033[31m To grant authorization{IP:${master_ip} 权限:只读 } faild \033[0m"
fi
done
echo -e "\033[32m To grant authorization{IP:${master_ip} 权限:只读 } sucess \033[0m"
echo -e "\033[32m 只读账户:${db}_r \033[0m"
echo -e "\033[32m 只读密码:${select_pwd} \033[0m" } function GetAdmin(){
admin_pwd=$(GetPwd 2)
#管理员
admin_sql="grant select,insert,update,delete,create,drop,alter,index,lock tables ,CREATE TEMPORARY TABLES ON ${db}.* TO ${db}_admin@'"localhost"' IDENTIFIED BY '"$admin_pwd"';"
admin_sql="grant select,insert,update,delete,create,drop,alter,index,lock tables ,CREATE TEMPORARY TABLES ON ${db}.* TO ${db}_admin@'"127.0.0.1"' IDENTIFIED BY '"$admin_pwd"';"
for sql in "$admin_sql" "$admin_sql1"
do
if ssh administrator@${master_ip} "cd /cygdrive/d/data/mysqld_master && cmd /c sql.bat \"$sql\" ";then
:
else
echo -e "\033[31m To grant authorization{IP:${master_ip} 权限:管理员 } faild \033[0m"
fi
done
echo -e "\033[32m To grant authorization{IP:localhost 权限:管理员 } sucess \033[0m"
echo -e "\033[32m 管理员账户:${db}_admin \033[0m"
echo -e "\033[32m 管理员密码:${admin_pwd} \033[0m"
} function main(){
for stu in $type
do
if [ $stu -eq 1 ];then
GetProgram
elif [ $stu -eq 2 ];then
GetSelect
elif [ $stu -eq 3 ];then
GetAdmin
else
echo -e "\033[31m Please check if your type parameter is in range \033[0m"
fi
done
}
main
调用win sql.bat
@echo off set allparam=%1 D:\data\mysqld_master\bin\mysql.exe -uroot -e %allparam%
or +port
@echo off set allparam=%2
set port=%1 echo %1
echo %2
D:\data\mysqld_slave\bin\mysql.exe -uroot -P%port% -e %allparam%
eg : mysqlha_winreplication.sh -D -M -I -T
Shell +Cygwinterminal+WinMySQL 传参数授权的更多相关文章
- shell 向python传参数,空格引发的问题
昨天用一个shell脚本,调用一个python脚本,并把shell脚本中用 time1=`date "+%Y-%m-%d %H:%M:%S"`生成的时间戳作为参数,传到python ...
- shell向python传参数
想要在shell中调用python脚本时实现: python pyServer.py argu1 argu2 argu3 利用 sys.argv 即可读取到 相应参数: # coding=utf-8 ...
- Shell script 传参数处理(默认变量)
变量 含义 $0:shell脚本的名字: $1 位置参数 #1 $2 - $9 位置参数 #2 - #9 ${10} 位置参数 #10 "$*" :代表"$1c$2c$3 ...
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...
- shell编程之脚本参数$@,$*,$#,$$,$?的含义
#首先按顺序解释各个参数的含义 1.$0 表示脚本的文件名, 具体的路径信息和执行命令时的相对位置有关,例如 sakura@mi-OptiPlex-7050:~/sh$ sh args.sh arg ...
- 传参数应该用哪种形式——值、引用、指针?
类型:C++ & Qt4,创建时间:十二月 30, 2011, 7:43 p.m. 标题无"转载"即原创文章,版权所有.转载请注明来源:http://hgoldfish.c ...
- Mybatis传参数
1使用@Param注解传参数 mapper接口:public void updateUser(@Param("user")User user)throws Exception; m ...
- 如何给main传参数
main 函数的参数有连个argc argcv[] argc 是参数个数 argcv是参数的数组指针,且argcv的第一个参数是默认程序路径加程序名 给main传参数,需要在命令行启动程序时设置 如 ...
- mvc中多参数URL会很长,首次加载不传参数让url很短,路由规则实现方法[bubuko.com]
如要实现列表中地址全路径“bubuko-11-2.html”,在首次进入时,使用短路径“bubuko.html”,只有再次href后才显示全路径“bubuko-11-2.html”,下面使用路由规则来 ...
随机推荐
- 洛谷P3585 [POI2015]PIE
传送门 题目大意:有个n*m的格子图,要求'x'点要被染成黑色 有个a*b的印章,'x'是可以染色的印章上的点. 要求用印章去染色格子 (1)印章不可以旋转. (2)不能把墨水印到纸外面. (3)纸上 ...
- 系列文章--WCF后传学习文章
WCF后传系列(10):消息处理功能核心 摘要: WCF是一个通信框架,同时也可以将它看成是一个消息处理或者传递的基础框架,它可以接收消息.对消息做处理,或者根据客户端给定的数据构造消息并将消息发送到 ...
- Collections排序
0.前言 ThreeSet的底层实现是红黑树,它在创建set的过程中实现排序.Collections.sort是在对整个集合进行排序,按道理来说使用TreeSet插入集合元素直至建立整个TreeSet ...
- 12C中Profile的使用
12c中PROFILE在PDB和CDB中是公用的,不过创建的profile名称在CDB和PDB有所不同. 如: 1.CDB中创建Profile SQL> show con_name CON_NA ...
- gen already exists but is not a source folder
遇到android项目导入出现后重复空包等错误,往往是导入的java编译级别有关,点击项目properties-> java Compiler ->修改Compiler complianc ...
- sqlbulkcopy 使用DataTable作为数据源的数据类型问题--来自数据源的String类型的给定值不能转换为指定目标列的类型 uniqueidentifier
今天做批量插入的时候,SQLSERVER总是报错,错误提示“来自数据源的String类型的给定值不能转换为指定目标列的类型 uniqueidentifier”. 首先核对了一下定义的dataTable ...
- 【转】Jmeter做web压力测试时设置持续时间注意点
头一回使用jmeter做web的压力测试,遇到个很莫名其妙的问题,不管我的线程组怎么设置,它就是执行一次就结束了. 设置循环次数为300,不使用调度器--〉执行一次就结束了,循环次数未生效 设置循环次 ...
- HDFS之五:Hadoop 拒绝远程 9000 端口访问
最近学习Hadoop 时发现在本机访问 hadoop 9000 端口没有问题,但是远程机器访问 9000端口时不能访问,通过telnet 命令诊断发现发现无法访问端口,经过网上搜索解决方案结合 ...
- PyCharm中按住Alt键,可以选择一个指定列表,然后对这个数列进行操作,比如删除,增加等等
- ARM-Linux移植之(四)——根文件系统构建
相关工具版本: busybox-1.7.0 arm-linux-4.3.2 linux-2.6.22 1.配置busybox并安装. 在我们的根文件系统中的/bin和/sbin目录下有各种命令的应 ...