「mysql_config_editor」-

  LINUX MANUAL PAGES

mysql_config_editor,用于设置身份验证凭据存储(帐号密码)信息在,将其保存在$HOME/.mylogin.cnf中,该文件是加密的。

.mylogin.cnf保存在当前用户的主目录。该文件由MySQL客户端程序读取,用户获取连接到MySQL服务器的身份验证凭据。

命令行语法格式

mysql_config_editor [program_options] command [command_options]

program_options 由常用选项组成。

command 在.mylogin.cnf登录路径文件上执行的操作。例如,设置写入文件的登录路径,删除删除登录路径,并打印显示登录路径内容。

command_options 特定于命令的任何附加选项,例如:登录路径的名子、在登录路径中要使用的值。

命令名称在程序参数集中的位置很重要。例如,这些命令行具有相同的参数,但会产生不同的结果:

#!/bin/bash

# 显示一个通用的mysql_config_editor帮助消息,并忽略set命令。
mysql_config_editor --help set

# 显示特定于set命令的帮助消息
mysql_config_editor set --help

简述

mysql_config_editor程序用于将身份认证信息存储在登录路径文件中,文件名为.mylogin.cnf,该文件位于家目录下,Windows下位于%APPDATA%\MySQL目录中。MySQL Client程序在连接数据库的时候获取其中的身份凭据信息。

未加密格式的.mylogin.cnf文件由选项组组成,类似于其他的选项文件。在.mylogin.cnf中每个选项组被称为”登录路径“(login path)。选项组是一个包含了某些选项(host, user, password, port, socket)的组,将登录路径选项组视为一组选项,用作要连接MySQL服务器以及要认证的帐户的信息。下面是一个未加密的例子:

[client]
user = mydefaultname
password = mydefaultpass
host = 127.0.0.1
[mypath]
user = myothername
password = myotherpass
host = localhost

当调用Client程序连接到服务器时,Client会将.mylogin.cnf与其他选项文件一起使用。其优先级高于其他选项文件,但少于客户端命令行上明确指定的选项。有关使用选项文件的顺序的信息,参见第4.2.6节“Using Option Files”:https://dev.mysql.com/doc/refman/5.7/en/mysql-config-editor.html

要指定某个登录路径文件名,需要设置MYSQL_TEST_LOGIN_FILE环境变量。mysql_config_editor、标准MySQL Client程序(mysql,mysqladmin等)以及mysql-test-run.pl都会识别该变量。

基于上面的未加密的.mylogin.cnf文件,程序按如下所示来使用登录路径中的组:

  • 如果不指定–login-path=name选项来明确指出要使用的登录路径,则默认情况下,mysql_config_editor将使用[client]
  • 没有–login-path选项,Client程序从其他选项文件中读取的登录路径文件中相同的选项组。假如执行mysql命令,默认情况下,mysql从其他选项文件读取[client]和[mysql]组,它也从登录路径文件读取这两个选项组。
  • 使用–login-path选项,Client程序还从登录路径文件中读取命名的登录路径。从其他选项文件读取的选项组保持不变。比如命令:mysql –login-path=mypath,mysql从其他选项文件读取[client]和[mysql],从登录路径文件中读取 [client], [mysql], [mypath]。
  • 即使使用–no-defaults选项,客户端程序也读取登录路径文件。这允许以比命令行更安全的方式指定密码,即使–no-defaults存在。

mysql_config_editor加密了.mylogin.cnf文件,因此无法读取明文,Client程序解密时的内容仅在内存中使用。以这种方式,密码可以以非明文格式存储在文件中,并且保证了不会在命令行中公开。mysql_config_editor提供打印登录路径文件内容的命令,但即使在这种情况下,密码值也是被屏蔽,以免其他用户看到它们。

mysql_config_editor使用的加密功能,防止密码以明文形式出现在.mylogin.cnf中,防止密码暴露。例如,如果在屏幕上显示常规未加密的my.cnf选项文件,则其中包含的任何密码都可见,供任何人查看。但不应该人为.mylogin.cnf加密文件是坚不可破的,获取了.mylogin.cnf文件依旧可以暴力破解。

登录路径文件必须对当前用户是可读写的,而其他用户无法访问。否则,mysql_config_editor忽略它,Client程序也不使用它。如果文件不存在,mysql_config_editor会创建它。

如上述示例所示,登录路径文件可以包含多个登录路径。这样,mysql_config_editor可以轻松设置多个“个性”来连接到不同的MySQL服务器,也可以使用不同的帐户连接到给定的服务器。当你调用客户端程序时,以后可以使用–login-path选项通过名称选择任何这些。例如,要连接到远程服务器,请使用以下命令:

#!/bin/bash

# mysql从其他选项文件中读取[client]和[mysql]选项组,从登录路径文件中读取[client],[mysql]和[remote]组。
mysql --login-path=remote

# 连接到本地MySQL Server,由于client是默认的,所以以下两条命令是等价的。
mysql --login-path=client
mysql

从登录路径文件读取的选项优先于从其他选项文件读取的选项。同一个登录路径文件,后去读的配置优先级高于之前读取的配置。

mysql_config_editor按照创建的顺序将登录路径添加到登录路径文件中,因此应该先创建更多的一般登录路径,然后再创建更多特定的路径。如果你需要移动文件中的登录路径,你可以将其删除,然后重新创建它来将其添加到最后。例如,[client]登录路径是更通用的,因为它被所有客户端程序读取,而[mysqldump]登录路径只能由mysqldump读取。后指定的选项会覆盖先指定的选项,因此登录路径中以[client][mysqldump]的顺序设置,会使[mysqldump]特定的选项覆盖[client]选项。

当使用set命令与mysql_config_editor创建登录路径时,不需要指定所有的选项值(host name, user name, password, port, socket)。只有给定的值才会写入路径。当你调用连接到MySQL服务器的客户端路径时,可以在其他选项文件或命令行中指定需要的选项值。在命令行上指定的选项将覆盖登录路径文件或其他选项文件中指定的选项。例如,如果登录路径中的某个凭据也适用于另外一台主机主机remote2.example.com,可以使用如下命令mysql –login-path=remote –host=remote2.example.com

常规选项及含义

mysql_config_editor支持以下常规选项,可以在命令行上命名的任何命令之前使用

–help, -?/–version, -V
帮助和版本信息。
要查看特定于命令的帮助消息,可以使用mysql_config_editor cmd –help

–debug[=debug_options], -# debug_options
将debug信息写入日志文件。debug_options的格式:d:t:o,file_name。
默认:d:t:o,/tmp/mysql_config_editor.trace.

–verbose, -v
详细模式。打印有关程序执行的更多信息。如果操作没有预期的效果,此选项可能有助于诊断问题。

命令和命令特有的选项

本节介绍mysql_config_editor支持的命令,及命令之后允许使用的特定于命令。此外,在任何命令之前可以使用的常规选项,有关常规选项,查看“mysql_config_editor常规选项”。

help

显示通用的帮助信息。没有尾随的命令。
如果要查看某个命令的帮助信息mysql_config_editor command –help

print [options]

打印登录路径文件中的内容,但输出中密码是隐藏的,显示为“*********”。

如果没有指定登录路径的名字,则默认是[client]。如果同时指定了–all与–login-path,则–all优先级高。

支持的options的取值如下:

–help, -?
打印print命令的帮助信息。如果要查看通用的帮助信息,使用mysql_config_editor –help.

–all
打印登录路径文件中的所有信息。

–login-path=name, -G name
打印登录路径文件中,组名为[name]的选项组。

remove [options]

从登录路径文件中删除某个登录路径,或者删除登录路径中的某个选项。

从登录路径中删除选项时,仅使用–host,–password,–port,–socket和–user选项。如果没有给出这些选项,则remove将删除整个登录路径。例如,从mypath登录路径删除user选项,而不是整个mypath登录路径mysql_config_editor remove –login-path=mypath –user

删除整个登录路径mysql_config_editor remove –login-path=mypath

可选的选项如下:

–help, -?
显示remove命令的帮助信息。

–host, -h
从登录路径中删除主机名。

–login-path=name, -G name
要删除或者修改的登录路径名。如果不指定该选项,默认的登录路径为[client]。

–password, -p
从登录路径中删除密码。

–port, -P
从登录路径中删除端口号。该选项是MySQL 5.7.1中加入的。

–socket, -S
从登录路径中删除Unix Socket文件。该选项是MySQL 5.7.1中加入的。

–user, -u
从登录路径中删除用户名。

–warn, -w
在没有指定–login-path=client的时候,提示用户将会删除[client]登录路径。该选项默认是启用的。使用–skip-warn来禁用。

reset [options]

清空登录路径文件中的内容。

支持的命令如下:

–help, -?
显示帮助信息。

set [options]

向登录路径文件中写入。

此命令只写入那些通过–host,–password,–port,–socket,–user选项指定的选项。如果没有给出这些选项,则mysql_config_editor将登录路径写为空组。

支持的命令如下:

–help, -?
显示帮助信息。

–login-path=name, -G name
指定要创建的登录路径的名字。默认的name值为client。

–host=host_name, -h host_name
向文件中写入主机名。

–user=user_name, -u user_name
向文件中写入用户名。

–password, -p
提示输入密码,用于写入登录路径。mysql_config_editor显示提示后,键入密码,然后按Enter键。为防止其他用户看到密码,mysql_config_editor不会回显密码。

要指定一个空密码,在密码提示符下按Enter键。写入登录路径文件的将是:password =

–port=port_num, -P port_num
向登录路径文件中写入端口号。该选项是MySQL 5.7.1中加入的。

–socket=file_name, -S file_name
向登录路径文件中写入Unix Socket文件名。该选项是MySQL 5.7.1中加入的。

–warn, -w
如果覆盖一个已经存在登录路径名,会提示用户。该选项是默认的,使用–skip-warn来禁用。

使用示例

假设要建立一个名为[client]的登录路径作为默认的连接参数,另一个名为[remote]的登录路径用于连接到MySQL服务器的主机remote.example.com。操作如下:

#!/bin/bash

mysql_config_editor set --login-path=client --host=localhost --user=localuser --password
# 会提示: Enter password: enter password "localpass" here
# mysql_config_editor默认使用[client]登录路径,因此可以从命令中省略--login-path=client选项。


mysql_config_editor set --login-path=remote --host=remote.example.com --user=remoteuser --password
# 会提示: Enter password: enter password "remotepass" here

要查看mysql_config_editor写入.mylogin.cnf文件的内容:

#!/bin/bash

mysql_config_editor print --all

# 输出类似如下:
#
# [client]
# user = localuser
# password = *****
# host = localhost
# [remote]
# user = remoteuser
# password = *****
# host = remote.example.com

# print命令将每个登录路径显示为一组以组标题开头的行,登录路径名称为方括号,后跟登录路径的选项值。密码值被隐藏,不会显示为明文。
# 如果不指定-all登录路径或--login-path=name来显示指定登录路径,则打印命令默认显示[client]登录路径(如果有)。

参考文献

  • man 1 mysql_config_editor,version 1.0 Distrib 5.7.18, for Linux on x86_64

更新日志

  • 04/05/2017 创建文章
  • 09/13/2018 修改文章内容