1.情况描述
mysql: [Warning] Using a password on the command line interface can be insecure.
shell脚本,连接远程mysql服务器的时候每次连接都有这一段日志显示,很烦,怎么在连接的时候不显示这段呢?
这段是密码打在了命令行上,他会警告是不安全的,一般我们用 -p 不会提示这个,用-p'password' 连接就会弹出这个
2.mysql_config_editor安全配置
脚本里可以写 2>/dev/null 的方式把warning这种警告丢弃,或者通过配置环境变量mysql_pwd来实现警告消失
我们这里通过客户端自带的命令来操作
(1)简单介绍这个命令
mysql_config_editor是MySQL自带的一款用于安全加密登录的工具,可以在一些场合避免使用密码明文,例如,写shell脚本时,不用在为在脚本里面写入明文密码纠结了;也可以用于管理多台MySQL实例。另外,像如果使用mysql命令登录数据库,可以避免每次都要输入一堆参数。简单方便。
mysql_config_editor对应的参数信息如下:
· --login-path=name,-G name
· --host=host_name,-h host_name 主机名
· --password,-p 密码,注意这个地方不能使用“=”直接写入密码
· --port=port_num,-P port_num 端口号
· --socket=file_names,-S file_name 文件名
· --user=user_name,-u user_name 用户名
· --warn,-w 默认开启,提示警告信息,如果要忽略警告,使用--skip-warn 参数
(2)命令配置如下
#配置 路径名testmy,远程ip,mysql用户,端口
mysql_config_editor set --login-path=testmyclient --host=192.168.80.80 --user=testmy --port=3306 -p
#远程登陆mysql
mysql --login-path=testmyclient -D testmydb
这里输入一下数据库用户testmy的登陆密码 ,再通过配置的登陆路径登陆mysql
(3)查看或者修改这登陆路径参数
新增login path后,就会在当前用户的根目录生成隐藏文件.mylogin.cnf
(如果是Windows的话,此文件位于%APPDATA%\MySQL目录下面)
查看信息
#查看所有的login path信息
mysql_config_editor print --all
#查看指定的login path信息
mysql_config_editor print --login-path=testmyclient
#删除login path信息
mysql_config_editor remove --login-path=dbadmin
#也可以通过上面的选项删除指定信息
mysql_config_editor remove --login-path=dbadmin --port
这里把端口选项删除
3.在shell脚本里使用登陆路径进入mysql
可以通过第二步,手动配置,然后在shell脚本里直接使用登陆路径;
也可以直接写在shell脚本里,通过判断 mysql_config_editor print 判断这个路径是不是配置过,如果没配,就第一次执行的时候会弹出输入密码选项配置;如果配置了就略过这一步,这里就不配置了,直接用上面手动配置的
#!/bin/bash
#报错立刻停止
set -e
#连接的数据库名
MYSQL_DATABASE="testmydb"
#执行查询
mysql --login-path=testmyclient -D $MYSQL_DATABASE <<eof
select now(); -- 查询当前时间
eof
配置完安全选项,这样登陆,密码就不会在命令行里看到喽