前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小知识:MySQL配置文件优先级

小知识:MySQL配置文件优先级

作者头像
Alfred Zhao
发布2020-06-23 10:32:42
6740
发布2020-06-23 10:32:42
举报

今天在RHEL7上,严格按之前的安装规范文档,部署MySQL环境时,发现通过服务的方式启动MySQL失败: 关键错误是:

代码语言:javascript
复制
log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'.

规范的配置文件是:/etc/mysql/my.cnf,其中也有对应 log-error 参数的值,并不是上面错误提示的路径。 而且为何会有mariadb字样呢,猜测可能是RHEL7默认配套mariadb的原因,但是查询安装相关的rpm包,也未发现有mariadb的服务端。 最后对比发现,RHEL7默认的/etc/my.cnf有默认值,即使mariadb没有安装,而这个默认值里配置的 log-error 参数值正好匹配报错信息。 解决方案有两个:

  • 1.删掉/etc/my.cnf配置文件
  • 2.使用规范的参数配置,直接覆盖/etc/my.cnf配置文件

我这里选择了第二种方案,成功解决问题。

最后复盘时发现用:

代码语言:javascript
复制
mysql --help|more

可以看到参数文件的顺序是如下:

代码语言:javascript
复制
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 

也就是说优先级:/etc/my.cnf > /etc/mysql/my.cnf 但我们知道优先级低的配置文件因为最后被读到,如果有同一参数在不同配置文件中设置有差异,反而优先级低的配置文件,反而应该会覆盖之前优先级高的配置文件中的对应参数内容。 那么这又是怎么回事呢?

实际上仔细观察,会发现RHEL7中默认的my.cnf内容如下:

代码语言:javascript
复制
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

实际上log-error的配置是在标签[mysqld_safe]下,而不是[mysqld]下,而[mysqld_safe]标签下的内容在之后优先级低的配置文件中并没有再次设置; 换句话说,如果log-error在各个配置文件中,都是统一配置在[mysqld]下,就可以实现被后面优先级低的用户配置文件覆盖。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档