今天,在测试我前面写的脚本的时候,在解析MySQL配置文件的时候遇到了问题;
如下:

上面的报错可以得出两个信息:

  1. 脚本中的配置文件:/etc/my.cnf,没有错;
  2. 对配置文件的读取,也没有问题

将上面返回的JSON数据放到校验工具(Bejson.com)中比对JSON格式的正确性:

看到了问题,有一个错误的解析【[mysql]=ENABLE】

去检查下配置文件:

因此,问题定位了:MySQL的配置文件中,多了一个组([mysql])的定义。

因此,对于我目前的Python脚本来说,配置文件中不应该存在重名的组。
注释其中重名的组的一个,则脚本执行的问题就可以解决。


下面,来看看关于配置文件的重名组的问题;

一:
这算不算一种配置文件的错误呢?
并不算;

因为,你的配置文件中,即使有重名组,MySQL的服务的启动依旧没有问题;
而你的配置文件中,如果配置了不存在的参数项,则启动MySQL服务的时候,会立即报错,服务无法启动;

二:
既然重名组不算错误,那么第二个问题就来了,对于重名的组,MySQL以哪个为准?
配置文件是顺序执行的,因此,后面的配置会覆盖前面的配置;
因此,对于重名组,MySQL会以,写在后面的配置为主。

具体验证,可以看看下面的过程:

首先,看看我的配置文件:

可以看到,上面配置文件中有,一个和mysqld同名的组配置;
为了验证,因此,其中不同的地方是server-id,一个是3,一个是4;

看看当前,我的MySQL的server-id的配置:

然后,重启数据库服务:

然后,再看看server-id的变化:

可以看到,server-id被修改成了4;

至此,关于MySQL配置文件中的重名组以哪一个为准的疑虑,就解决了。


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

隐藏
变装