编辑:我可能发现了问题的一部分,在底部进一步编辑。
我有一个新的服务器设置运行mysql一切似乎都很好。除非我使用show变量,否则我可以在.cnf文件中看到的配置设置不会显示,并且显示的是一般默认值。因此,当我可以正常使用mysql时,设置都是默认设置。
我想弄清楚为什么我的。cnf没有被使用。我已经采取了一些步骤来检查它是否正在加载,这些步骤如下所示。一旦我确定它正在加载,我就不知道如何解释为什么我的设置没有被使用。如有任何帮助,我将不胜感激。
我的cnf文件的位置是:
/etc/mysql/mysql.conf.d/mysqld.cnf
我已经尝试验证这是下面使用的:
sudo /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
默认选项按照给定顺序从以下文件中读取:
/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
是我希望它使用的配置文件。
所以我看不到问题,它看起来应该使用我的配置。
在第二次尝试验证是否使用了.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有一个叫做AppArmor的东西,一个内核集成控制应用程序如何访问的应用程序安全系统文件系统。来源:Oracle Article
如果你把。cnf放在一个自定义的位置,你需要给mysql访问该目录的权限。在我的情况下,我需要用以下内容编辑这个/etc/apparmor.d/local/usr.sbin.mysqld
:
/home/{my_username}/conf/mysqld.cnf r
你也可以使用:
/home/{my_username}/conf/* r