[英]How can I get emacs sql-mode to use the mysql config file (.my.cnf)?
[英]How to make sql-mode=“NO_ENGINE_SUBSTITUTION” permanent in MySQL my.cnf
在我们最近更新到 MySQL 5.6.27(来自 Ubuntu 存储库)之后,这个选项现在可以工作了。 所以这似乎是以前版本的 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 终端手动运行命令才能再次保存。
通过从命令行运行它,我得到了被引用的配置文件的列表:
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 引用的唯一文件,因此这个设置不会被覆盖。
从逻辑上讲,语法似乎不正确或由于其他原因被忽略。 还有其他想法吗?
只是为了将我的配置添加到组合中,我使用的是 MySQL 5.7.8,默认情况下它具有相同的严格 sql_mode 规则。
我终于在我的 /etc/mysql/my.conf 中找到了以下工作:
[mysqld] sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
即破折号,而不是下划线和值周围的引号。
除了 /etc/mysql/my.conf 之外,我没有其他 my.conf 文件
有一些额外的配置包括从 /etc/mysql/conf.d/ 加载,但它们是空白的。
这似乎对我有用。
您的服务器读取的my.cnf
可能与您正在编辑的不同(除非您在启动 mysqld 时指定了它)。
来自MySQL 认证学习指南:
搜索顺序包括两个通用选项文件,
/etc/my.cnf
和$MYSQL_HOME/my.cnf
。 仅当设置了MYSQL_HOME
环境变量时才使用第二个文件。 通常,您将其设置为 MySQL 安装目录。 (如果在启动服务器之前没有设置MYSQL_HOME
,mysqld_safe 脚本会尝试设置它。)选项文件搜索顺序还包括~/.my.cnf
(即主目录)。 这不是服务器选项特别合适的位置。 (通常,您以mysql
或root
身份调用服务器并使用--user=mysql
选项。服务器读取的特定于用户的文件将取决于您从哪个登录帐户调用它,这可能会导致选项集不一致用过的。)
当然,另一种可能性是,您的sql-mode
选项在同一文件中被进一步覆盖。 多个选项必须在同一行中用,
分隔。
PS:你需要引号,IIRC。 现在你已经尝试了它没有引号,我很确定,你正在编辑错误的文件,因为在选项文件中没有错误时,MySQL不会启动。
PPS:再次查看我的配置文件,它在那里
[mysqld]
sql_mode = "NO_ENGINE_SUBSTITUTION"
它正在工作。
它应该是:
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
代替
[mysqld]
sql_mode="NO_ENGINE_SUBSTITUTION"
然后重启mysqld服务。
在 ubuntu 16.04 上对我来说很好。 路径:/etc/mysql/mysql.cnf
并粘贴
[mysqld]
#
# * Basic Settings
#
sql_mode = "NO_ENGINE_SUBSTITUTION"
对我来说,这是一个许可问题。
进入:
mysqld --verbose --help | grep -A 1 "Default options"
[警告] 世界可写的配置文件 '/etc/mysql/my.cnf' 被忽略。
于是尝试执行以下,然后重启服务器
chmod 644 '/etc/mysql/my.cnf'
它将授予 mysql 读取和写入文件的权限。
在Linux Mint 18 上,设置了sql-mode
选项的默认配置文件位于此处:
/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
我的问题是我在 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
解决方案很简单......搜索了一段时间,结果你只需要编辑2个配置文件:
/usr/my.cnf
/etc/mysql/my.cnf
在这两个文件中,您必须添加:
[mysqld]
...
sql_mode=NO_ENGINE_SUBSTITUTION
至少,这适用于 5.6.24-2+deb.sury.org~precise+2
对我来说, sql-mode
两个键都有效。 我是否使用过
# dash no quotes
sql-mode=NO_ENGINE_SUBSTITUTION
或者
# underscore no quotes
sql_mode=NO_ENGINE_SUBSTITUTION
在my.ini
文件中没有任何区别,两者都被接受,就我可以测试而言。
实际上有所不同的是my.ini
文件末尾缺少换行符。
所以每个人都遇到这个问题或my.ini
/ my.cnf
类似问题:确保文件末尾有一个空行!
使用 MySQL 5.7.27 测试。
如果您使用的是 mariadb,则必须修改位于 /etc/mysql/conf.d/ 中的 mariadb.cnf 文件。
我想这些东西对于任何其他基于 mysql 的解决方案都是一样的。
我正在运行 WHM 10.2.15-MariaDB。 要永久禁用严格模式,首先要找出我们的安装更喜欢哪个配置文件。 为此,我们需要二进制文件的位置:
$ 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 部分中):
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION
我发现将这一行添加到 /etc/my.cnf 除了让我发疯之外根本没有任何影响。
这也让我发疯,直到我意识到关键所在的段落是 [mysqld] 而不是 [mysql]
所以,对于 10.3.22-MariaDB-1ubuntu1,我的解决方案是,在 /etc/mysql/conf.d/mysql.cnf
[mysqld]
sql_mode = "ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
[已修复] 服务器版本:10.1.38-MariaDB - mariadb.org 二进制分发
转到:C:\\xampp\\mysql\\bin 在记事本中打开 my.ini 并找到 [mysqld](第 27 行)然后在此行(第 28 行)之后输入:skip-grant-tables
保存文件,然后重新加载 phpmyadmin 页面。它对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.