配置流程实例展示 阅读本文前的知识准备: mysql程序启动流程.7z SET MYSQL_HOST="127.0.0.1" SET MYSQL_PWD="123456" mysql --defaults-group-suffix=_test --defaults-extra-file="D:\mysql\config.ini" --login-path=mypath --host=localhost --user=game 这是用来启动mysql客户端的命令, 但 它看起来好像太复杂了.脑壳疼. 别着急,让我们大家帮你分析分析.我看到你 用set命令设置了跟mysql相关的环境变量, 我帮你把它记录下来 我注意到你的命令里包含有影响配置文件读取的选项参数, 我们可以根据它们整理出配置文件读取的顺序表 mysql配置项分析记录 1.全局变量设置的配置项: MYSQL_HOST: mysql连接的主机 MYSQL_PWD: mysql连接使用的密码 mysql配置项分析记录 1.全局变量设置的配置项: MYSQL_HOST: mysql连接的主机 MYSQL_PWD: mysql连接使用的密码 2.影响配置文件读取的选项参数 (1)--defaults-extra-file: 额外指定的配置文件 (2)--defaults-group-suffix: 增加读取的组后缀 (3)--login-path: 指定读取.mylogin.cnf配置组 我仔细地看了下 电脑的目录及文 件,情况是这样的 这样的话,配置文 件读取的顺序该 是这样的: 1.%windir%\my.ini 2.basedir\my.ini 3.D:\mysql\config.ini (--defaults-extra-file指定) 4.%APPDATA%\MySQL\.mylogin.cnf (客户端程序必读) 让我来好好帮你看看各个配 置文件的内容, 整理出所有有 效的配置项吧 首先,让我们来看看: %windir%\my.ini [client] password = 123456 port = 3306 socket = /tmp/mysql.sock [mysql] no-auto-rehash [mysqld] default_authentication_plugin=mysql_native_password port = 3306 basedir=E:/mysql/mysql5.7.26 datadir=E:/mysql/mysql5.7.26/data mysql客户端默认读取 [client]组和[mysql]组, 有效选项整理如下表: 接着看basedir\my.ini: 默认读取[client], 但别忘记 了命令行里的--defaults- group-suffix=_test,因此 [client_test]也被读取 [client] password = 123456 port = 3307 [client_test] user=root !include=D:\\mysql\\my.ini 根据文件覆盖规则,后读取的文件覆盖先读取的,最终结果为: (被覆盖的值用红色并加上删除线表示) 注意到basedir\my.ini最后 是一个!include语句导入一 个指定的配置文件, 根据它 的内容更新上面的配置项表 格: [client] password = abcde port = 3308 下一个文件是: D:\mysql\config.ini [client] password = xyz port = 3000 最后是: %APPDATA%\MySQL\.mylogin.cnf 如果引入的配置文件有 [mysqld]组,这里是不会读取的. 这是因为引入文件也是按照规 则读取对应组的 [mypath] password=7654321 [client] password=123456 port=3306 socket=/tmp/mysql.sock 最终的结果应该是这样的: 别忘了, 命令行参数中也包含有设置 项(除开那些影响文件读取的选项参 数), 我们应该把他们也考虑进来. 开 头的环境变量设置的选项host和 password都被覆盖掉了. 这里的[mypath]先被读取, 但 是位于[client]前面, 注定会被 后面的password覆盖,我们直 接取123456 --login-path=mypath 命令行指定读取的组 真正的最终结果如下,你可以拿去启 动mysql客户端了 谢谢老铁们! 导入的配置文件
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄