Làm cách nào để kích hoạt chức năng MySQL ghi lại từng câu lệnh truy vấn SQL nhận được từ máy khách và thời gian mà câu lệnh truy vấn đã gửi? Tôi có thể làm điều đó trong phpmyadmin hoặc NaviCat không? Làm thế nào để tôi phân tích nhật ký?
Làm cách nào để kích hoạt chức năng MySQL ghi lại từng câu lệnh truy vấn SQL nhận được từ máy khách và thời gian mà câu lệnh truy vấn đã gửi? Tôi có thể làm điều đó trong phpmyadmin hoặc NaviCat không? Làm thế nào để tôi phân tích nhật ký?
Câu trả lời:
Đầu tiên, hãy nhớ rằng logfile này có thể phát triển rất lớn trên một máy chủ bận rộn.
Đối với mysql <5.1,29:
Để kích hoạt tính năng đăng nhập truy vấn, đặt điều này trong /etc/my.cnf
trong [mysqld]
phần
log = /path/to/query.log #works for mysql < 5.1.29
Ngoài ra, để kích hoạt nó từ bảng điều khiển MySQL
SET general_log = 1;
Xem http://dev.mysql.com/doc/refman/5.1/en/query-log.html
Đối với mysql 5.1,29+
Với mysql 5.1.29+, log
tùy chọn không được chấp nhận. Để chỉ định logfile và cho phép ghi nhật ký, hãy sử dụng điều này trong my.cnf trong [mysqld]
phần:
general_log_file = /path/to/query.log
general_log = 1
Cách khác, để bật ghi nhật ký từ bảng điều khiển MySQL (cũng phải chỉ định vị trí tệp nhật ký bằng cách nào đó hoặc tìm vị trí mặc định):
SET global general_log = 1;
Cũng lưu ý rằng có các tùy chọn bổ sung để chỉ ghi nhật ký các truy vấn chậm hoặc những tùy chọn không sử dụng chỉ mục.
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
Hãy xem câu trả lời này cho một câu hỏi liên quan khác. Nó cho thấy cách bật, tắt và xem nhật ký trên các máy chủ trực tiếp mà không cần khởi động lại.
Đăng nhập tất cả các truy vấn trong mysql
Đây là một bản tóm tắt:
Nếu bạn không muốn hoặc không thể khởi động lại máy chủ MySQL, bạn có thể tiến hành như thế này trên máy chủ đang chạy của mình:
Tạo bảng nhật ký của bạn (xem câu trả lời )
Cho phép ghi nhật ký truy vấn trên cơ sở dữ liệu (Lưu ý rằng chuỗi 'bảng' phải được đặt theo nghĩa đen và không được thay thế bằng bất kỳ tên bảng nào. Cảm ơn Nicholas Pickering )
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log;
SET global general_log = 0;
Tôi sử dụng phương pháp này để đăng nhập khi tôi muốn nhanh chóng tối ưu hóa các tải trang khác nhau. Đó là một mẹo nhỏ ...
Đăng nhập vào BẢNG
SET global general_log = 1;
SET global log_output = 'table';
Sau đó, bạn có thể chọn từ mysql.general_log
bảng của tôi để truy xuất các truy vấn gần đây.
Sau đó tôi có thể làm một cái gì đó tương tự như tail -f
trên mysql.log, nhưng với nhiều tinh chỉnh hơn ...
select * from mysql.general_log
where event_time > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> ""
and argument <> "SET NAMES 'UTF8'" and argument <> "SHOW STATUS"
and command_type = "Query" and argument <> "SET PROFILING=1"
Điều này giúp dễ dàng xem các truy vấn của tôi mà tôi có thể thử và cắt lại. Tôi sử dụng khoảng thời gian 8 giây để chỉ tìm nạp các truy vấn được thực hiện trong vòng 8 giây qua.
Điều này đã có trong một bình luận, nhưng xứng đáng có câu trả lời của riêng nó: Không cần chỉnh sửa các tệp cấu hình: trong mysql, với tư cách là root, do
SET global general_log_file='/tmp/mysql.log';
SET global log_output = 'file';
SET global general_log = on;
Đừng quên tắt nó sau đó:
SET global general_log = off;
/tmp/
, nó có thể kết thúc ở một nơi nào đó như/tmp/systemd-private-...-mariadb.service-.../tmp/
Bạn có thể vô hiệu hóa hoặc kích hoạt nhật ký truy vấn chung (ghi nhật ký tất cả các truy vấn) với
SET GLOBAL general_log = 1 # (or 0 to disable)
Tôi cũng muốn kích hoạt tệp nhật ký MySQL để xem các truy vấn và tôi đã giải quyết vấn đề này bằng các hướng dẫn bên dưới
/etc/mysql/mysql.conf.d
và kích hoạt các dòng dưới đây
general_log_file = /var/log/mysql/mysql.log
general_log = 1
/etc/init.d/mysql restart
/var/log/mysql/
và kiểm tra nhật ký// To see global variable is enabled or not and location of query log
SHOW VARIABLES like 'general%';
// Set query log on
SET GLOBAL general_log = ON;
Trên Windows, bạn có thể chỉ cần truy cập
C:\wamp\bin\mysql\mysql5.1.53\my.ini
Chèn dòng này vào my.ini
general_log_file = c:/wamp/logs/mysql_query_log.log
Tệp my.ini cuối cùng trông như thế này
...
...
...
socket = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log = c:/wamp/logs/mysql_query_log.log #dump query logs in this file
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
...
...
...
...
Có lỗi trong phiên bản MySQL 5.6. Ngay cả mysqld cũng hiển thị như:
Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
Cài đặt thực sự đang đọc theo thứ tự sau:
Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
Kiểm tra tệp: "C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini"
Hy vọng nó sẽ giúp được ai đó.
chỉ dành cho mysql> = 5,5 cho các truy vấn chậm (1 giây trở lên) my.cfg
[mysqld]
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes
Để kích hoạt nhật ký truy vấn trong MAC Machine:
Mở tệp sau:
vi /private/etc/my.cnf
Đặt url nhật ký truy vấn trong phần 'mysqld' như sau:
[mysqld]
general_log_file=/Users/kumanan/Documents/mysql_query.log
Rất ít máy không đăng nhập đúng truy vấn, vì vậy, trường hợp đó bạn có thể kích hoạt nó từ bảng điều khiển MySQL
mysql> SET global general_log = 1;
Không chính xác một câu trả lời cho câu hỏi vì câu hỏi đã có câu trả lời tuyệt vời. Đây là một thông tin bên. Việc kích hoạt general_log thực sự giúp cải thiện hiệu suất của MySQL. Tôi đã general_log =1
vô tình rời khỏi một máy chủ sản xuất và dành hàng giờ để tìm hiểu tại sao hiệu suất không thể so sánh với một thiết lập tương tự trên các máy chủ khác. Sau đó, tôi tìm thấy điều này giải thích tác động của việc kích hoạt nhật ký chung. http://www.fromdual.com/general_query_log_vs_mysql_performance .
Ý chính của câu chuyện, không đưa general_log=1
vào .cnf
tập tin. Thay vào đó sử dụng set global general_log =1
trong một thời gian ngắn chỉ để đăng nhập đủ để tìm hiểu những gì bạn đang cố gắng tìm hiểu và sau đó tắt nó.
Trong phpMyAdmin 4.0, bạn vào Status> Monitor. Trong đó bạn có thể kích hoạt nhật ký truy vấn chậm và nhật ký chung, xem màn hình trực tiếp, chọn một phần của biểu đồ, xem các truy vấn liên quan và phân tích chúng.
Tôi đã phải bỏ và tạo lại nhật ký chung tại một điểm. Trong quá trình giải trí, các bộ ký tự bị rối và cuối cùng tôi đã gặp lỗi này trong nhật ký:
[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'
Vì vậy, nếu câu trả lời chuẩn của "kiểm tra để đảm bảo đăng nhập được bật" không phù hợp với bạn, hãy kiểm tra để đảm bảo các trường của bạn có bộ ký tự phù hợp.