Làm thế nào để xem tập tin nhật ký trong MySQL?


176

Tôi đã đọc rằng máy chủ Mysql tạo một tệp nhật ký nơi nó lưu giữ một bản ghi của tất cả các hoạt động - như khi nào và những truy vấn nào thực thi.

Ai đó có thể cho tôi biết nó tồn tại ở đâu trong hệ thống của tôi không? Làm thế nào tôi có thể đọc nó?

Về cơ bản, tôi cần sao lưu cơ sở dữ liệu với đầu vào khác nhau [sao lưu giữa hai ngày] vì vậy tôi nghĩ rằng tôi cần sử dụng tệp nhật ký ở đây, đó là lý do tại sao tôi muốn làm điều đó ...

Tôi nghĩ nhật ký này phải được bảo mật bằng cách nào đó vì thông tin nhạy cảm như tên người dùng và mật khẩu có thể được ghi lại [nếu có bất kỳ truy vấn nào yêu cầu điều này]; Vì vậy, nó có thể được bảo mật, không dễ dàng có thể được nhìn thấy?

Tôi có quyền truy cập root vào hệ thống, làm thế nào tôi có thể xem nhật ký?

Khi tôi cố gắng mở /var/log/mysql.log thì nó trống.

Đây là tập tin cấu hình của tôi:

[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

Câu trả lời:


164

Đây là một cách đơn giản để kích hoạt chúng. Trong mysql chúng ta cần xem thường xuyên 3 bản ghi hầu hết cần thiết trong quá trình phát triển dự án.

  • The Error Log. Nó chứa thông tin về các lỗi xảy ra trong khi máy chủ đang chạy (cũng là khởi động và dừng máy chủ)

  • The General Query Log. Đây là một bản ghi chung về những gì mysqld đang làm (kết nối, ngắt kết nối, truy vấn)

  • The Slow Query Log. Ιt bao gồm các câu lệnh SQL "chậm" (như được chỉ định bởi tên của nó).

Theo mặc định, không có tệp nhật ký nào được bật trong MYSQL. Tất cả các lỗi sẽ được hiển thị trong syslog ( /var/log/syslog).

Để kích hoạt chúng, chỉ cần làm theo các bước dưới đây:

bước 1: Chuyển đến tệp này ( /etc/mysql/conf.d/mysqld_safe_syslog.cnf ) và xóa hoặc nhận xét các dòng đó.

step2: Chuyển đến tập tin conf mysql ( /etc/mysql/my.cnf) và thêm các dòng sau

Để bật nhật ký lỗi, thêm vào sau

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

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

Để kích hoạt nhật ký truy vấn chung, hãy thêm vào sau

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

Để bật Nhật ký truy vấn chậm, hãy thêm vào sau

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

Bước 3: lưu tệp và khởi động lại mysql bằng các lệnh sau

service mysql restart

Để kích hoạt nhật ký khi chạy, hãy đăng nhập vào máy khách mysql ( mysql -u root -p) và cung cấp:

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

Cuối cùng, một điều tôi muốn đề cập ở đây là tôi đã đọc nó từ một blog . Cảm ơn. Nó làm việc cho tôi.

Nhấn vào đây để truy cập blog


2
Tôi nghĩ rằng bạn "quên" viết một số điều. Bước 1 không đầy đủ và câu liên kết 'blog' bị thiếu
Athafoud

Xin chào, @Athafoud, vui lòng tìm liên kết ngay bây giờ.
loyola

3
Bài viết blog được liên kết đề cập đến sửa đổi /etc/mysql/conf.d/mysqld_safe_syslog.cnfchỉ khi bật nhật ký lỗi. Tuy nhiên, câu trả lời này vì nó hiện được viết dường như gợi ý nó cho bất kỳ nhật ký nào.
Melebius

2
Phiên bản máy chủ của tôi là 5.6,35. Câu trả lời của Ross Smith II ở đây làm việc cho tôi. Tôi phải thiết lập slow_query_log = 1;, slow_query_log_file = /var/log/mysql/mysql-slow-query.loglong_query_time = 60dưới [mysqld]. Khi tôi cố gắng bắt đầu với cấu hình của bạn, máy chủ đang khởi động, nhưng chậm chạp và có lỗi. Tôi thực sự đoán các phiên bản khác nhau và trong các phiên bản sau, nhà tiên tri muốn thống nhất tên biến. Ngoài ra: IMHO 2 giây không dài lắm.
JackLeEmmerdeur

1
Điều gì về sự cho phép trên các tập tin? Tôi đã thấy trong nhiều trường hợp các tệp nhật ký không được tạo.
MagePologistso

42

Bạn phải kích hoạt đăng nhập truy vấn trong mysql.

  1. chỉnh sửa /etc/my.cnf

    [mysqld]
    log = / tmp / mysql.log
    
  2. khởi động lại máy tính hoặc dịch vụ mysqld

    khởi động lại dịch vụ mysqld
    
  3. mở phpmyadmin / bất kỳ ứng dụng nào sử dụng bảng điều khiển mysql / mysql và chạy truy vấn

  4. cat /tmp/mysql.log (bạn sẽ thấy truy vấn)


không thành vấn đề, chỉ cần đảm bảo một truy vấn được chạy trên db
danidacar

6
con đường không hợp lệ. Bạn có /etc/my.cnf nên là /etc/mysql/my.cnf
cola huyền bí

39

Nhật ký MySQL được xác định bởi các biến toàn cục như:

  • log_error cho nhật ký thông báo lỗi;
  • general_log_filecho tệp nhật ký truy vấn chung (nếu được bật bởi general_log);
  • slow_query_log_filecho tệp nhật ký truy vấn chậm (nếu được bật bởi slow_query_log);

Để xem các cài đặt và vị trí của chúng, hãy chạy lệnh shell này:

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

Để in giá trị của nhật ký lỗi, hãy chạy lệnh này trong thiết bị đầu cuối:

mysql -e "SELECT @@GLOBAL.log_error"

Để đọc nội dung của tệp nhật ký lỗi trong thời gian thực, hãy chạy:

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

Lưu ý: Lượt truy cập Control- Ckhi kết thúc

Khi nhật ký chung được bật, hãy thử:

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

Để sử dụng mysqlvới quyền truy cập mật khẩu, thêm -phoặc -pMYPASStham số. Để giữ cho nó được ghi nhớ, bạn có thể định cấu hình nó trong ~/.my.cnf, vd

[client]
user=root
password=root

Vì vậy, nó sẽ được ghi nhớ cho lần tiếp theo.


1
Hoặc nếu bạn cần nhập mật khẩu, hãy thử điều này: mysql -p -se "SHOW VARIABLES" | grep -e log_error -e general_log -e Slow_query_log
Paul Chernoch

9

Trong tệp (tôi đã cài đặt LAMP) / etc / mysql /my.cnf tôi đã tìm thấy sau đây, các dòng nhận xét trong phần [mysqld]:

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

Tôi đã phải mở tệp này với tư cách là siêu người dùng, với thiết bị đầu cuối:

sudo geany /etc/mysql/my.cnf

(Tôi thích sử dụng Geany thay vì gedit hoặc VI, không thành vấn đề)

Tôi chỉ bỏ sót chúng và lưu tệp sau đó khôi phục lại mysql với

sudo service mysql restart

Chạy một số truy vấn, mở tệp ở trên (/var/log/mysql/mysql.log) và nhật ký đã ở đó :)


mặc dù nó có thể phù hợp với bạn, nhưng nó không phù hợp với tôi, ngay cả những trường hợp ngoại lệ lớn như "Index bị hỏng" cũng không được đăng nhập. Chỉ có vấn đề khởi động và tắt máy.
dùng3338098

8

Từ hướng dẫn tham khảo MySQL:

Theo mặc định, tất cả các tệp nhật ký được tạo trong thư mục dữ liệu.

Kiểm tra /var/lib/mysqlthư mục.


1
nhưng tôi không thể mở thư mục mysql. Tôi nghĩ đường dẫn của tệp nhật ký là /var/log/mysql/mysql.log nhưng tôi không thể mở nó, tôi phải làm sao?
Arjun

2
Làm thế nào để tôi tự root, tôi nghĩ tôi là chủ sở hữu, tôi cài đặt máy chủ, tôi đặt mật khẩu, vì vậy tôi phải là chủ sở hữu, nó vẫn bị khóa đối với tôi, làm thế nào tôi có thể mở nó?
Arjun

1
Tôi đã buộc cd vào thư mục này (tôi phải tạo người dùng root, tôi đã xóa sau này), nhưng khi tôi nhìn thấy các tập tin này, tôi nghĩ rằng chúng được mã hóa :) Vì vậy tôi nghĩ đó không phải là một cách tốt.
Dòng

sử dụng sudo -ssau đó cố gắng đi đến thư mục mysql.
Rashul Hồi giáo

hướng dẫn sử dụng MySQL chứa rất nhiều mâu thuẫn, dù bằng cách nào thì không có thư mục nào như vậy trên windows.
dùng3338098

3

Để bổ sung cho câu trả lời của loyola , điều đáng nói là kể từ khi MySQL 5.1 log_slow_queriesbị phản đối và được thay thế bằngslow-query-log

Sử dụng log_slow_queriessẽ khiến bạn service mysql restarthoặc service mysql startthất bại


1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory

7
Chào mừng đến với stackoverflow. Vui lòng xem xét đưa ra nhiều lời giải thích về cách mã trong câu trả lời của bạn có liên quan đến câu hỏi của OP. Ngoài ra, mã phải được thụt vào bởi 4 khoảng trắng để cho phép định dạng thích hợp.
Politank-Z

1

Ngoài các câu trả lời ở trên, bạn có thể chuyển các tham số dòng lệnh vào quy trình mysqld cho các tùy chọn ghi nhật ký thay vì chỉnh sửa thủ công tệp conf của bạn. Ví dụ: để cho phép ghi nhật ký chung và chỉ định một tệp:

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

Xác nhận các câu trả lời khác ở trên, mysqld --help --verbose cung cấp cho bạn các giá trị từ tệp conf (vì vậy, chạy với tùy chọn dòng lệnh chung là nhật ký là FALSE); trong khi mysql -se "SHOW VARIABLES" | grep -e log_error -e general_logcho:

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

Sử dụng cú pháp nhỏ gọn hơn một chút cho nhật ký lỗi:

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.