我必须为我的服务器设置一个持久的自定义 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-mode
为sql_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"