更新已修复 1/18/15
最近我们从Ubuntu存储库升级到MySQL 5.6.27后,此选项现在可用。因此,这似乎是先前版本的MySQL存在的问题。
原问题
在升级到MySQL(5.6.20)后,如果我不将sql-mode设置为NO_ENGINE_SUBSTITUTION,则更新和插入会失败。
感谢文档,我可以从mysql终端运行以下命令来解决问题(暂时性):
SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';`
但是下一次MySQL重启时,这些设置将会丢失。
因此,我尝试通过编辑/etc/mysql/my.cnf(在我的标准服务器上运行Ubuntu 12.04.5 LTS),添加文档中建议添加的配置设置,使其永久化。
[mysqld]
sql-mode="NO_ENGINE_SUBSTITUTION"
测试的替代语法
仅供测试目的,我还尝试了以下格式(在重新启动MySQL时不会导致错误,但它们不会影响设置)。
# dash no quotes
sql-mode=NO_ENGINE_SUBSTITUTION
# underscore no quotes
sql_mode=NO_ENGINE_SUBSTITUTION
# underscore and quotes
sql_mode="NO_ENGINE_SUBSTITUTION"
什么都不起作用。重新启动后,此设置将丢失,我必须再次从MySQL终端手动运行命令以使保存工作正常。
备选位置
- 我知道/etc/mysql/my.cnf正在被引用,因为我们在该文件中定义了复制,并且它正在工作。
- 在此文件中没有另一个相同的设置正在覆盖它。
通过从命令行运行以下内容,我可以获取被引用的配置文件列表:
mysqld --help --verbose
我看到一行字,它写着:
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
这是它“查找”文件时的默认位置,这并不意味着它实际上在那里找到了文件,例如我的服务器没有/etc/my.cnf
、/usr/etc/my.cnf
或~/.my.cnf
。
因此,看起来mysql只引用了/etc/mysql/my.cnf中的配置文件,因此此设置未被覆盖。
测试的逻辑结论
因此,逻辑上讲,语法不正确或由于其他原因被忽略。有其他想法吗?