我正在运行mysql 8.0.11社区版。我需要在my.cnf中将sql模式设置为只排除\u full\u group\u by,这样就可以安全地重新启动。我尝试了以下变体:
sql_mode= STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sql-mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql-mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
无论变量名为'sql\u mode'还是'sql mode',它们都以相同的方式失败:
mysqld --verbose --help | grep "sql[-_]mode"
2018-06-19T15:22:51.667734Z 0 [ERROR] [MY-011071] [Server] /usr/sbin/mysqld: Error while setting value 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' to 'sql_mode'
--sql-mode=name Syntax: sql-mode=mode[,mode[,mode...]]. See the manual
2018-06-19T15:22:51.675498Z 0 [ERROR] [MY-010119] [Server] Aborting
sql模式
似乎mysqld处理my.cnf并将'sql\u mode'或'sql mode'转换为'sql\u mode',然后拒绝!
问题是如何解决这个问题?
8条答案
按热度按时间qlfbtfca1#
假设“restart safe”只是永久的意思,语法是:
通过设置sql模式:
要在服务器启动时设置sql模式,请使用命令行上的--sql mode=“modes”选项,或者
sql-mode="modes"
在选项文件中,如my.cnf(unix操作系统)或my.ini(windows)。modes
是由逗号分隔的不同模式的列表。如果它不适用于你的,也许你把它放在错误的部分。对于需要
[mysqld]
,例如:gab6jxml2#
我只是发现这个选项与my.cnf中的“no\u auto\u create\u user”不兼容。这可能与某些设置冲突。
下面这行代码在mysql 8中适用于我。
[mysqld]sql mode=“严格的\u事务\u表,没有\u zero \u in \u date,没有\u zero \u date,错误\u for \u division \u by \u zero,没有\u引擎\u替换”
ac1kyiln3#
编辑
my.cnf
没有使用mysql 8。所以我想出了一个解决办法。我在ubuntu20.04中使用mysql 8我创建了一个文件
/etc/mysql/mysqlmode.sql
:接下来,我编辑了
/etc/mysql/my.cnf
并在末尾添加了以下代码行:xwmevbvl4#
在ubuntu/debian的最新版本中,我正在修改这个文件
/lib/systemd/system/mysql.service
使用:之后,只执行:
更改为
*.cnf
文件不起任何作用。vjhs03f75#
第一步。检查sql模式:
第二步。在/etc/mysql/conf.d/目录下创建一个新的配置文件:
在编辑器中输入以下文本:
第三步。重新启动mysql:
第四步。确认更改:
MySQL8.0中没有删除自动创建用户sql模式,请查看参考手册中sql模式的完整列表。
qoefvg9y6#
我还没有找到解决这个问题的方法使用我的.cnf。为了保证mysqld重启安全,我需要避免执行以下操作:
我发现解决这个问题的唯一方法是设置一个环境变量:
欢迎更好的解决方案。
00jrzges7#
sql模式
NO_AUTO_CREATE_USER
在MySQL8.0中被删除,不再被识别。https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-简而言之,反对者说:
以下与帐户管理相关的功能将被删除:
使用
GRANT
创建用户。相反,使用CREATE USER
. 遵循这一做法NO_AUTO_CREATE_USER
sql模式对于GRANT
语句,所以它也被删除。将sql模式更改为“strict\u trans\u tables,no\u zero\u in\u date,no\u zero\u date,error\u for\u division\u by\u zero,no\u engine\u substitution”。我在我的8.0.11沙盒示例上测试了它,它成功了。
sql模式或sql\ U模式的拼写都可以。
使用引号或省略引号都可以。
yyyllmsg8#
至于macos catalina,我使用mysqlworkbench在“server/status and../=>system variables and search sql\u mode”中关闭“persist”复选框,如果不执行该操作,它将忽略my.cnf设置/
那是我的:[mysqld]sql\u mode=“严格的\u事务表,没有\u zero\u在\u日期,没有\u zero\u日期,错误\u除以\u zero,没有\u引擎\u替换”