玩转MySQL之mysql_config_editor工具

平时维护mysql时,最多的工具就是mysql了。但是其登录时必须指定一连串的参数,特别是密码太长最难输入了。

虽然可以配置到my.ini文件,但是密码是明文,这样一来,密码就不安全了。那么密码是否可以存储为密文呢?可以的。

mysql提供一个工具:mysql_config_editor,配置编辑工具,但不是编辑my.ini文件。而是编辑mysql客户端登录工具读取的配置文件:.mylogin.cnf。

根据文档显示,mysql_config_editor工具会生成.mylogin.cnf文件在%APPDATA%\MySQL下。

C:\Users\Administrator\AppData\Roaming\MySQL>echo %APPDATA%\MySQL
C:\Users\Administrator\AppData\Roaming\MySQL


C:\Users\Administrator\AppData\Roaming\MySQL>


根据mysql工具的帮助显示来看,其读取my.ini的顺序是:

C:\Windows\my.ini
C:\Windows\my.cnf
C:\my.ini
C:\my.cnf
D:\Program Files\mysql-5.7.11-winx64\my.ini
D:\Program Files\mysql-5.7.11-winx64\my.cnf

红色路径是因为我的mysql在D:\Program Files\mysql-5.7.11-winx64\bin下,并且D:\Program Files\mysql-5.7.11-winx64\bin被加入系统path。

但是mysql登录时首先读取其实是%APPDATA%\MySQL下的.mylogin.cnf文件。当然如果直接在command上指定参数,其优先级也高于.mylogin.cnf文件。


下面来看该工具的用法:

首先看看%APPDATA%\MySQL的实际路径:

C:\>echo %APPDATA%\MySQL
C:\Users\Administrator\AppData\Roaming\MySQL


C:\>cd C:\Users\Administrator\AppData\Roaming\MySQL

查看下面是否有.mylogin.cnf文件:
C:\Users\Administrator\AppData\Roaming\MySQL>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 7E1B-5C8D


 C:\Users\Administrator\AppData\Roaming\MySQL 的目录


2016/03/23  09:35    

         .
2016/03/23  09:35              ..
2016/03/23  09:46               156 .mylogin.cnf
               1 个文件            156 字节
               2 个目录 21,072,113,664 可用字节

先删除这个文件:
C:\Users\Administrator\AppData\Roaming\MySQL>del .mylogin.cnf


C:\Users\Administrator\AppData\Roaming\MySQL>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 7E1B-5C8D


 C:\Users\Administrator\AppData\Roaming\MySQL 的目录


2016/03/23  09:59              .
2016/03/23  09:59              ..
               0 个文件              0 字节
               2 个目录 21,072,113,664 可用字节


C:\Users\Administrator\AppData\Roaming\MySQL>

成功删除。

接下来重新生成:

C:\Users\Administrator\AppData\Roaming\MySQL>mysql_config_editor set --host=127.0.0.1 --login-path=local3306 --port=3306 --user=root -p
Enter password: ********<这里输入实际连接的密码>


C:\Users\Administrator\AppData\Roaming\MySQL>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 7E1B-5C8D


 C:\Users\Administrator\AppData\Roaming\MySQL 的目录


2016/03/23  10:03    

         .
2016/03/23  10:03              ..
2016/03/23  10:03               156 .mylogin.cnf   #成功生成文件
               1 个文件            156 字节
               2 个目录 21,071,986,688 可用字节


C:\Users\Administrator\AppData\Roaming\MySQL>

该文件是一个二进制文件,无法用notepad查看。必须使用mysql_config_editor查看,如:

C:\Users\Administrator\AppData\Roaming\MySQL>mysql_config_editor print --all
[local3306]
user = root
password = *****
host = 127.0.0.1
port = 3306


C:\Users\Administrator\AppData\Roaming\MySQL>

可见在local3306这个section中,密码也是被保护的。下面再添加一个section:

C:\Users\Administrator\AppData\Roaming\MySQL>mysql_config_editor set --host=192.168.1.221 --login-path=remote3306 --port=3306 --user=root -p
Enter password: ********


C:\Users\Administrator\AppData\Roaming\MySQL>mysql_config_editor print --all
[local3306]
user = root
password = *****
host = 127.0.0.1
port = 3306
[remote3306]
user = root
password = *****
host = 192.168.1.221
port = 3306


C:\Users\Administrator\AppData\Roaming\MySQL>

成功。下来我们尝试登陆192.168.1.221的3306,在mysql连接通过login-path参数指定section:

C:\Users\Administrator\AppData\Roaming\MySQL>mysql --login-path=remote3306
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 59673
Server version: 5.6.27-log For cmsTestLocal.


Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql>

成功。我们连接一个没有配置的section:

C:\Users\Administrator\AppData\Roaming\MySQL>mysql --login-path=remote3307
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)


C:\Users\Administrator\AppData\Roaming\MySQL>

失败。下面看看如何删除一个section,比如remote3306:
C:\Users\Administrator\AppData\Roaming\MySQL>mysql_config_editor print --all
[local3306]
user = root
password = *****
host = 127.0.0.1
port = 3306
[remote3306]
user = root
password = *****
host = 192.168.1.221
port = 3306


C:\Users\Administrator\AppData\Roaming\MySQL>mysql_config_editor remove --login-path=remote3306


C:\Users\Administrator\AppData\Roaming\MySQL>mysql_config_editor print --all
[local3306]
user = root
password = *****
host = 127.0.0.1
port = 3306


C:\Users\Administrator\AppData\Roaming\MySQL>

成功删除remote3306。

你可能感兴趣的:(MySQL数据库)