网络运营 > 服务器 > Linux

通过Shell脚本批量创建服务器上的MySQL数据库账号

103人参与2019-09-09

1.项目背景

因监控需要,我们需要在既有的每个mysql实例上创建一个账号。公司有数百台 mysql 实例,如果手动登入来创建账号很麻烦,也不现实。所以,我们写了一个简单的shell脚本,用来创建批量服务器的mysql 账号。

 2.执行脚本内容;

#!/bin/bash
## 此段shell 脚本的主要功能是实现在多个sql server ip实例上,创建账号。输入参数是两个,第一个是数据库所在的ips,即多个server ip构成的字符串,ip间用逗号隔开。第二个参数是 端口(3306 或 3307)
##mysql程序所在路径--mysql bin 文件所在路径;如果由建立软连接,可直接是mysql
command_linebin="/data/mysql5720/bin/mysql"
##用来连接mysq的账号和密码
username="dba_mysqlacc"
password="dbaacctest109211706df"
## 新创建的账号和密码
createuid="testuid"
createpwd="testpwd"
##指定新创建的用户在那个主机上可以登录,如果是本地用户可用localhost;如果指定规则的可以使用通配符%
phost="177.177.%"
mysqlserverips=$1
echo $mysqlserverips
## 按“,”分割,将字符串转换为数组。
iparr=(${mysqlserverips//,/ })
echo $iparr
for ((i=0;i<${#iparr[@]};i++))
do
  ip=${iparr[$i]}
  echo "${ip}"
select_sql="select * from user where user=\"$createuid\""
msg=$(${command_linebin} -h ${ip} -p $2 -u$username -p$password -s mysql -e "${select_sql}")
echo $msg
##创建账号前,先检查需要创建的账号是否已经存在,如果已经存在了,则直接退出。
if [[ $msg = "" ]] ;then
  echo $(date -d today +"%y%m%d%h%m%s") $mip "the condition is ok,permit to create uid."
else
  echo $(date -d today +"%y%m%d%h%m%s") $ip "the uid you want create has been exited, please check it! the act quit!"
  exit
 fi
## 以下几行代码是创建的关键
${command_linebin} -h ${ip} -p $2 -u$username -p$password -s mysql <<eof
create user '$createuid'@'$phost' identified by '$createpwd';
grant select,process on *.* to '$createuid'@'$phost';
flush privileges;
eof
##创建后,再次检查账号看否已将存在。如果不存在,则说明创建失败,直接退出。
select_sql="select * from user where user=\"$createuid\""
msg=$(${command_linebin} -h ${ip} -p $2 -u$username -p$password -s mysql -e "${select_sql}")
echo $msg
if [[ $msg = "" ]] ;then
  echo $(date -d today +"%y%m%d%h%m%s") ${ip} "the action to create uid error,please check it! the act quit! "
  exit
else
  echo $(date -d today +"%y%m%d%h%m%s") ${ip} "congratulation! create uid successful"
 fi
done

3. 执行举例

step 1 将代码放置到执行文件中,可执行文件命名为 mysql_createuidmulti.sh

step 2 请对此文件授予可执行权限,否则,提示以下错误。

step 3 执行的具体命令(参数格式),例如 在 177.177.xxx.128,177.177.xxx.144 两个 3306的实例上创建账号

./mysql_createuidmulti.sh 177.177.xxx.128,177.177.xxx.144 3306

step 4 打印的执行结果如下

177.177.xxx.128,177.177.xxx.144
177.177.xxx.128
177.177.xxx.128
mysql: [warning] using a password on the command line interface can be insecure.
20180529171802 the condition is ok,permit to create uid.
mysql: [warning] using a password on the command line interface can be insecure.
mysql: [warning] using a password on the command line interface can be insecure.
177.177.% testuid y n n n n n n n y n n n n n n n n n n n n n n n n n n n n 0 0 0 0 mysql_native_password *22cbf14ebde8814586ff12332fa2b6023a7603bb n 2018-05-29 17:18:02 null n
20180529171802 177.177.xxx.128 congratulation! create uid successful
177.177.xxx.144
mysql: [warning] using a password on the command line interface can be insecure.
177.177.% testuid y n n n n n n n y n n n n n n n n n n n n n n n n n n n n 0 0 0 0 mysql_native_password *22cbf14ebde8814586ff12332fa2b6023a7603bb n 2018-05-30 00:56:38 null n
20180529171802 177.177.xxx.144 the uid you want create has been exited, please check it! the act quit!

4.补充说明

如果创建一个服务器上的mysql账号,可按照以下格式

./mysql_createuidmulti.sh 177.177.xxx.128 3306

打印的log 如下

177.177.xxx.128
177.177.xxx.128
177.177.xxx.128
mysql: [warning] using a password on the command line interface can be insecure.
20180529173517 the condition is ok,permit to create uid.
mysql: [warning] using a password on the command line interface can be insecure.
mysql: [warning] using a password on the command line interface can be insecure.
177.177.% testuid y n n n n n n n y n n n n n n n n n n n n n n n n n n n n 0 0 0 0 mysql_native_password *22cbf14ebde8814586ff12332fa2b6023a7603bb n 2018-07-29 17:35:17 null n
20180529173517 177.177.xxx.128 congratulation! create uid successful

总结

以上所述是小编给大家介绍的通过shell脚本批量创建服务器上的mysql数据库账号 ,希望对大家有所帮助

您希望与广大热心网友互动!!点此进行留言回复

相关推荐

通过Shell脚本批量创建服务器上的MySQL数据库账号

09-09

详解在dotnet core实现类似crontab的定时任务

09-09

UBUNTU手动安装JDK的详细步骤

05-02

详解linux下redis安装、启动与停止,redis做成服务

09-26

阿里云云服务器Linux系统更新yum源Shell脚本

06-22

用shell脚本和c语言将大写字母转成小写的代码

12-14

如何利用Bash脚本监控Linux的内存使用情况

10-07

Shell脚本实现判断IP地址是否在一个ip段内代码分享

06-26

详解CentOS 6.4 添加永久静态路由所有方法汇总

04-25

在Centos上搭建Maven中央仓库的方法

06-01

最近更新

Linux Shell 截取字符串的方法示例

09-09

一张图让你学会Vim编辑器快捷键

09-09

shell脚本字符串和数组的使用操作方法

09-09

linux下文件描述符限制问题

09-09

每天一个Linux命令之shell单引号和双引号的经典解释

09-09

linux shell判断字符串为空的正确方法示例

09-09

shell中长命令的换行处理方法示例

09-09

linux xz压缩解压的方法小结

09-09

详解kali linux 常用文件与指令路径

09-09

详解在dotnet core实现类似crontab的定时任务

09-09

网友评论

已有0条评论