美文网首页排雷日常
报错: [Warning] World-writable con

报错: [Warning] World-writable con

作者: 酸奶泡奥利奥 | 来源:发表于2022-12-13 16:27 被阅读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)
    
    

    相关文章

      网友评论

        本文标题:报错: [Warning] World-writable con

        本文链接:https://www.haomeiwen.com/subject/agqcqdtx.html