Câu trả lời:
Đối với những người may mắn có MySQL> = 5.1.12, bạn có thể kiểm soát tùy chọn này trên toàn cầu khi chạy:
SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
mysql.general_log
Nếu bạn muốn xuất ra một tệp thay vì bảng:
SET GLOBAL log_output = "FILE";
mặc định .SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
Tôi thích phương pháp này để chỉnh sửa các tệp .cnf vì:
my.cnf
tệp và có khả năng bật đăng nhập vĩnh viễn/var/log /var/data/log
/opt /home/mysql_savior/var
Để biết thêm thông tin, hãy xem Hướng dẫn tham khảo MySQL 5.1 - Biến hệ thống máy chủ - general_log
Bạn có thể kích hoạt nhật ký truy vấn chung cho loại chẩn đoán đó. Nói chung, bạn không đăng nhập tất cả các truy vấn CHỌN trên máy chủ sản xuất, đó là một kẻ giết người hiệu suất.
Chỉnh sửa cấu hình MySQL của bạn, ví dụ /etc/mysql/my.cnf - tìm kiếm hoặc thêm một dòng như thế này
[mysqld]
log = /var/log/mysql/mysql.log
Khởi động lại mysql để nhận thay đổi đó, bây giờ bạn có thể
tail -f /var/log/mysql/mysql.log
Xin chào, bạn có thể xem các truy vấn khi chúng đến.
Bạn có thể làm điều lưu chuyển để theo dõi nhật ký truy vấn mysql.
Mở tập tin cấu hình mysql my.cnf
sudo nano /etc/mysql/my.cnf
Tìm kiếm các dòng dưới [mysqld]
tiêu đề và bỏ ghi chú những dòng này để kích hoạt nhật ký
general_log_file = /var/log/mysql/mysql.log
general_log = 1
Khởi động lại máy chủ mysql của bạn để phản ánh các thay đổi
sudo service mysql start
Theo dõi nhật ký máy chủ mysql bằng lệnh sau trong terminal
tail -f /var/log/mysql/mysql.log
1) Nếu ghi nhật ký mysql chung được bật thì chúng ta có thể kiểm tra các truy vấn trong tệp nhật ký hoặc bảng dựa trên những gì chúng ta đã đề cập trong cấu hình. Kiểm tra những gì được kích hoạt bằng lệnh sau
mysql> show variables like 'general_log%';
mysql> show variables like 'log_output%';
Nếu chúng ta cần lịch sử truy vấn trong bảng thì
Execute SET GLOBAL log_output = 'TABLE';
Execute SET GLOBAL general_log = 'ON';
Hãy nhìn vào bảng mysql.general_log
Nếu bạn muốn xuất ra một tệp:
SET GLOBAL log_output = "FILE"; which is set by default.
SET GLOBAL general_log_file = "/path/to/your/logfile.log";
SET GLOBAL general_log = 'ON';
2) Chúng tôi cũng có thể kiểm tra các truy vấn trong tệp .mysql_history cat ~ / .mysql_history
Có lẽ bạn có thể tìm thấy điều đó bằng cách nhìn vào nhật ký truy vấn .
Nếu myslog binlog được bật, bạn có thể kiểm tra các lệnh được chạy bởi người dùng bằng cách thực hiện lệnh sau trong bảng điều khiển linux bằng cách duyệt đến thư mục myslog binlog
mysqlbinlog binlog.000001 > /tmp/statements.sql
cho phép
[mysqld]
log = /var/log/mysql/mysql.log
hoặc nhật ký chung sẽ có ảnh hưởng đến hiệu suất của mysql
Nếu bạn không muốn thay đổi cấu hình MySQL của mình, bạn có thể sử dụng trình lược tả SQL như "Hồ sơ Neor SQL" http://www.profilesql.com .
Sau khi đọc câu trả lời của Paul, tôi tiếp tục đào để biết thêm thông tin về https://dev.mysql.com/doc/refman/5.7/en/query-log.html
Tôi tìm thấy một mã thực sự hữu ích bởi một người. Đây là tóm tắt của bối cảnh.
(Lưu ý: Đoạn mã sau không phải của tôi)
Kịch bản này là một ví dụ để giữ cho bảng sạch sẽ giúp bạn giảm kích thước bảng. Như sau một ngày, sẽ có khoảng 180k truy vấn đăng nhập. (trong một tệp, nó sẽ là 30 MB mỗi ngày)
Bạn cần thêm một cột bổ sung (event_unix) và sau đó bạn có thể sử dụng tập lệnh này để giữ nhật ký sạch sẽ ... nó sẽ cập nhật dấu thời gian thành dấu thời gian Unix, xóa nhật ký cũ hơn 1 ngày và sau đó cập nhật event_time vào Dấu thời gian từ event_unix ... nghe có vẻ hơi khó hiểu, nhưng nó hoạt động rất tốt.
Các lệnh cho cột mới:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
ALTER TABLE `general_log_temp`
ADD COLUMN `event_unix` int(10) NOT NULL AFTER `event_time`;
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
Kịch bản dọn dẹp:
SET GLOBAL general_log = 'OFF';
RENAME TABLE general_log TO general_log_temp;
UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time);
DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400;
UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix);
RENAME TABLE general_log_temp TO general_log;
SET GLOBAL general_log = 'ON';
Tín dụng cho Sebastian Kaiser (tác giả gốc của mã).
Hy vọng ai đó sẽ tìm thấy nó hữu ích như tôi đã làm.
Bạn có thể xem những điều sau đây trong linux
cd /root
ls -al
vi .mysql_history
Nó có thể giúp