重启后,Mysql恢复ONLY_FULL_GROUP_BY

时间:2017-02-10 09:02:28

标签: mysql

我按照this SO question的第二个回答来禁用全局选项 ONLY_FULL_GROUP_BY。

mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                                                |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)


mysql> SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Query OK, 0 rows affected (0,00 sec)


mysql> SELECT @@sql_mode;
+------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                             |
+------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)

我刚刚发现在重启mysql服务后,该选项已恢复。

这是我的环境

Server: Localhost via UNIX socket
MySQL 5.7.17-0ubuntu0.16.04.1 
Ubuntu 16.04

我认为它出现在其中一个配置文件中,但我无法找到它。你能指出我它位于何处或如何永久禁用它?

2 个答案:

答案 0 :(得分:3)

实测值:

我必须在/etc/mysql/mysql.conf.d/mysqld.cnf

中添加一个新行

[mysqld]部分的末尾,我添加了

sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后重新启动

sudo systemctl restart mysql

重新启动后,我的设置现在保留。

答案 1 :(得分:1)

您可以在此处列出的路径中找到(或创建)配置文件 - Using Option Files

在[mysqld]部分的配置文件中,您需要编写选项,例如:

[mysqld]
sql_mode=ONLY_FULL_GROUP_BY