转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。
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实例。最重要的是能免除在命令行、脚本里输入明文密码,带来一系列的安全隐患了。不仅方便,而且安全。
选项 | 含义 |
---|---|
–help | 查看帮助信息 |
–debug | 写debug日志 |
–verbose | 详细模式,用于查找问题 |
–version | 查看版本信息 |
set:创建一个登录MySQL的路径(别名)信息,将登录路径的用户名密码等相关参数写入登录路径文件.mylogin.cnf
该命令后面包含–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禁用它 |
例1:查看帮助信息:
mysql_config_editor set --help
例2:创建本地登录路径localauth:
mysql_config_editor set --login-path=localauth -h localhost --user=root --port=3306 --password
上面命令中的“-h localhost”可以换成IP,如:
但要注意user表中该用户允许的登录权限是什么,如果只允许localhost登录,换成IP就会报错,如下截图:
原因是在User表里面root用户的Host一列指定是localhost:
reset:清空登录路径文件的全部内容
选项 | 含义 |
---|---|
–help | 显示reset命令的帮助消息并退出 |
后面不跟参数,清空/root/.mylogin.cnf的全部内容:
mysql_config_editor reset
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禁用它。 |
例1:删除前面创建的路径auth的密码:
mysql_config_editor remove --login-path=auth --password
例2:删除整个登录路径(别名):
mysql_config_editor remove --login-path=auth
过程如图:
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