工作时,客户调整网络连接规范,实行网络分离,连接内网登录云桌面可以用客户端登录Mysql数据库查看数据,但不能登录前台,也不能登录主机查看日志、分析日志。登录外网想查看数据又要记下登录命令,其他同事还时不时问,为方便,简单写个脚本实现想登录哪个Mysql就登录哪个Mysql
第一步
创建文件a.txt,记录数据库大致信息,方便指定连接的数据库(具体怎么写,自己看着舒服就行,文件名任意取,后面的shell脚本中记得修正)
**************************************************************************************************
*《《《《《《《数据库环境信息》》》》》》》
* mdb昵称 ip Port
test_mdb 192.168.0.1 3366user_mdb 192.168.0.2 3366
**************************************************************************************************
第二步
将数据库信息配置写入配置文件:mysql_host.conf
# mysql信息 ip 端口 用户名 密码
test_mdb 192.168.0.1 3366 bXlzcWwK bXlzcWwK
user_mdb 192.168.0.2 3366 bXlzcWwK bXlzcWwK
mysql信息列,使用唯一标识符
用户名密码先用base64编码,以免将密码信息直接暴露,后面脚本再用base64 -d解码
用法如下:
admin[/data/admin/ob_rel/scripts]%echo "mysql" | base64
bXlzcWwK
admin[/data/admin/ob_rel/scripts]%echo "bXlzcWwK" | base64 -d
mysql
所以这里的用户名密码都是mysql
第三步
shell脚本实现连接Mysql数据库
#!/bin/bash
file=mysql_host.conf
path=a.txt
echo_color()
{
echo -e "\e["$1"m"$2"\e[0m"
}
base_64(){
echo $1 | base64 -d
}
while((1))
do
# 清屏,有些主机clear清屏后可能看不到之前的记录了,这时可以用 printf "\033c"
# clear
printf "\033c"
cat $path | grep -v "^$"
echo -e "\e[1;32m若需退出,请输入:exit or quit or -1\e[0m"
while((1))
do
read -p "Try to connect to the database:" select
if [[ "$select" == "exit" || "$select" == "quit" || "$select" == "-1" ]];then
exit
fi
if [ "$select" == "" ];then
echo_color 31 "error:请输入需要连接的数据库"
continue
fi
sqlload=($(grep -w "^${select}" "$file"))
# 方法一
# if [ "${#sqlload[@]}" -eq 0 ];then
# echo_color 31 "error:输入错误,请检查输入信息或配置文件:"$file""
# continue
# else
# break
# fi
# 方法二
if [ $? -eq 0 ];then
break
else
echo_color 31 "error:输入错误,请检查输入信息或配置文件:"$file""
continue
fi
done
datainfo=${sqlload[0]}
ip=${sqlload[1]}
Port=${sqlload[2]}
user=$(base_64 "${sqlload[3]}")
passwd=$(base_64 "${sqlload[4]}")
echo_color 33 "------准备连接数据库:"$datainfo"------"
mysql -u$user -P$Port -h$ip -p$passwd
done
1、脚本中的方法一、方法二任选一个,用来判断数据库信息在mysql_host.conf是否已配置
2、通过while死循环实现重复连接需要连接的数据库而不必重新执行脚本
3、sqlload=($(grep -w "^${select}" "$file"))
此处用到数组,以免参数过多报错误日志
grep -w "^${select}" "$file",从配置文件 mysql_host.conf 匹配以xxx开头的信息,所以配置文件第一列使用唯一标识符