1

编辑:我可能已经发现了问题的一部分,在底部进一步编辑。

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

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

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

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

我试图验证以下内容是否正在使用:

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

默认选项按给定顺序从以下文件中读取:

/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-新

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)
4

1 回答 1

0

这是由apparmor引起并解决的

Ubuntu 带有一个叫做 AppArmor 的东西,这是一个内核集成的应用程序安全系统,它控制应用程序如何访问文件系统。资料来源:甲骨文文章

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

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

您还可以使用:

/home/{my_username}/conf/* r

授予它访问整个目录的权限。

于 2016-09-26T15:47:36.243 回答