对my.cnf的更改不生效(Ubuntu 16.04,mysql 5.6)

Ron*_*ins 3 mysql my.cnf mysql-5.6 ubuntu-16.04

我对my.cnf所做的更改似乎对mysql环境没有任何影响.这里是发生了什么的总结......

我在Ubuntu 16.04上安装了mysql 5.7但后来意识到由于不兼容问题我需要降级到mysql 5.6.

我apt清除了相关的应用程序,然后删除了/ etc/mysql和/ var/lib/mysql中的所有剩余目录

然后我安装了mysql-5.6(服务器和客户端)和相关的软件包.

我能够从运行mysql 5.6的服务器从转储加载一个数据库但是当我尝试从同一服务器的第二个转储加载第二个数据库时,我收到此错误:

ERROR 2006 (HY000) at line 1721: MySQL server has gone away
Run Code Online (Sandbox Code Playgroud)

当我用Google搜索时,我看到结果说要通过my.cnf文件设置各种选项.

当我跑...

updatedb && locate my.cnf
Run Code Online (Sandbox Code Playgroud)

...我只看到四个结果,这些结果都链接回同一个文件:/etc/mysql/my.cnf.fallback.例如/etc/mysql/my.cnf.fallback == /etc/mysql/my.cnf

根主目录或用户的主目录中没有.my.cnf文件.我把一个拼写错误输入my.cnf文件并重新加载mysql只是为了查看预期的错误并知道文件正在加载.然后我删除了错误的代码并添加了以下内容:

[mysqld]
max_allowed_packet=1073741824
Run Code Online (Sandbox Code Playgroud)

然后我通过各种方式运行重新加载mysql:

service mysql restart
Run Code Online (Sandbox Code Playgroud)

要么

service mysql stop
service mysql start
Run Code Online (Sandbox Code Playgroud)

要么

/etc/init.d/mysql stop
/etc/init.d/mysql start
Run Code Online (Sandbox Code Playgroud)

然后我继续得到这个默认值,表明它没有从my.cnf设置:

mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

mysql> SET GLOBAL max_allowed_packet=1073741824;
Run Code Online (Sandbox Code Playgroud)

并注销并返回到mysql客户端,我看到了正确的值:

mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+------------+
| Variable_name      | Value      |
+--------------------+------------+
| max_allowed_packet | 1073741824 |
+--------------------+------------+
Run Code Online (Sandbox Code Playgroud)

但是,当然,如果我重新启动mysql服务器,则值会恢复.

我已经用尽了我的搜索能力.我可能做错了什么?

mir*_*rza 9

显然my.cnf.fallback不是正确的配置文件.

如果您尝试此命令,您可以获取可能的my.cnf位置的输出:

$ which mysqld
/usr/sbin/mysqld

$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
Default options are read from the following files in the given order:
/etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf
Run Code Online (Sandbox Code Playgroud)

这意味着mysql将检查my.cnf文件的位置.只需重命名/etc/mysql/my.cnf.fallback/etc/mysql/my.cnf:

mv /etc/mysql/my.cnf.fallback /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)


Kee*_*eth 9

配置文件很好.根本原因是Ubuntu 16.04的MySQL 5.6包装中的一个错误.

如果检查/ var/log/syslog,您可能会看到如下所示的行:

Sep 15 18:56:09 ip-172-31-18-162 kernel: [  383.840275] audit: type=1400 audit(1505501769.234:50): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/etc/mysql/my.cnf.fallback" pid=25701 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
Run Code Online (Sandbox Code Playgroud)

名为AppArmor的安全工具拒绝访问符号链接文件(/etc/mysql/my.cnf.fallback).

尝试这种解决方法,这将允许mysqld读取符号链接.

echo '/etc/mysql/** lr,' >> /etc/apparmor.d/local/usr.sbin.mysqld
systemctl reload apparmor
Run Code Online (Sandbox Code Playgroud)

现在mysqld应该看到你的自定义配置.

这个错误似乎在MySQL 5.7 Ubuntu包中得到修复.

  • 哇,这个问题一直困扰着我,这终于成功了。非常感谢!!! (2认同)