我运行的是MySQL 8.0.11社区版。我需要将sql_mode设置为在my.cnf中排除ONLY_FULL_GROUP_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_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] Abortingsql-模式
看起来mysqld处理模式并将'sql_mode‘或’sql- my.cnf‘转换为'sql_mode',然后将其拒绝!
问题是如何绕过这一点?
发布于 2019-01-03 02:03:31
MySQL 8.0中删除了SQL模式NO_AUTO_CREATE_USER,不再识别它。
https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-deprecations说:
删除了以下与帐户管理相关的功能:
使用GRANT创建用户的
CREATE USER。遵循此做法会使NO_AUTO_CREATE_USER SQL模式对GRANT语句无关紧要,因此也会将其删除。将sql_mode更改为"STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION“。我在我的8.0.11的沙箱实例上测试了它,它工作了。
sql-mode或sql_mode的拼写都可以。
使用引号或省略引号都可以。
发布于 2019-01-02 22:21:59
假设"restart safe“只是指永久的,语法是:
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模式,请在命令行上使用--sql-
=“modes”选项,或在选项文件中使用
sql-mode="modes",例如my.cnf (Unix操作系统)或my.ini (Windows)。modes是用逗号分隔的不同模式的列表。
如果它对你的不起作用,也许你把它放在了错误的部分。对于需要为[mysqld]的服务器设置,如下所示:
[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"发布于 2020-12-22 05:17:59
步骤1.检查sql模式:
mysql -u root -p -e "SELECT @@GLOBAL.sql_mode;"步骤2.在/etc/mysql/conf.d/目录下新建配置文件:
sudo nano /etc/mysql/conf.d/disable_strict_mode.cnf 在编辑器中输入以下文本:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION步骤3.重启MySQL:
sudo service mysql restart步骤4.确认更改:
mysql -u root -p -e "SELECT @@GLOBAL.sql_mode;"MySQL 8.0中删除了NO_AUTO_CREATE_USER SQL模式,请查看参考手册中的full list of SQL modes。
https://stackoverflow.com/questions/54007824
复制相似问题