发现悖论
今天再看MySQL
其他文章的时候,发现其中有个知识点是读取配置文件,不是按照优先级去读取的,我们在学习 学习MySQL系列:2. MySQL配置项和配置文件 的时候,我们写过读取配置是按照优先级去读的,这个和知识点有点悖论,于是乎,准备探索一下。
资料梳理
按照资料所述,我们去读MySQL
配置文件的时候,是有逻辑规律的,可以使用命令mysql --help | grep my.cnf
来获取读取文件路径,当这些路径有多个文件的时候,我们是以最后一个文件为准,而非是按照优先级去读取的。
例如执行命令:
/home/mysql-source/bin/mysql --help | grep my.cnf
执行结果为如上,当我们/etc/my.cnf
和/home/mysql-source/etc/my.cnf
都存在的时候,它会先读/etc/my.cnf
然后再度/home/mysql-source/etc/my.cnf
,且以/home/mysql-source/etc/my.cnf
为准。
验证
那我们如何验证该问题呢? 我的想法是写多个my.cnf
放置到不同的目录下,其中有些许差异,我们再验证,我们读到了哪些配置文件,就可以了
我们实验下 我们在此路径都写一个my.cnf
。
配置文件如上,/etc/my.cnf
我们没有配置character_set_server
,所以是默认值,而/home/mysql-source/etc/my.cnf
最终character_set_server
是utf8mb4
所以,我们仅需要创建一个库,然后输出其字符编码,我们就知道是读取哪个文件了,就可以验证我们的猜想了。
我们启动MySQL
服务器,创建一个库,然后再看它的字符集,我们就明白是使用了哪个配置文件了。
我们发现,建库的字符编码是utf8mb4
,所以读取的配置是/home/mysql-source/etc/my.cnf
,而非/etc/my.cnf
。
总结
读取配置文件路径的方法,可以使用mysql --help | grep my.cnf
来获取,而读取结果并非以优先级去读取的,而是以有配置文件的最后一个为准,知识点,应该任何一个点都不能马虎,失之毫厘谬以千里,因为感觉是这样,所以想当然的写,则可能会出错,学习过程,不可马虎,要认真对待才行。