6.6.7 mysql_迁移密钥环 — 密钥迁移实用程序
MySQL 配置编辑器工具 (mysql_配置编辑器) 允许您将认证凭据存储在一个名为 .mylogin.cnf
的加密登录路径文件中。该文件的位置是在 Windows 上是 %APPDATA%\MySQL
目录,而在非 Windows 系统上则是当前用户的家目录。该文件可以由 MySQL 客户端程序后续读取以获取连接到 MySQL 服务器所需的认证凭据。
未加密格式的 .mylogin.cnf
登录路径文件由选项组构成,类似于其他选项文件。每个选项组在 .mylogin.cnf
中被称为一个 "登录路径",它允许仅包含以下几个选项:host
、user
、password
、port
和 socket
。可以将登录路径选项组视为一个指定连接到哪个 MySQL 服务器以及以何种身份进行认证的选项集。以下是未加密示例:
[client]
user = mydefaultname
password = mydefaultpass
host = 127.0.0.1
[mypath]
user = myothername
password = myotherpass
host = localhost
当您调用客户端程序连接到服务器时,该客户端会同时使用 .mylogin.cnf
和其他选项文件。它的优先级高于其他选项文件,但低于在命令行中显式指定的选项。有关如何按顺序使用选项文件的信息,请参阅第 6.2.2.2 节,“使用选项文件”。
要指定一个备用登录路径文件名,请设置环境变量 MYSQL_TEST_LOGIN_FILE
。这个变量由mysql_config_editor、标准的MySQL客户端(mysql、mysqladmin 等)以及测试工具 mysql-test-run.pl 访问。
程序在登录路径文件中使用组如下所示:
-
mysql_config_editor 默认情况下操作
client
登录路径,如果您没有指定一个明确的--login-path=
选项来指示要使用哪个登录路径。name
-
没有指定
--login-path
选项时,客户端程序从登录路径文件中读取与其他选项文件相同的组。考虑以下命令:mysql
默认情况下,mysql 客户端从其他选项文件中读取
[client]
和[mysql]
组,因此它也会从登录路径文件中读取。 -
使用
--login-path
选项,客户端程序还会从登录路径文件中读取指定的登录路径。其他选项文件中的组别读取方式保持不变。考虑以下命令:mysql --login-path=mypath
MySQL命令行客户端mysql从其他选项文件中读取
[client]
和[mysql]
,以及从登录路径文件中读取[client]
、[mysql]
和[mypath]
。 -
客户端程序即使使用了
--no-defaults
选项,也会读取登录路径文件,除非设置了--no-login-paths
。这样即使存在--no-defaults
,也可以在更安全的方式下指定密码。
mysql_config_editor 对 .mylogin.cnf
文件进行了加密,使其不能以明文形式被读取,其内容在客户端程序中使用时仅存在于内存中。在这种方式下,可以将密码存储在非明文格式的文件中,并且可以后续使用,而无需将它们暴露在命令行或环境变量中。mysql_config_editor 提供了一个 print
命令来显示登录路径文件的内容,但即便在这种情况下,密码值也会被隐藏,以确保它们不会以任何方式暴露给其他用户。
mysql_config_editor 使用的加密机制防止了密码在 .mylogin.cnf
文件中以明文形式出现,并提供了一定的安全性,防止了不小心暴露密码的风险。例如,如果你在屏幕上显示一个未加密的 my.cnf
选项文件,那么其中包含的任何密码都将对所有人可见。而使用 .mylogin.cnf
就不会有这样的问题。但是,这种加密机制不太可能阻止一个坚定的攻击者,并且你 shouldn't 认为它是不破解的。一个能够获得你的系统管理员权限并访问文件的用户可以通过一些努力来解密 .mylogin.cnf
文件。
登录路径文件必须对当前用户是可读写的,对其他用户则不可访问。否则,mysql_config_editor 将忽略它,而客户端程序也不会使用它。
调用 mysql_config_editor 如下所示:
mysql_config_editor [program_options] command [command_options]
如果登录路径文件不存在,mysql_config_editor 将创建它。
命令行参数如下:
-
程序选项
包含了 mysql_config_editor 的一般选项。 -
命令
指示对.mylogin.cnf
登录路径文件执行的操作。例如,set
写入登录路径到文件中,remove
删除登录路径,而print
显示登录路径内容。 -
命令选项
指示与命令相关的任何额外选项,例如登录路径名称以及在登录路径中使用的值。
命令名在程序参数中的位置很重要。例如,这些命令行具有相同的参数,但产生不同的结果:
mysql_config_editor --help set
mysql_config_editor set --help
首先,命令行显示了一个通用的mysql_config_editor 帮助信息,并忽略了set
命令。第二个命令行显示了特定于set
命令的帮助信息。
假设您想要设置一个名为client
的客户端登录路径,该路径定义了您的默认连接参数,以及另一个名为remote
的登录路径,用于连接到主机remote.example.com
上的MySQL服务器。您希望以以下方式登录:
-
默认情况下,以用户名和密码
localuser
和localpass
连接到本地服务器。 -
使用用户名和密码
remoteuser
和remotepass
连接到远程服务器。
要在.mylogin.cnf
文件中设置登录路径,请使用以下set
命令。每个命令应在单行中输入,并在提示时输入相应的密码:
$> 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 使用client
登录路径作为默认值,因此在第一个命令中省略--login-path=client
选项不会改变其效果。
要查看mysql_config_editor将写入到.mylogin.cnf
文件中,请使用print
命令:
$> mysql_config_editor print --all
[client]
user = localuser
password = *****
host = localhost
[remote]
user = remoteuser
password = *****
host = remote.example.com
`print`命令会以每个登录路径的组头开始,显示为方括号内的登录路径名称,然后是该登录路径的选项值。密码值不会以明文形式出现,而是被掩码。
如果不指定--all
来显示所有登录路径,或指定--login-path=
来显示一个命名的登录路径,`print`命令默认会显示客户端登录路径,如果存在的话。name
如前面的例子所示,登录路径文件可以包含多个登录路径。这样mysql_config_editor使得设置为不同MySQL服务器或使用不同账户连接到同一服务器变得容易。任何这些都可以通过名称后续使用--login-path
选项来选择,例如,要连接到远程服务器,请使用以下命令:
mysql --login-path=remote
在这里,mysql 从其他选项文件中读取 [client]
和 [mysql]
选项组,以及从登录路径文件中读取 [client]
、[mysql]
和 [remote]
组。
连接到本地服务器时,请使用以下命令:
mysql --login-path=client
由于 mysql 默认读取 client
和 mysql
登录路径,--login-path
选项在这种情况下不会添加任何内容。该命令等同于以下命令:
mysql
从登录路径文件中读取的选项优先于其他选项文件中读取的选项。登录路径文件中的后续组中的选项优先于文件中出现顺序更早的组中的选项。
mysql_配置编辑器 会将登录路径按照您创建它们的顺序添加到登录路径文件中,因此您应该先创建更通用的登录路径,然后再创建更具体的路径。如果需要移动一个登录路径在文件中的位置,您可以先删除它,然后重新创建它以将其放置到末尾。例如,客户端
登录路径更为通用,因为它会被所有客户端程序读取,而 mysqldump
登录路径只会被mysqldump 使用。指定在后面的选项将覆盖之前指定的选项,所以将登录路径按照 客户端
,mysqldump
的顺序排列,可以使 mysqldump-特定的选项覆盖 客户端
选项。
当您使用 set
命令与mysql_config_editor 创建登录路径时,不需要指定所有可能的选项值(主机名、用户名、密码、端口、套接字)。只需提供的值将被写入路径中。任何后续所需的值可以在连接到 MySQL 服务器时通过其他选项文件或命令行指定。命令行上的任何选项都将覆盖登录路径文件或其他选项文件中的指定。例如,如果 remote
登录路径的凭据也适用于主机 remote2.example.com
,那么连接到该主机的服务器应如下所示:
mysql --login-path=remote --host=remote2.example.com
mysql_config_editor 支持以下一般选项,它们可以在命令行上使用,任何命令之前。有关特定于命令的选项,请参阅mysql_config_editor 命令和特定于命令的选项。
-
--help
,-?
Command-Line Format --help
显示一个一般帮助信息并退出。
要查看特定命令的帮助信息,请以以下方式调用 mysql_config_editor,其中
命令
是一个其他于help
的命令:mysql_config_editor command --help
-
--debug[=
,调试选项
]-#
调试选项
Command-Line Format --debug[=debug_options]
Type 字符串 Default Value d:t:o
写入调试日志。一个典型的
调试选项
字符串是d:t:o,
。默认值为文件名
d:t:o,/tmp/mysql_config_editor.trace
。此选项仅在使用
WITH_DEBUG
构建 MySQL 时可用。Oracle 提供的 MySQL 发行版是 不 使用此选项构建的。 -
--verbose
,-v
Command-Line Format --verbose
详细模式。打印程序执行时更多的信息。如果操作没有你期望的效果,这个选项可能会有助于诊断问题。
-
--version
,-V
Command-Line Format --version
显示版本信息并退出。
本节描述了允许在命令行上跟随mysql_config_editor命令的命令特定选项。
此外,mysql_config_editor 支持在任何命令之前使用的通用选项。关于这些选项的描述,请参阅mysql_config_editor 通用选项。
mysql_config_editor 支持这些命令:
-
help
显示一个一般帮助消息并退出。这条命令不接受任何后续选项。
要查看特定命令的帮助信息,请以以下方式调用 mysql_config_editor,其中
命令
是一个除帮助
之外的命令:mysql_config_editor command --help
-
print [
选项
]打印登录路径文件的内容,除非密码以
*****
的形式显示。默认的登录路径名为
客户端
,如果未指定登录路径。同时给出--all
和--login-path
,则--all
优先。`print` 命令允许在命令名称后跟随这些选项:
-
--帮助
,-?
显示 `print` 命令的帮助信息并退出。
要查看通用帮助信息,请使用 mysql_config_editor --help。
-
--all
打印登录路径文件中的所有登录路径内容。
-
--login-path=
,名称
-G
名称
打印指定登录路径的内容。
-
-
remove [
选项
]从登录路径文件中移除一个登录路径,或者通过移除选项来修改登录路径。
这条命令从登录路径中移除仅限于由
--host
、--password
、--port
、--socket
和--user
选项指定的选项。如果没有提供这些选项,remove
命令将移除整个登录路径。例如,这条命令只从mypath
登录路径中移除user
选项,而不是整个mypath
登录路径:mysql_config_editor remove --login-path=mypath --user
这条命令将移除整个
mypath
登录路径:mysql_config_editor remove --login-path=mypath
remove
命令允许在命令名称后面跟随这些选项:-
--help
、-?
显示
remove
命令的帮助消息并退出。要查看通用帮助消息,请使用 mysql_config_editor --help。
-
--host
、-h
从登录路径中移除主机名。
-
--login-path=
、name
-G
name
要移除或修改的登录路径名称。如果不提供此选项,默认登录路径名称为
client
。 -
--password
、-p
从登录路径中移除密码。
-
--port
、-P
从登录路径中移除 TCP/IP 端口号码。
-
--socket
,-S
从登录路径中移除Unix套接字文件名。
-
--user
,-u
从登录路径中移除用户名称。
-
--warn
,-w
如果命令尝试删除默认的登录路径 (
client
) 并且没有指定--login-path=client
,则警告用户并要求确认。这个选项默认启用,可以使用--skip-warn
来禁用它。
-
-
reset [
options
]清空登录路径文件的内容。
命令
reset
允许在命令名后面跟随这些选项:-
--help
,-?
显示
reset
命令的帮助信息并退出。要查看通用帮助信息,请使用mysql_config_editor --help。
-
-
set [
options
]将登录路径写入登录路径文件中。
这条命令只将指定了
--host
、--password
、--port
、--socket
和--user
选项的信息写入登录路径。如果没有给出这些选项,mysql_config_editor 将登录路径写入为空组。命令
set
允许在命令后面跟随这些选项:-
--help
、-?
显示
set
命令的帮助信息并退出。要查看总体帮助信息,请使用 mysql_config_editor --help。
-
--host=<主机名>
、-h <主机名>
要写入登录路径的主机名称。
-
--login-path=<名称>
、-G <名称>
要创建的登录路径名。如果不给出这个选项,默认的登录路径名是
client
。 -
--password
、-p
输入密码以写入登录路径。使用mysql_config_editor后,系统会显示一个提示符。在提示符下输入密码并按回车键。为了防止其他用户看到密码,mysql_config_editor不会显示输入的密码。
如果要指定一个空密码,请在密码提示符下按回车键。写入到登录路径文件中的内容可能会包含以下行:
password =
-
--port=<端口号>
,-P <端口号>
要写入到登录路径的TCP/IP端口号。
-
--socket=<文件名>
,-S <文件名>
要写入到登录路径的Unix域套接字文件名。
-
--user=<用户名>
,-u <用户名>
要写入到登录路径的用户名。
-
--warn
,-w
如果命令尝试覆盖一个现有的登录路径,会发出警告并要求用户确认。这个选项默认启用,可以使用
--skip-warn
来禁用它。
-