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”,下面使用路由规则来 ...
随机推荐
- win10环境变量的配置
c盘->环境变量: 1.添加变量名和变量值 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.8.0_161 2.添加变量名和变量值 变量名:JAVA_H ...
- window.top.location
window.top.location的作用 top, 表示是顶层页面, 因为页面之中可能嵌入了 frame 等子页面,top表示最外面一层 Html代码 <html> <hea ...
- C# Sql参数化 in like
[in] string sql = "exec('select * from bid where id in ('+@IDS+')')"; System.Data.SqlClien ...
- 监听文本框输入oninput和onpropertychange事件
前端页面开发的很多情况下都需要实时监听文本框输入,比如腾讯微博编写140字的微博时输入框动态显示还可以输入的字数.过去一般都使用onchange/onkeyup/onkeypress/onkeydow ...
- 从如何优化SQL入手,提高数据仓库的ETL效率
1 引言数据仓库建设中的ETL(Extract, Transform, Load)是数据抽取.转换和装载到模型的过程,整个过程基本是通过控制用SQL语句编写的存储过程和函数的方式来实现对 ...
- Fiddler的Java抓包
代码处理 System.setProperty("http.proxySet", "true"); System.setProperty("http. ...
- 支付宝RSA签名
1.参考网上相关文章,开放php中的openssl,但使用网上例子调用openssl_pkey_new,一直报100013错误.后改用用支付宝提供的SDKdemo程序 发现使用提供的privkye,可 ...
- 平均分割list
private static List<List<Integer>> splitList(List<Integer> lists,int limit){ int s ...
- css学习笔记之图像
图像与文本的对齐方式: vertical-align:text-top;表示的意思是图像的顶部和同一行的文本对齐,但文本不会超出图片的上边线. vertical-align:middle;表示的意思是 ...
- emqtt 4 (我要publish消息了)
这次,分析处理publish msg的流程. 由protocol开始 publish 类型的packet的处理是: process(Packet = ?PUBLISH_PACKET(_Qos, Top ...