如何使sql模式=";无“发动机替代”;MySQL my.cnf中的永久 更新固定1/18/15
在我们最近更新到MySQL 5.6.27(来自Ubuntu repo)之后,这个选项现在可以使用了。因此,这似乎是MySQL以前版本的一个问题 原始问题 对于MySQL(5.6.20)的新升级,除非我将sql模式设置为“无引擎替换”,否则更新和插入将失败 多亏了,我可以从mysql终端运行以下内容,从而修复了问题(暂时): 但下次MySQL重新启动时,这些设置将丢失 因此,我试图通过编辑/etc/mysql/my.cnf(在运行Ubuntu12.04.5 LTS的标准服务器上)并添加配置设置来实现这一点,配置设置应该添加:如何使sql模式=";无“发动机替代”;MySQL my.cnf中的永久 更新固定1/18/15,mysql,Mysql,在我们最近更新到MySQL 5.6.27(来自Ubuntu repo)之后,这个选项现在可以使用了。因此,这似乎是MySQL以前版本的一个问题 原始问题 对于MySQL(5.6.20)的新升级,除非我将sql模式设置为“无引擎替换”,否则更新和插入将失败 多亏了,我可以从mysql终端运行以下内容,从而修复了问题(暂时): 但下次MySQL重新启动时,这些设置将丢失 因此,我试图通过编辑/etc/mysql/my.cnf(在运行Ubuntu12.04.5 LTS的标准服务器上)并添加配置设置来实
[mysqld]
sql-mode="NO_ENGINE_SUBSTITUTION"
用于测试的替代语法
出于测试目的,我还尝试了以下格式(在重新启动MySQL时不会导致错误,但不会影响设置)
什么都不管用。重新启动后,此设置丢失,我必须再次从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
因此,/etc/mysql/my.cnf中的我的配置似乎是mysql引用的唯一文件,因此该设置不会被覆盖
测试的逻辑结论
从逻辑上讲,语法似乎不正确,或者由于其他原因被忽略。还有其他想法吗?您的服务器可能会读取与您正在编辑的不同的
my.cnf
(除非您在启动mysqld时指定)
从:
搜索顺序包括两个常规选项文件,/etc/my.cnf
和
$MYSQL\u HOME/my.cnf
。第二个文件仅在MYSQL\u HOME
已设置环境变量。通常,您会在MySQL上看到它
安装目录。(mysqld_safe脚本尝试设置
MYSQL\u HOME
如果在启动服务器之前未设置。)
选项文件搜索顺序还包括~/.my.cnf
(即主页
目录)。这不是一个特别适合服务器的位置
选项。(通常,您以mysql
或root
使用--user=mysql
选项。由
服务器将取决于您从哪个登录帐户调用它,
可能导致使用的选项集不一致。)
当然,另一种可能性是,您的sql模式
选项在同一文件中被进一步覆盖。多个选项必须在同一行中用,
分隔
附言:你需要报价,IIRC。现在您已经尝试了不带引号的方法,我很确定,您编辑了错误的文件,因为当选项文件中出现错误时,MySQL不会启动
p.p.S.:再看一下我的配置文件,它在那里
[mysqld]
sql_mode = "NO_ENGINE_SUBSTITUTION"
它正在工作。它应该是:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
而不是
[mysqld]
sql_mode="NO_ENGINE_SUBSTITUTION"
然后重新启动mysqld服务。解决方案非常简单。。。搜索了一会儿,结果发现您只需编辑2个配置文件:
/usr/my.cnf
/etc/mysql/my.cnf
[mysqld]
...
sql_mode=NO_ENGINE_SUBSTITUTION
至少,这是5.6.24-2+deb.sury.org~precise+2的工作原理。为了将我的配置添加到混合中,我使用的是MySQL 5.7.8,默认情况下,它具有相同的严格sql模式规则
- 我最终在my/etc/mysql/my.conf中实现了以下功能:
[mysqld] sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
- 除了/etc/mysql/my.conf之外,我没有其他my.conf文件
- 从/etc/mysql/conf.d/加载一些额外的配置包,但它们是空的
这似乎对我很有用。在ubuntu 16.04上对我来说很好。 路径:/etc/mysql/mysql.cnf
[mysqld]
sql_mode = "ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
然后把它贴上去
[mysqld]
#
# * Basic Settings
#
sql_mode = "NO_ENGINE_SUBSTITUTION"
如果您使用的是mariadb,则必须修改位于/etc/mysql/conf.d/中的mariadb.cnf文件
我想我的任何其他基于sql的解决方案都是一样的。在Linux Mint 18上,设置了
sql模式
选项的默认配置文件位于以下位置:
/usr/my.cnf
相关线路为:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
所以你可以在那里设置
如果不确定哪个配置文件具有此选项,您可以搜索它:
$ sudo find / -iname "*my.cnf*"
并获得一个列表:
/var/lib/dpkg/alternatives/my.cnf
/usr/my.cnf
/etc/alternatives/my.cnf
/etc/mysql/my.cnf.fallback
/etc/mysql/my.cnf
对我来说,这是一个许可问题 输入:
mysqld --verbose --help | grep -A 1 "Default options"
[警告]忽略世界可写配置文件'/etc/mysql/my.cnf'
因此,请尝试执行以下操作,然后重新启动服务器
chmod 644 '/etc/mysql/my.cnf'
它将允许mysql对文件进行读写操作。我的问题是5.7.20上的选项之间有空格。移除它们,使线条看起来像
[mysqld]
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
我正在运行WHM 10.2.15-MariaDB。要永久禁用strict模式,请首先确定安装首选的配置文件。为此,我们需要二进制文件的位置:
$ which mysqld
/usr/sbin/mysqld
然后,我们使用此路径执行查找:
$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
我们可以看到,第一个首选配置文件位于etc文件夹的根目录中,但第二个.cnf文件隐藏-~/.my.cnf。将以下内容添加到~/.my.cnf文件中会永久禁用我的严格模式(需要在mysqld部分中):
我发现在/etc/my.cnf中添加这一行除了让我发疯之外根本没有任何效果 [固定]
服务器版本
$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
# dash no quotes
sql-mode=NO_ENGINE_SUBSTITUTION
# underscore no quotes
sql_mode=NO_ENGINE_SUBSTITUTION
[mysqld]
sql_mode = "ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"