这边因为项目上线,在 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 的配置文件加载都有哪些?以及加载顺序呢?
1
BombayCat 2017-01-15 19:56:57 +08:00 via Android
是有多个 my.cnf 的,不同位置的对应的作用域不一样
|
2
SP00F OP @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` 该配置文件吧。 |
3
skydiver 2017-01-15 20:03:39 +08:00 via Android
既然是 /usr/local 说明是自己编译的,所以你需要 /usr/local/bin/mysql --help
|
4
SP00F OP @skydiver
是的,查找顺序是 /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 但,并没有 /usr/local/mysql/my.cnf 所以我很懵逼。。。怎么会加载了一下这个 my.cnf |
6
SP00F OP |
8
SP00F OP @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 所以很奇怪拉。 |
10
skydiver 2017-01-15 20:40:05 +08:00
@SP00F 你看的 /usr/bin/mysql 当然不会读取 /usr/local/ 里的配置文件了……
你最好确定下你启动的 mysql 到底是哪个。如果你改了 /usr/local 的配置文件就好了,说明你启动的不是 /usr 里的那一份而是 /usr/local 里的那一份 mysql |
11
SP00F OP @skydiver
/usr/bin/mysql 是软链接,真实的是 /usr/local/mysql/bin/mysql 现在怀疑的是 /etc/init.d/mysql 中的问题。会查找 --basedir 下的 my.cnf 也就是 /usr/local/mysql/my.cnf 不过我好奇的是可以多个 my.cnf 加载的吗? |
12
skydiver 2017-01-15 20:53:31 +08:00
@SP00F 你可以直接 /usr/local/mysql/bin/mysql --help 看看,也许加载路径和输入的路径有关系
加载多个 my.cnf 是可以的,你没看到你上面的输出就有 3 个吗 /etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 按顺序加载的 |
13
SP00F OP @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 中有设置了查找位置。 |
14
msg7086 2017-01-16 04:26:21 +08:00
|
16
noahzh 2017-01-16 08:55:56 +08:00
启动时候,指定使用某个 cnf 就可以了。
|