MariaDB log_error系统变量,Ubuntu 20.04和22.04之间的配置文件区别

MariaDB log_error系统变量,Ubuntu 20.04和22.04之间的配置文件区别

Ubuntu 20.04(焦点窝)

# dpkg -l | grep mariadb-server-10
ii  mariadb-server-10.3             1:10.3.38-0ubuntu0.20.04.1        amd64        MariaDB database server binaries

# grep -E 'skip_log_error|syslog|log_error' /etc/mysql/ -R | grep -v '#'
/etc/mysql/mariadb.conf.d/50-server.cnf:log_error = /var/log/mysql/error.log
/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf:skip_log_error
/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf:syslog

# tail -2 /var/log/mysql/error.log
2023-07-28  8:30:23 0 [Note] /usr/sbin/mysqld: ready for connections.
Version: '10.3.38-MariaDB-0ubuntu0.20.04.1'  socket: '/run/mysqld/mysqld.sock'  port: 3306  Ubuntu 20.04

Ubuntu 22.04(Jammy Jellyfish)

# dpkg -l | grep mariadb-server-10
ii  mariadb-server-10.6             1:10.6.12-0ubuntu0.22.04.1

# grep -E 'skip_log_error|syslog|log_error' /etc/mysql/ -R | grep -v '#'
/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf:skip_log_error
/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf:syslog

# tail -2 /var/log/mysql/error.log
tail: cannot open '/var/log/mysql/error.log' for reading: No such file or directory

直到 Ubuntu 22.04,MariaDB 日志才被写入/var/log/mysql/error.log。由于log_error系统变量显然已从 Ubuntu 22.04 中删除/etc/mysql/mariadb.conf.d/50-server.cnf,因此情况不再如此。

  • 为什么log_error从配置文件中删除/etc/mysql/mariadb.conf.d/50-server.cnf
  • /var/log/mysql/error.log为什么尽管skip_log_error默认使用 日志文件,但在 Ubuntu 20.04 中仍会创建?
    • 我认为这是由于配置文件的处理顺序造成的,如果是这样,我在哪里可以看到它?

附注:
在安装 MariaDB 之前日志文件并不存在。

# ls /var/log/mysql/error.log
ls: cannot access '/var/log/mysql/error.log': No such file or directory
# dpkg -l | grep mariadb-server-10
# apt install mariadb-server
(...)
# dpkg -l | grep mariadb-server-10
ii  mariadb-server-10.3             1:10.3.38-0ubuntu0.20.04.1        amd64        MariaDB database server binaries
# ls /var/log/mysql/error.log
/var/log/mysql/error.log

答案1

你确定以前没有设置过log_error吗?

在 mariadb 中选择变量查看其值:

select @@log_error

我记得自从使用 systemd 以来,log_error 就默认为无值,因此错误日志被写入 STDOUT/STDERR,以便 systemd 可以捕获它。

您仍然可以使用 journalctl 读取日志数据:

journalctl -u mariadb.service

编辑:查看该文件,可以忽略它:

$ cat /etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf
# NOTE: THIS FILE IS READ ONLY BY THE TRADITIONAL SYSV INIT SCRIPT, NOT SYSTEMD.
# MARIADB SYSTEMD DOES _NOT_ UTILIZE MYSQLD_SAFE NOR READ THIS FILE.
#
# For similar behavior, systemd users should create the following file:
# /etc/systemd/system/mariadb.service.d/migrated-from-my.cnf-settings.conf
#
# To achieve the same result as the default 50-mysqld_safe.cnf, please create
# /etc/systemd/system/mariadb.service.d/migrated-from-my.cnf-settings.conf
# with the following contents:
# [Service]
# User = mysql
# StandardOutput = syslog
# StandardError = syslog
# SyslogFacility = daemon
# SyslogLevel = err
# SyslogIdentifier = mysqld
#
# For more information, please read https://mariadb.com/kb/en/mariadb/systemd/

答案2

log_errorMariaDB 在此处删除了系统变量:https://salsa.debian.org/mariadb-team/mariadb-server/-/commit/bb8477778b72f047437b2a03a2bd38997e155f10#d3b22343b539ed028e5c8bf973b769b861541893_63_62

尽管skip_log_error已配置,日志记录在 Ubuntu 20.04 中仍然有效的原因在于文件顺序。

相关内容