Я немного озадачен - я упускаю кое-что очевидное. Недавно я переключился с mySQL на mariaDB. Пока все работает - кроме лога, как я сегодня понял.
Все журналы mariaDB помещаются в /var/log/daemon.log-logfile вместо /var/log/mysql.log - и я не могу, хоть убей, понять почему.
Итак, согласно my.cnf mariadb
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
#
# we do want to know about network errors and such
log_warnings = 2
ведение журнала настраивается в /etc/mysql/conf.d/mysqld_safe_syslog.cnf. Этот файл содержит эту строку:
[mysqld_safe]
syslog
syslog-facility = mysql
Итак, хорошо - все должно быть хорошо, правда? Но ps -ef | grep logger показывает:
logger -t mysqld -p daemon.error
Ну и что? Зачем? Я правда не понимаю, зачем он забирает «демонический» объект? Ладно, копнув немного глубже - я нашел следующее. При попытке проверить ведение журнала, вызвав сам регистратор, я получаю следующее:
$> logger -p mysql.error test
logger: unknown facility name: mysql.
Хорошо, подумал я, хотя для меня это не имеет никакого смысла, просто пока используйте local1. Но при этом изменив значение в mysqld_safe_syslog.cnf на
syslog-facility = local1
ровно ничего не меняет:
$> ps -ef|grep logger
logger -t mysqld -p daemon.error
Я огляделась, но не нашла никакой достоверной информации по этой теме. Можете ли вы помочь мне? Как мне заставить mariadb регистрироваться в другом месте?
Что ж, это было несложно - мой скрипт инициализации сломался:
# priority can be overriden and "-s" adds output to stderr
ERR_LOGGER="logger -p daemon.err -t /etc/init.d/mysql -i"
Поменял и все нормально. Не подумал о том, чтобы на самом деле проверить скрипт инициализации ... ну ... в следующий раз;)
Для систем с systemd нам нужно будет установить переопределение для отправки журнала в syslog с помощью следующих директив
`[Service]
StandardOutput=syslog
StandardError=syslog
SyslogFacility=local5
SyslogLevel=err`
использовать systemctl edit mariadb
для редактирования запуска mariadb. Затем переместите все правила селектора из /etc/rsyslog.conf to /etc/rsyslog.d/rules.conf
(примечание: это позволяет избежать дублирования журналов из-за правил выбора rsyslog по умолчанию), внутри /etc/rsyslog.d/rules.conf установите следующее содержимое
#custom mariDB logging
if $syslogfacility-text == 'local5' or $programname == 'mysqld-scl-helper' or $programname == 'mysqld*' then {
action(type="omfile" file="/var/log/mariadb/mariadb-error.log")
action(type="omfwd" Target="syslogserver.com" Port="514" Protocol="tcp")
*.* stop
}
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none;local5.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
Наконец, вам нужно будет прокомментировать log-error
из конфигурации mariadb, поскольку она может помешать отправке полных сообщений журнала на удаленный сервер системного журнала.