MySQL 在 Ubuntu 16.04 上未获取 5.7.13 中的符号链接 cnf 更改

MySQL not picking up symlinked cnf changes in 5.7.13 on Ubuntu 16.04

编辑:我可能已经找到问题的一部分,请在底部进一步编辑。

我有一个新的服务器设置 运行 mysql 一切似乎都很好。除了每当我使用 show variables 时,我在 .cnf 文件中看到的配置设置都没有显示,而显示的似乎是一般默认值。所以它会出现,而我可以使用 mysql 就好了,设置都是默认值。

我想弄清楚为什么我的 .cnf 没有被使用。我已经采取了许多步骤来检查它是否确实正在加载,这些步骤如下所示。一旦我确定它正在加载,我就不知道如何解释为什么我的设置没有被使用。任何帮助将不胜感激。

我的cnf文件的位置是这样的:

/etc/mysql/mysql.conf.d/mysqld.cnf

我已尝试验证以下内容是否正在使用它:

sudo /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"

Default options are read from the following files in the given order:

/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

/etc/my.cnf不存在

/etc/mysql/my.cnf/etc/alternatives/my.cnf

的符号链接

/etc/alternatives/my.cnf/etc/mysql/mysql.cnf

的符号链接

/etc/mysql/mysql.cnf 包含:

!includedir /etc/mysql/conf.d/

!includedir /etc/mysql/mysql.conf.d/

etc/mysql/conf.d/ 是一个包含以下内容的目录:

mysql.cnf

mysqldump.cnf

mysql.cnf 是空的,所以大概没有做任何事情

/etc/mysql/mysql.conf.d/ 是一个包含以下内容的目录:

mysqld.cnf

mysqld.cnf.dpkg-new

mysqld_safe_syslog.cnf

mysqld.cnf/home/{my_username}/conf/mysqld.cnf

的符号链接

/home/{my_username}/conf/mysqld.cnf 是我希望它使用的 conf 文件。

所以我看不到问题,它看起来应该使用我的配置。

在第二次尝试验证是否正在使用此 .cnf 时,我使用了 strace mysql。我的文件与上面列出的其他路径一起列出并打开。

stat("/etc/mysql/mysql.conf.d/mysqld.cnf", {st_mode=S_IFREG|0664, st_size=2262, ...}) = 0
open("/etc/mysql/mysql.conf.d/mysqld.cnf", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0664, st_size=2262, ...}) = 0
read(4, "# Generated by Percona Configura"..., 4096) = 2262
read(4, "", 4096)                       = 0
close(4)                          = 0 close(4)

再次看起来它应该使用 .cnf 文件。

任何人都可以提供任何关于为什么不是这样的见解吗?

编辑:我刚刚完成了 strace mysqld 而不是 strace mysql 并且我的 .cnf 文件出现权限错误。这可能是问题所在。但是我对 mysql 和 mysqld 之间的区别不太了解,谁能解释一下?

stat("/etc/mysql/mysql.conf.d/mysqld.cnf", {st_mode=S_IFREG|0664, st_size=3218, ...}) = 0
open("/etc/mysql/mysql.conf.d/mysqld.cnf", O_RDONLY) = -1 EACCES (Permission denied)

这是由 apparmor

引起并解决的

Ubuntu comes with something called AppArmor, a kernel-integrated application security system that controls how applications can access the file system. Source: Oracle Article

如果将 .cnf 放在自定义位置,则需要授予 mysql 访问该目录的权限。就我而言,我需要使用以下内容编辑此 /etc/apparmor.d/local/usr.sbin.mysqld

/home/{my_username}/conf/mysqld.cnf r

您还可以使用:

/home/{my_username}/conf/* r

让它访问整个目录。