Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使sql模式=";无“发动机替代”;MySQL my.cnf中的永久 更新固定1/18/15_Mysql - Fatal编程技术网

如何使sql模式=";无“发动机替代”;MySQL my.cnf中的永久 更新固定1/18/15

如何使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的标准服务器上)并添加配置设置来实

在我们最近更新到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"
    
i、 e.破折号,而不是下划线和引号

  • 除了/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"