平时维护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 <DIR> .
2016/03/23 09:35 <DIR> ..
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 <DIR> .
2016/03/23 09:59 <DIR> ..
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 <DIR> .
2016/03/23 10:03 <DIR> ..
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。