无法将 SQL_MODE 设置为 Mysql 8

无法将 SQL_MODE 设置为 Mysql 8

我必须为我的服务器设置一个持久的自定义 SQL 模式。我在 /etc/mysql/mysql.conf.d/mysqld.cnf 中添加了此行

[mysqld]
...
sql-mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

当我尝试运行 mysql 时出现此错误:

2020-06-03T09:49:24.567568Z 0 [错误] [MY-000077] [服务器] /usr/sbin/mysqld:将值“STRICT_TRANS_TABLES、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION”设置为“sql_mode”时出错。mysqld Ver 8.0.20-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))

我尝试更改sql-modesql_mode并删除双引号,但没有改变。

答案1

只需编辑 /etc/mysql/my.conf,删除“NO_AUTO_CREATE_USER”。结果将是:

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

它对我有用!

答案2

sql_mode在不同的Linux环境中的行为存在一些限制。

相反,你应该卸载mysql它并替换为 玛拉雅数据库。mysql 服务器的一个非常好的替代品。(就您而言 - 这是 mysql 服务器,除了它的包名称)

卸载方法:

apt remove mysql mysqld mysql-server mysql-client
# note we do not purge this package, since we have databases with data in place.

现在安装 MariaDB -https://downloads.mariadb.org/mariadb/repositories/#distro=Ubuntu&distro_release=focal--ubuntu_focal&mirror=icm&version=10.4

有时,软件包维护者已经拥有 MariaDB。因此,这很简单:

apt install mariadb mariadb-server mariadb-client

我鼓励您事先使用或其他方式备份数据mysqldump。但请注意,安装后maraidb(只要它将使用相同的数据目录),您的所有数据库和表将继续正常工作。

答案3

在最新版本的 Ubuntu / Debian 中我正在修改该文件:
/lib/systemd/system/mysql.service

ExecStart=/usr/sbin/mysqld --sql-mode=NO_ENGINE_SUBSTITUTION

然后运行:

systemctl daemon-reload
systemctl restart mysql

对 *.cnf 文件的更改不产生任何效果

图片

答案4

对于我来说,这个问题通过删除前导逗号来解决

[mysqld]
sql_mode = ",STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

改为:

[mysqld]
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

相关内容