Я видел в SF, что в MySQL есть возможность регистрировать все запросы. Итак, в моей версии (mysql-server-5.0.45-7.el5 в CentOS 5.2) это, похоже, случай включения опции 'log', поэтому я отредактировал /etc/my.cnf
чтобы добавить это:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
old_passwords=
log=/var/log/mysql-general.log
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Затем я создал файл и установил разрешения:
# touch /var/log/mysql-general.log
# chown mysql. /var/log/mysql-general.log
# ls -l /var/log/mysql-general.log
-rw-r--r-- 1 mysql mysql 0 Jan 18 15:22 /var/log/mysql-general.log
Но когда я запускаю mysqld, я получаю:
120118 15:24:18 mysqld started
^G/usr/libexec/mysqld: File '/var/log/mysql-general.log' not found (Errcode: 13)
120118 15:24:18 [ERROR] Could not use /var/log/mysql-general.log for logging (error 13). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it.
120118 15:24:18 InnoDB: Started; log sequence number 0 182917764
120118 15:24:18 [Note] /usr/libexec/mysqld: ready for connections.
Может ли кто-нибудь подсказать, почему это не работает?
«Не найдено» звучит как проблема с разрешением, даже если вы дали mysql разрешение на касание этого конкретного файла, он может не иметь доступа к /var/log
. Попробуйте поместить файл журнала в папку данных mysql, /var/lib/mysql/
. Я пытаюсь вспомнить случай, когда когда-либо видел файлы журнала mysql за пределами этого пути ..
Если вы используете Ubuntu, вы можете нажать на это, если пытаетесь поместить файл журнала вне каталога mysql (например, / var / log / mysql). Чтобы исправить это, добавьте свой путь к /etc/apparmor.d/usr.sbin.mysqld.
Это обычная проблема, когда службы пишут на /var/log
. Обычный процесс при установке нового приложения с правами root - прикоснуться к новому файлу по имени, а затем передать этот файл пользователю / группе, которая будет писать в этот файл.
(Службы системного журнала обычно отказываются создавать новый файл журнала в / var / log, потому что сам каталог принадлежит пользователю root, поэтому службы, работающие не с правами root, не могут создавать новые файлы. После создания файла вручную процесс ротации журналов сохранит за вами ответственность и разрешения.)
IE:
корень $ touch /var/log/mysql_general.log
корень $ chown mysql.mysql /var/log/mysql_general.log
Это позволит службе mysqld выполнять запись в файл журнала, даже если эффективный идентификатор пользователя / идентификатор mysqld не является root. Вы можете проверить logrotate, чтобы настроить график ротации, если ваш не поддерживает его по умолчанию. Для получения дополнительной информации о разрешениях и передовых методах вы захотите изучить конфигурацию и обслуживание системного журнала.
(Я только что исправил ту же проблему на старом сервере, который унаследовал.)
(отредактировано, чтобы исправить опечатку и прояснить момент)
В / var / lib / mysql / mysql есть файл с именем general_log.csv, созданный по умолчанию. Вы также можете использовать этот файл для указания (например, log = / var / lib / mysql / mysql / general_log.csv)
Еще одна вещь, которую вы можете проверить, если вы уверены, что ваши права доступа к файлам верны, - это не мешает ли SELinux чему-либо.
Мы ввели SELinux в разрешающий режим, и внезапно MySQL смог создать файл журнала на отдельном монтировании, которое мы назначили для ведения журнала. В итоге нам пришлось настроить контекст пути к каталогу, в который мы хотели поместить журнал.