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
让它访问整个目录。
编辑:我可能已经找到问题的一部分,请在底部进一步编辑。
我有一个新的服务器设置 运行 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
让它访问整个目录。