对 my.cnf 的更改未生效(Ubuntu 16.04,mysql 5.6)
Changes to my.cnf don't take effect (Ubuntu 16.04, mysql 5.6)
我对 my.cnf 所做的更改似乎对 mysql 环境没有任何影响。这是发生的事情的摘要...
我在 Ubuntu 16.04 上安装了 mysql 5.7,但后来意识到由于不兼容问题我需要降级到 mysql 5.6。
我清除了相关的应用程序,然后删除了所有剩余的目录,例如 /etc/mysql 和 /var/lib/mysql
然后我安装了mysql-5.6(服务器和客户端)和相关包。
我也能够从服务器的转储中加载一个数据库 运行ning mysql 5.6 但是当我尝试从同一服务器的第二个转储中加载第二个数据库时,我收到此错误:
ERROR 2006 (HY000) at line 1721: MySQL server has gone away
当我用谷歌搜索时,我看到结果说要通过 my.cnf 文件设置各种选项。
当我运行...
updatedb && locate my.cnf
...我只看到四个结果,它们都是指向同一个文件的链接:/etc/mysql/my.cnf.fallback。例如。 /etc/mysql/my.cnf.fallback == /etc/mysql/my.cnf
根主目录或我用户的主目录中都没有 .my.cnf 文件。我在 my.cnf 文件中输入了一个拼写错误并重新加载 mysql 只是为了查看预期的错误并知道文件正在加载。然后我删除了错误代码并添加了以下内容:
[mysqld]
max_allowed_packet=1073741824
然后我通过 运行ning 以各种方式重新加载 mysql:
service mysql restart
或
service mysql stop
service mysql start
或
/etc/init.d/mysql stop
/etc/init.d/mysql start
然后我不断得到这个默认值,表明它不是从 my.cnf:
设置的
mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
如果我这样做:
mysql> SET GLOBAL max_allowed_packet=1073741824;
然后注销并重新登录 mysql 客户端,我看到正确的值:
mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+------------+
| Variable_name | Value |
+--------------------+------------+
| max_allowed_packet | 1073741824 |
+--------------------+------------+
当然,如果我重新启动 mysql 服务器,该值将恢复。
我已经用尽了我的搜索能力。我可能做错了什么?
显然 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
这意味着 mysql 将在这些位置检查 my.cnf 文件。只需将 /etc/mysql/my.cnf.fallback
重命名为 /etc/mysql/my.cnf
:
mv /etc/mysql/my.cnf.fallback /etc/mysql/my.cnf
配置文件没问题。根本原因是 MySQL 5.6 包装中的错误 Ubuntu 16.04.
如果您检查 /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
名为 AppArmor 的安全工具拒绝访问符号链接文件 (/etc/mysql/my.cnf.fallback)。
试试这个解决方法,这将允许符号链接被 mysqld 读取。
echo '/etc/mysql/** lr,' >> /etc/apparmor.d/local/usr.sbin.mysqld
systemctl reload apparmor
现在 mysqld 应该可以看到您的自定义配置。
此错误似乎已在 MySQL 5.7 Ubuntu 软件包中修复。
我对 my.cnf 所做的更改似乎对 mysql 环境没有任何影响。这是发生的事情的摘要...
我在 Ubuntu 16.04 上安装了 mysql 5.7,但后来意识到由于不兼容问题我需要降级到 mysql 5.6。
我清除了相关的应用程序,然后删除了所有剩余的目录,例如 /etc/mysql 和 /var/lib/mysql
然后我安装了mysql-5.6(服务器和客户端)和相关包。
我也能够从服务器的转储中加载一个数据库 运行ning mysql 5.6 但是当我尝试从同一服务器的第二个转储中加载第二个数据库时,我收到此错误:
ERROR 2006 (HY000) at line 1721: MySQL server has gone away
当我用谷歌搜索时,我看到结果说要通过 my.cnf 文件设置各种选项。
当我运行...
updatedb && locate my.cnf
...我只看到四个结果,它们都是指向同一个文件的链接:/etc/mysql/my.cnf.fallback。例如。 /etc/mysql/my.cnf.fallback == /etc/mysql/my.cnf
根主目录或我用户的主目录中都没有 .my.cnf 文件。我在 my.cnf 文件中输入了一个拼写错误并重新加载 mysql 只是为了查看预期的错误并知道文件正在加载。然后我删除了错误代码并添加了以下内容:
[mysqld]
max_allowed_packet=1073741824
然后我通过 运行ning 以各种方式重新加载 mysql:
service mysql restart
或
service mysql stop
service mysql start
或
/etc/init.d/mysql stop
/etc/init.d/mysql start
然后我不断得到这个默认值,表明它不是从 my.cnf:
设置的mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
如果我这样做:
mysql> SET GLOBAL max_allowed_packet=1073741824;
然后注销并重新登录 mysql 客户端,我看到正确的值:
mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+------------+
| Variable_name | Value |
+--------------------+------------+
| max_allowed_packet | 1073741824 |
+--------------------+------------+
当然,如果我重新启动 mysql 服务器,该值将恢复。
我已经用尽了我的搜索能力。我可能做错了什么?
显然 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
这意味着 mysql 将在这些位置检查 my.cnf 文件。只需将 /etc/mysql/my.cnf.fallback
重命名为 /etc/mysql/my.cnf
:
mv /etc/mysql/my.cnf.fallback /etc/mysql/my.cnf
配置文件没问题。根本原因是 MySQL 5.6 包装中的错误 Ubuntu 16.04.
如果您检查 /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
名为 AppArmor 的安全工具拒绝访问符号链接文件 (/etc/mysql/my.cnf.fallback)。
试试这个解决方法,这将允许符号链接被 mysqld 读取。
echo '/etc/mysql/** lr,' >> /etc/apparmor.d/local/usr.sbin.mysqld
systemctl reload apparmor
现在 mysqld 应该可以看到您的自定义配置。
此错误似乎已在 MySQL 5.7 Ubuntu 软件包中修复。