排雷日常

报错: [Warning] World-writable con

2022-12-13  本文已影响0人  酸奶泡奥利奥

mysql5.7中的sql_mode含有only_full_group_by,sql语句中含有groupby时,只能获取受到影响的字段信息,无法和其它未受影响的字段共存,这样之前老项目里有很多不规范的语法,改起来太麻烦,所以只能关闭only_full_group_by模式。

1.确认sql_mode的值

select @@sql_mode;

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)

可以看到查出来的值里有ONLY_FULL_GROUP_BY

2.去掉ONLY_FULL_GROUP_BY,重新设置新值

set @@sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

这种通过sql语句设置的sql_mode值只是临时的,如果mysql重启后则会又开启ONLY_FULL_GROUP_BY

永久生效需要修改my.cnf(windows下是my.ini)配置文件,把sql_mode设置成正确的

root@localhost:/xiannv/mysql/conf# cat my.cnf 
[mysqld]
user=mysql                     # MySQL启动用户
default-storage-engine=INNODB  # 创建新表时将使用的默认存储引擎
character-set-server=utf8      # 设置mysql服务端默认字符集
pid-file        = /var/run/mysqld/mysqld.pid  # pid文件所在目录
socket          = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字
datadir         = /var/lib/mysql              # 数据文件存放的目录
log-error      = /var/log/mysql/error.log
#bind-address   = 127.0.0.1                   # MySQL绑定IP
expire_logs_days=7                            # 定义清除过期日志的时间(这里设置为7天)
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等!


# 允许最大连接数
max_connections=200

# ================= ↓↓↓ mysql主从同步配置start ↓↓↓ =================
# 同一局域网内注意要唯一
server-id=1
# 开启二进制日志功能
log-bin=mysql-bin
# ================= ↑↑↑ mysql主从同步配置end ↑↑↑ =================

[client]
default-character-set=utf8  # 设置mysql客户端默认字符集

3.保存重启

重启发现ONLY_FULL_GROUP_BY模式仍然为开启状态,看日志后发现如下提示:

image.png
大概意思就是说权限是全局可写的,太高了,mysql对这种文件有保护机制,防止被其他用户恶意修改,所以给忽略掉了,导致my.cnf文件根本没生效,所以必须要修改权限才行

chmod 644 my.cnf

重启后发现问题解决

mysql> select @@sql_mode;
+----------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                         |
+----------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

上一篇下一篇

猜你喜欢

热点阅读