Як бачити файли журналів у MySQL?


176

Я читав, що сервер Mysql створює файл журналу, де він зберігає запис про всі дії - наприклад, коли і які запити виконуються.

Хтось може сказати мені, де він існує у моїй системі? Як я можу це прочитати?

В основному, мені потрібно створити резервну копію бази даних з різними введеннями [резервне копіювання між двома датами], тому я думаю, що мені тут потрібно використовувати файл журналу, тому я хочу це зробити ...

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

У мене є кореневий доступ до системи, як я можу побачити журнал?

Коли я намагаюся відкрити /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. Consistst складається з "повільних" операторів SQL (як зазначено в його назві).

За замовчуванням у MYSQL не включені файли журналу. Усі помилки будуть показані в syslog ( /var/log/syslog).

Щоб увімкнути їх, просто виконайте наведені нижче дії.

step1: Перейдіть до цього файлу ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf ) і видаліть або прокоментуйте ці рядки.

step2: Перейдіть до файлу confq mysql (/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

Щоб увімкнути журнал повільних запитів, додайте наступне

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

step3: збережіть файл і перезапустіть mysql за допомогою наступних команд

service mysql restart

Щоб увімкнути журнали під час виконання, увійдіть до клієнта mysql ( mysql -u root -p) та надайте:

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

Зрештою, я хотів би тут зазначити одне, що я читав це з блогу . Дякую. Це працює для мене.

Натисніть тут, щоб відвідати блог


2
Я думаю, ніж ти «забув» написати деякі речі. Крок 1 є неповним, а в реченні посилання "блог" відсутнє
Athafoud

Привіт, @Athafoud, знайди посилання зараз.
loyola

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]. Коли я намагаюся почати з вашого конфігурації, сервер запускається, але мляво повільно і з помилками. Я дійсно здогадуюсь, що версії відрізняються, і в пізніших версіях оракул хотів уніфікувати імена змінних. Також: ІМХО 2 секунди не так вже й довго.
JackLeEmmerdeur

1
А як щодо дозволу на ці файли? Я бачив, у багатьох випадках файли журналів не створюються.
MagePsycho

42

Ви повинні активувати реєстрацію запитів у mysql.

  1. редагувати /etc/my.cnf

    [mysqld]
    log = / tmp / mysql.log
    
  2. перезавантажте комп'ютер або службу mysqld

    перезапуск служби mysqld
    
  3. відкрийте phpmyadmin / будь-яку програму, яка використовує консоль mysql / mysql та запустіть запит

  4. cat /tmp/mysql.log (ви повинні побачити запит)


не має значення, просто переконайтеся, що запит ведеться над db
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

Тож воно запам'ятається наступним разом.


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) і журнал був там :)


хоча це може працювати для вас, це не для мене, навіть основні винятки, такі як "Пошкоджений індекс", не заносяться. Лише проблеми із запуском та вимкненням.
користувач3338098

8

З довідкового посібника MySQL:

За замовчуванням усі файли журналу створюються в каталозі даних.

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


1
але я не в змозі відкрити папку mysql. Я думаю, що шлях до файлу журналу є /var/log/mysql/mysql.log, але я не в змозі його відкрити, що мені робити?
Арджун

2
як я заробляю собі root, я думаю, що я власник, я встановлюю сервер, я встановлюю пароль, тож я повинен бути власником, все ще він заблокований для мене, як я можу його відкрити?
Арджун

1
Я змусив CD в цей каталог (мені довелося створити root користувача, який я видалив пізніше), але, побачивши ці файли, я подумав, що вони зашифровані :) Тому я думаю, що це не гарний спосіб.
рядок

Скористайтеся, sudo -sтоді спробуйте перейти до папки mysql.
Рашедул Іслам

керівництво MySQL наповнене численними невідповідностями, в будь-якому випадку у Windows немає такого каталогу.
користувач3338098

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 пробіли, щоб забезпечити правильне форматування.
Politank-Z

1

Окрім наведених вище відповідей, ви можете передати параметри командного рядка до процедури mysqld для реєстрації параметрів замість того, щоб вручну редагувати ваш конф-файл. Наприклад, щоб увімкнути загальний журнал і вказати файл:

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

Підтверджуючи інші відповіді вище, mysqld --help --verboseдає вам значення з файлу conf (тому запуск із параметрами командного рядка general-log є ЛІЖНИМ); тоді як 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.