1. mysql_config_editor介绍

mysql_config_editor是一个MySQL自带的一款用于安全加密登录的工具,使用这个工具,可以创建一个登录MySQL的路径(或者说是创建一个登录MySQL的别名),将登录MySQL的username、password、port、socket文件等一系列的权限参数存入一个叫.mylogin.cnf的隐藏文件中。

这个文件的位置在Windows上是%APPDATA%\MySQL目录,在非Windows系统上是当前用户的家目录,如/root目录。该文件可以被MySQL客户端程序读取,以获得连接到MySQL服务器的认证凭证。

mysql_config_editor对 .mylogin.cnf文件进行模糊处理,因此无法将其作为明文读取,比如使用cat是不能查看的。

但mysql_config_editor提供了一个 print命令用于显示登录路径文件内容的命令,但即使在这种情况下,密码值也会被屏蔽,以免以其他用户可以看到的方式出现(见后面举例)。

使用mysql_config_editor可以管理一台MySQL实例,也可以用于管理多台MySQL实例。最重要的是能免除在命令行、脚本里输入明文密码,带来一系列的安全隐患了。不仅方便,而且安全。

2. mysql_config_editor的选项和命令

2.1 mysql_config_editor的4个选项

选项 含义
--help 查看帮助信息
--debug 写debug日志
--verbose 详细模式,用于查找问题
--version 查看版本信息

2.2 mysql_config_editor的4个命令

2.2.1 set

set:创建一个登录MySQL的路径(别名)信息,将登录路径的用户名密码等相关参数写入登录路径文件.mylogin.cnf

set选项参数介绍:

该命令后面包含--host、--password、--port、--socket和--user等几个选项,用于定义要登录的数据库的相关参数。如果没有给出这些选项,mysql_config_editor将登录路径写入空组。 set后面可以跟如下选项:

选项 含义
--help 显示set命令的帮助消息并退出
--host=host_name, -h host_name 写要写入登录路径的主机名(或IP)
--login-path=name, -G name 要创建的登录路径,如果不指定,默认为client
--user=user_name, -u user_name 输入登录用户名
--password, -p 提示输入密码,密码不会回显。如要输入空密码,则在提示输入密码时直接摁回车键即可
--port=port_num, -P port_num 输入MySQL端口。如不指定,则默认是3306
--socket=file_name, -S file_name 输入MySQL的socket文件地址,如无特殊指定,可不写
--warn, -w 如果命令试图覆盖现有的登录路径,则警告并提示用户进行确认。这个选项在默认情况下是启用的;使用--skip-warn禁用它
set使用举例:

例1:查看帮助信息:

mysql_config_editor set --help

例2:创建本地登录路径localauth:

mysql_config_editor set --login-path=localauth -h localhost --user=root --port=3306 --password

image.png

上面命令中的“-h localhost”可以换成IP,如: image.png

但要注意user表中该用户允许的登录权限是什么,如果只允许localhost登录,换成IP就会报错,如下截图: image.png

原因是在User表里面root用户的Host一列指定是localhost: image.png

2.2.2 reset

reset:清空登录路径文件的全部内容

reset选项参数介绍:
选项 含义
--help 显示reset命令的帮助消息并退出
reset使用举例:

后面不跟参数,清空/root/.mylogin.cnf的全部内容:

mysql_config_editor reset

2.2.3 remove

remove:从原有的登录路径文件中删除指定的登录路径,或删除某个登录路径(别名)的某一项参数。

remove选项参数介绍:

remove后面可以带--host、 --password、--port、 --socket、--user 等选项。如果没有给出这些选项,则 remove删除整个登录路径。remove后面接的选项和set对应,set能设置,remove就能删除。

选项 含义
--help 显示remove命令的帮助消息并退出
--host=host_name, -h host_name 从登录路径中删除主机名
--login-path=name, -G name 要删除或修改的登录路径,如不指定,默认为client
--user=user_name, -u user_name 从登录路径中删除用户名
--password, -p 从登录路径中删除密码
--port=port_num, -P port_num 从登录路径中删除端口
--socket=file_name, -S file_name 从登录路径中删除MySQL的socket文件地址
--warn, -w 如果命令尝试删除默认登录路径(client)并且没有指定--login-path=client,则警告并提示用户进行确认。这个选项在默认情况下是启用的;使用--skip-warn禁用它。
remove使用举例:

例1:删除前面创建的路径auth的密码:

mysql_config_editor remove --login-path=auth --password

例2:删除整个登录路径(别名):

mysql_config_editor remove --login-path=auth

过程如图: image.png

2.2.4 print

print:打印登录路径文件的内容,但密码显示为 *****

print选项参数介绍:

print可以打印指定路径(别名)信息,也可以打印全部路径信息。分别由--login-path和--all两个参数指定。

选项 含义
--help 显示remove命令的帮助消息并退出
--all 打印登录文件中左右登录路径
--login-path=name 打印指定登录路径的内容

首先创建测试路径auth和localauth: 例1:不指定需要打印的登录路径,则默认打印名为“client”的路径,如不存在client,则打印内容为空:

[root@test101 ~]# mysql_config_editor print   # 因.mylogin.cnf中没有client这个路径,因此打印为空
[root@test101 ~]#

例2:打印指定路径auth

[root@test101 ~]# mysql_config_editor print --login-path=auth
[auth]
user = root
password = *****    #密码显示为****
host = 10.0.0.101
port = 3306
[root@test101 ~]#

例3:打印指定所有路径

[root@test101 ~]# mysql_config_editor print --all
[auth]
user = root
password = *****
host = 10.0.0.101
port = 3306
[localauth]
user = root
password = *****
host = localhost
port = 3306
[root@test101 ~]#

例4:同时指定--all和 --login-path, --all则优先,会打印所有路径信息

[root@test101 ~]# mysql_config_editor print --login-path=auth --all 
[auth]
user = root
password = *****
host = 10.0.0.101
port = 3306
[localauth]
user = root
password = *****
host = localhost
port = 3306
[root@test101 ~]#

最后:在一个简易的备份小脚本中的应用

#!/bin/bash
mkdir /home/bakdata/ -p
bakdir=/home/bakdata/

mysqldump --login-path=auth test --skip-add-drop-table --lock-tables --flush-privileges > ${bakdir}/backup_$(date +%F_%w).test.sql;

ps:51对参数的显示似乎不太友好,参数前面两条-显示出来只有一条。 可查看同文链接: https://mp.weixin.qq.com/s?__biz=MzU5Njk2OTg3MA==&mid=2247484021&idx=1&sn=cb13c86c51abee3d945a2ea6da5e6e30&chksm=fe5bd294c92c5b824839b534807b96dfc4d3a5a363004a0a2faef2ec503edb19b88d00bd37cb&token=256870874&lang=zh_CN#rd

(完) ::: hljs-center

image.png

:::