Как посмотреть файлы журнала в MySQL?

176

Я читал, что сервер Mysql создает файл журнала, где он хранит записи обо всех действиях - например, когда и какие запросы выполняются.

Кто-нибудь может сказать мне, где он существует в моей системе? Как я могу это прочитать?

По сути, мне нужно сделать резервную копию базы данных с разными данными [резервное копирование между двумя датами], поэтому я думаю, что мне нужно использовать файл журнала здесь, поэтому я хочу сделать это ...

Я думаю, что этот журнал должен быть как-то защищен, потому что конфиденциальная информация, такая как имена пользователей и пароли, может быть зарегистрирована [если какой-либо запрос требует этого]; так может ли он быть защищен, его не так легко увидеть?

У меня есть root-доступ к системе, как я могу увидеть журнал?

Когда я пытаюсь открыть /var/log/mysql.log, он пуст.

Это мой конфигурационный файл:

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
log = /var/log/mysql/mysql.log 
binlog-do-db=zero



user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking

bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1
Арджун
источник

Ответы:

164

Вот простой способ включить их. В mysql нам нужно часто видеть 3 журнала, которые в основном нужны при разработке любого проекта.

  • The Error Log, Он содержит информацию об ошибках, возникающих во время работы сервера (также запуск и остановка сервера)

  • The General Query Log, Это общая запись того, что делает mysqld (подключение, отключение, запросы)

  • The Slow Query Log, Он состоит из «медленных» операторов SQL (как указано в его имени).

По умолчанию никакие файлы журнала не включены в MYSQL. Все ошибки будут показаны в системном журнале ( /var/log/syslog).

Чтобы включить их, выполните следующие действия:

Шаг 1: Перейти к этому файлу ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf ) и удалите или прокомментируйте эту строку.

Шаг 2: Перейдите в mysql conf file ( /etc/mysql/my.cnf) и добавьте следующие строки

Чтобы включить журнал ошибок, добавьте следующее

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log

Чтобы включить общий журнал запросов, добавьте следующее

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Чтобы включить Slow Query Log, добавьте следующее

log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

шаг 3: сохраните файл и перезапустите mysql, используя следующие команды

service mysql restart

Чтобы включить журналы во время выполнения, войдите в mysql client ( mysql -u root -p) и введите :

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

Наконец, я хотел бы упомянуть одну вещь: я прочитал это из блога . Спасибо. Меня устраивает.

Нажмите здесь, чтобы посетить блог

Лойола
источник
2
Я думаю, что вы «забыли» написать некоторые вещи. Шаг 1 не завершен, и в предложении отсутствует ссылка «блог»
Athafoud
Привет @Athafoud, пожалуйста, найдите ссылку сейчас.
Лойола
3
В связанной статье блога упоминается изменение /etc/mysql/conf.d/mysqld_safe_syslog.cnfтолько в том случае, если должен быть включен журнал ошибок. Тем не менее, этот ответ, как он написан в настоящее время, кажется, предлагает его для любого журнала.
Мелебиус
2
Моя версия сервера 5.6.35. Ответ Росса Смита II здесь работает для меня. Я должен установить slow_query_log = 1;, slow_query_log_file = /var/log/mysql/mysql-slow-query.logи long_query_time = 60под [mysqld]. Когда я пытаюсь начать с вашей конфигурации, сервер запускается, но медленно и с ошибками. Я действительно предполагаю, что версии отличаются, и в более поздних версиях oracle хотел объединить имена переменных. Также: ИМХО 2 секунды не так уж и долго.
JackLeEmmerdeur
1
Как насчет разрешения на эти файлы? Я видел во многих случаях файлы журнала не создаются.
MagePsycho
42

Вы должны активировать ведение журнала запросов в MySQL.

  1. редактировать /etc/my.cnf

    [ТуздЫ]
    лог = / TMP / mysql.log
    
  2. перезагрузите компьютер или службу mysqld

    перезапуск службы mysqld
    
  3. откройте phpmyadmin / любое приложение, которое использует консоль mysql / mysql, и выполните запрос

  4. cat /tmp/mysql.log (вы должны увидеть запрос)

danidacar
источник
не имеет значения, просто убедитесь, что запрос выполняется через
базу данных
6
неверный путь. У вас /etc/my.cnf должно быть /etc/mysql/my.cnf
мистическая кола
39

Журналы MySQL определяются глобальными переменными, такими как:

  • log_error для журнала сообщений об ошибках;
  • general_log_fileдля общего файла журнала запросов (если включено general_log);
  • slow_query_log_fileдля файла журнала медленных запросов (если включен slow_query_log);

Чтобы увидеть настройки и их расположение, выполните команду оболочки:

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log

Чтобы напечатать значение журнала ошибок, выполните эту команду в терминале:

mysql -e "SELECT @@GLOBAL.log_error"

Чтобы прочитать содержимое файла журнала ошибок в реальном времени, выполните:

sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")

Примечание: Хит Control- Cкогда закончите

Когда общий журнал включен, попробуйте:

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")

Для использования mysqlс паролем доступа, добавить -pили -pMYPASSпараметр. Чтобы сохранить его в памяти, вы можете настроить его ~/.my.cnf, например,

[client]
user=root
password=root

Так что это запомнится в следующий раз.

kenorb
источник
1
Или, если вам нужно ввести пароль, попробуйте это: mysql -p -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log
Павел Чернох
9

В моем (у меня установлен LAMP) файле / etc / mysql /my.cnf я нашел следующие закомментированные строки в разделе [mysqld]:

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Я должен был открыть этот файл как супер пользователь с терминалом:

sudo geany /etc/mysql/my.cnf

(Я предпочитаю использовать Geany вместо gedit или VI, это не имеет значения)

Я просто раскомментировал их и сохранил файл, затем перезапустил mysql

sudo service mysql restart

Запустите несколько запросов, откройте вышеуказанный файл (/var/log/mysql/mysql.log) и журнал был там :)

Линия
источник
хотя это может работать для вас, это не для меня, даже основные исключения, такие как «Индекс поврежден», не регистрируются. Только проблемы запуска и выключения.
user3338098
8

Из справочного руководства по MySQL:

По умолчанию все файлы журнала создаются в каталоге данных.

Проверьте /var/lib/mysqlпапку.

Марк Ненадов
источник
1
но я не могу открыть папку MySQL. я думаю, что путь к файлу журнала /var/log/mysql/mysql.log, но я не могу открыть его, что мне делать?
Арджун
2
как я могу получить права root, я думаю, что я владелец, я устанавливаю сервер, я устанавливаю пароль, поэтому я должен быть владельцем, тем не менее, он заблокирован для меня, как я могу открыть его?
Арджун
1
Я ввел cd в этот каталог (мне пришлось создать пользователя root, который я удалил позже), но когда я увидел эти файлы, я подумал, что они зашифрованы :) Так что я думаю, что это не очень хороший способ.
Линия
используйте, sudo -sзатем попробуйте перейти в папку MySQL.
Рашедул Ислам
Руководство по MySQL наполнено многочисленными несоответствиями, в любом случае в Windows такого каталога нет.
user3338098
3

В дополнение к ответу loyola стоит упомянуть, что с MySQL 5.1 log_slow_queriesустарела и заменена наslow-query-log

Использование log_slow_queriesприведет к вашей service mysql restartили service mysql startсбой

Усама Ромдхан
источник
1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory
Тест
источник
7
Добро пожаловать в stackoverflow. Пожалуйста, рассмотрите возможность более подробного объяснения того, как код в вашем ответе имеет отношение к вопросу ОП. Кроме того, код должен иметь отступ в 4 пробела для правильного форматирования.
Политанк-Z
1

В дополнение к ответам выше, вы можете передать параметры командной строки процессу mysqld для регистрации параметров, вместо того, чтобы вручную редактировать файл conf. Например, чтобы включить общее ведение журнала и указать файл:

mysqld --general-log --general-log-file=/var/log/mysql.general.log

Подтверждая другие ответы выше, mysqld --help --verboseвыдает значения из файла conf (поэтому запуск с параметрами командной строки general-log - FALSE); тогда как mysql -se "SHOW VARIABLES" | grep -e log_error -e general_logдает:

general_log     ON
general_log_file        /var/log/mysql.general.log

Используйте немного более компактный синтаксис для журнала ошибок:

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log
br3w5
источник