1 、 MySQL 安全登录介绍
使用 MySQL 客户端连接进行交互式连接,每次登陆都要输入一次密码,感觉特别麻烦;然后使用明文连接,又一直报出 Warning 的信息,尤其是在做备份任务时。虽然知道明文不安全但是为了追求快速方便,所以不得不使用明文方式登陆。那么是否有既方便登录,又不需要总是交互式输入密码的方案呢?
场景一:
使用 Mysql 客户端连接,提示告警

场景二:
备份脚本执行,依旧提示告警
#!/bin/bash
BakDir=/root/adm/full
LogFile=/root/adm/full/bak.log
Date=`date +%Y%m%d`
Begin=`date +"%Y 年 %m 月 %d 日 %H:%M:%S"`
cd $BakDir
DumpFile=$Date.sql
mysqldump -uroot -p123456 --all-databases --lock-all-tables --routines --triggers --events --master-data=2 > $DumpFile
find /root/adm/full -mtime +3 -type f -exec rm -rf {} \;
2 、免密登录解决方案
既然没有方法能关闭,那我们如何在 mysql 支持的方式下来避免相关 warning 。
下面给大家介绍如下工具:
在 MySQL 5.6 之后, mysql 新增了一个 login-path 特性,提高了安全性及便利性,也可以看成是指定用户的一种免密登录方式。即 mysql_config_editor 命令。

手动生成加密文件
参考语法:
$> mysql_config_editor set --login-path=client
--host=localhost --user=localuser --password
Enter password: enter password "localpass" here
$> mysql_config_editor set --login-path=remote
--host=remote.example.com --user=remoteuser --password
Enter password: enter password "remotepass" here
参考示例:
mysql_config_editor set --login-path=mysql_3306 --user=root --socket=/mydata/mysql5.7.44/mysql.sock --password
此时在当前用户 $HOME 目录下,就会生成一个加密文件 .mylogin.cnf
file .mylogin.cnf
.mylogin.cnf: data
该文件非文本文件,还需要我们使用专用命令来读取,如下:
参考语法:
$> mysql_config_editor print --all
[client]
user = localuser
password = *****
host = localhost
[remote]
user = remoteuser
password = *****
host = remote.example.com
参考示例:
[root@doris01 ~]#mysql_config_editor print --all
[mysql_3306]
user = root
password = *****
socket = /mydata/mysql5.7.44/mysql.sock
此时密码均被加密,不用担心密码明文泄漏,使用方法也是简便,将登陆信息的几个选项用 --login-path 选项直接替换掉即可,如下:

同理,在脚本内部,也可以把相关登陆信息用 --login-path 选项进行替换,如下:
# cat DBfullBak.sh
#!/bin/bash
BakDir=/root/adm/full
LogFile=/root/adm/full/bak.log
Date=`date +%Y%m%d`
Begin=`date +"%Y 年 %m 月 %d 日 %H:%M:%S"`
cd $BakDir
DumpFile=$Date.sql
mysqldump --login-path=mysql_3306 --all-databases --lock-all-tables --routines --triggers --events --master-data=2 > $DumpFile
find /root/adm/full -mtime +3 -type f -exec rm -rf {} \;
