Ray*_*yCh 16 mysql sql-mode mysql-8.0
我正在运行 MySQL 8.0.11 社区版。我需要在 my.cnf 中设置 sql_mode 以排除 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"
Run Code Online (Sandbox Code Playgroud)
无论变量名为“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] Aborting
Run Code Online (Sandbox Code Playgroud)
sql模式
看起来mysqld 处理my.cnf 并将'sql_mode' 或'sql-mode' 转换为'sql_mode',然后它拒绝!
问题是如何解决这个问题?
Bil*_*win 34
SQL 模式NO_AUTO_CREATE_USER在 MySQL 8.0 中被删除,不再被识别。
https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-deprecations说:
删除了以下与帐户管理相关的功能:
- 使用
GRANT创建用户。相反,使用CREATE USER. 遵循这种做法会使NO_AUTO_CREATE_USERSQL 模式对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 的拼写都可以。
使用引号或省略引号都可以。
Dom*_*ico 12
步骤1.检查sql模式:
mysql -u root -p -e "SELECT @@GLOBAL.sql_mode;"
Run Code Online (Sandbox Code Playgroud)
步骤2.在/etc/mysql/conf.d/目录下创建新的配置文件:
sudo nano /etc/mysql/conf.d/disable_strict_mode.cnf
Run Code Online (Sandbox Code Playgroud)
在编辑器中输入以下文本:
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
Run Code Online (Sandbox Code Playgroud)
步骤3.重新启动MySQL:
sudo service mysql restart
Run Code Online (Sandbox Code Playgroud)
步骤 4. 确认更改:
mysql -u root -p -e "SELECT @@GLOBAL.sql_mode;"
Run Code Online (Sandbox Code Playgroud)
NO_AUTO_CREATE_USER SQL 模式已在 MySQL 8.0 中删除,请查看参考手册以获取SQL 模式的完整列表。
假设“重启安全”只是意味着永久,语法是:
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Run Code Online (Sandbox Code Playgroud)
要在服务器启动时设置 SQL 模式,请在命令行或
sql-mode="modes"my.cnf(Unix 操作系统)或 my.ini(Windows)等选项文件中使用 --sql-mode="modes" 选项。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"
Run Code Online (Sandbox Code Playgroud)
我还没有找到使用 my.cnf 解决该问题的方法。为了保证 mysqld 安全重启,我需要避免这样做:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Run Code Online (Sandbox Code Playgroud)
我发现解决这个问题的唯一方法是设置一个环境变量:
sudo systemctl set-environment MYSQLD_OPTS="--sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
sudo systemctl restart mysqld
Run Code Online (Sandbox Code Playgroud)
欢迎更好的解决方案。
| 归档时间: |
|
| 查看次数: |
21707 次 |
| 最近记录: |