› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
SP00F
V2EX  ›  MySQL

很好奇, MySQL 可以加载多个 my.cnf 配置文件吗?

  •  
  •   SP00F · Jan 15, 2017 · 6348 views
    This topic created in 3543 days ago, the information mentioned may be changed or developed.

    这边因为项目上线,在 MySQL 5.5 以及 5.7 中测试过去了,但是线上 MySQL 版本为 5.6 执行失败

    Incorrect integer value: '' for column 'id' at row 1 [closed]
    

    原因是 sql_mode 设置了,但在 my.cnf 中配置时取消 sql_mode 发现仍未解决该问题。无奈只能临时 SET global sql_mode = '' 解决问题,随后用最笨的检查方式检索整个硬盘上的 my.cnf 文件,发现其中一个配置文件内容为

    # For advice on how to change settings please see
    # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
    
    [mysqld]
    
    # Remove leading # and set to the amount of RAM for the most important data
    # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
    # innodb_buffer_pool_size = 128M
    
    # Remove leading # to turn on a very important data integrity option: logging
    # changes to the binary log between backups.
    # log_bin
    
    # These are commonly set, remove the # and set as required.
    # basedir = .....
    # datadir = .....
    # port = .....
    # server_id = .....
    # socket = .....
    
    # Remove leading # to set options mainly useful for reporting servers.
    # The server defaults are faster for transactions and fast SELECTs.
    # Adjust sizes as needed, experiment to find the optimal values.
    # join_buffer_size = 128M
    # sort_buffer_size = 2M
    # read_rnd_buffer_size = 2M
    
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    

    将 sql_mode 行注释后解决该问题。

    该my.cnf位于 /usr/local/mysql/my.cnf 而实际使用的是 /etc/my.cnf。

    新手请教 MySQL 是可以加载多个 my.cnf 配置文件的吗?如何检查 MySQL 的配置文件加载都有哪些?以及加载顺序呢?

    16 replies  •  2017-01-16 08:55:56 +08:00
    BombayCat
        1
    BombayCat  
       Jan 15, 2017 via Android
    是有多个 my.cnf 的,不同位置的对应的作用域不一样
    SP00F
        2
    SP00F  
    OP
       Jan 15, 2017
    @BombayCat
    但是很好奇,按加载顺序是

    ````# mysql --help|grep 'my.cnf'
    order of preference, my.cnf, $MYSQL_TCP_PORT,
    /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf````

    发现并没有 `/usr/local/mysql/my.cnf` 作为检查顺序,就有加载这个 my.cnf 所以很好奇,按顺序查找 my.cnf 的话,不存在会加载 `/usr/local/mysql/my.cnf` 该配置文件吧。
    skydiver
        3
    skydiver  
       Jan 15, 2017 via Android
    既然是 /usr/local 说明是自己编译的,所以你需要 /usr/local/bin/mysql --help
    SP00F
        4
    SP00F  
    OP
       Jan 15, 2017
    @skydiver
    是的,查找顺序是 /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf

    但,并没有 /usr/local/mysql/my.cnf 所以我很懵逼。。。怎么会加载了一下这个 my.cnf
    wql
        5
    wql  
       Jan 15, 2017 via Android
    @SP00F include 指令?
    SP00F
        6
    SP00F  
    OP
       Jan 15, 2017
    @wql
    没有看到 include …… 不清楚是否在编译的时候加的。。。

    MySQL 启动时未指定 my.cnf 位置,是按照 MySQL 的查找顺序找到 my.cnf 运行的。
    skydiver
        7
    skydiver  
       Jan 15, 2017
    @SP00F /usr/local/bin/mysql --help 也是一样的输出?
    SP00F
        8
    SP00F  
    OP
       Jan 15, 2017
    @skydiver
    我的是 /usr/bin/mysql

    [root@localhost bin]# /usr/bin/mysql --help | grep 'cnf'
    order of preference, my.cnf, $MYSQL_TCP_PORT,
    /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf

    所以很奇怪拉。
    skydiver
        9
    skydiver  
       Jan 15, 2017
    @SP00F 并没有 /usr/local/bin/mysql ?那 /usr/local 里的配置文件哪来的?
    skydiver
        10
    skydiver  
       Jan 15, 2017
    @SP00F 你看的 /usr/bin/mysql 当然不会读取 /usr/local/ 里的配置文件了……

    你最好确定下你启动的 mysql 到底是哪个。如果你改了 /usr/local 的配置文件就好了,说明你启动的不是 /usr 里的那一份而是 /usr/local 里的那一份 mysql
    SP00F
        11
    SP00F  
    OP
       Jan 15, 2017
    @skydiver
    /usr/bin/mysql 是软链接,真实的是 /usr/local/mysql/bin/mysql

    现在怀疑的是 /etc/init.d/mysql 中的问题。会查找 --basedir 下的 my.cnf 也就是 /usr/local/mysql/my.cnf

    不过我好奇的是可以多个 my.cnf 加载的吗?
    skydiver
        12
    skydiver  
       Jan 15, 2017
    @SP00F 你可以直接 /usr/local/mysql/bin/mysql --help 看看,也许加载路径和输入的路径有关系

    加载多个 my.cnf 是可以的,你没看到你上面的输出就有 3 个吗 /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 按顺序加载的
    SP00F
        13
    SP00F  
    OP
       Jan 15, 2017
    @skydiver
    嗯,我检查过输出的几个配置文件,只有 /etc/my.cnf 存在,然后另外一个就是 /usr/local/mysql/my.cnf 了。

    按照一般启动方式,没有指定配置文件的话,是按照 /etc/mysql/my.cnf /etc/my.cnf 以及 ~/.mysql.cnf 加载的,启动的用户 mysql 的主目录也在 /home/mysql 所以没道理会加载 /usr/local/mysql/my.cnf 配置文件,唯一的解释就是在 /etc/init.d/mysql 中有设置了查找位置。
    SP00F
        15
    SP00F  
    OP
       Jan 16, 2017
    @msg7086 thanks
    noahzh
        16
    noahzh  
       Jan 16, 2017
    启动时候,指定使用某个 cnf 就可以了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2809 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 00:02 · PVG 08:02 · LAX 17:02 · JFK 20:02
    ♥ Do have faith in what you're doing.