Tôi có thể bật tính năng ghi nhật ký kiểm tra trên cơ sở dữ liệu mysql của mình không?Đăng nhập tất cả các truy vấn trong mysql
Tôi về cơ bản muốn giám sát tất cả các truy vấn trong một giờ và đổ nhật ký vào một tệp.
Tôi có thể bật tính năng ghi nhật ký kiểm tra trên cơ sở dữ liệu mysql của mình không?Đăng nhập tất cả các truy vấn trong mysql
Tôi về cơ bản muốn giám sát tất cả các truy vấn trong một giờ và đổ nhật ký vào một tệp.
Bắt đầu mysql với các tùy chọn --log:
mysqld --log=log_file_name
hoặc đặt dòng sau vào tập tin my.cnf
của bạn:
log = log_file_name
Hoặc ai sẽ ghi lại tất cả các truy vấn để log_file_name.
Bạn cũng có thể chỉ ghi lại các truy vấn chậm bằng cách sử dụng tùy chọn --log-slow-queries
thay vì --log
. Theo mặc định, các truy vấn mất 10 giây trở lên được coi là chậm, bạn có thể thay đổi điều này bằng cách đặt long_query_time
thành số giây mà truy vấn phải thực hiện trước khi được ghi nhật ký.
+1 vì không biết điều đó. Đã sử dụng trình kích hoạt được sử dụng thay thế. –
Nó sẽ đi mà không nói, nhưng để lại điều này bật trong một hộp sản xuất gió lên là không giải trí rất nhanh chóng. * g * – ceejayoz
Nếu bạn gặp sự cố khi bật đăng nhập theo cách này, hãy kiểm tra kỹ xem người dùng mysql có thể ghi vào vị trí tệp thích hợp không. –
Bạn nên lưu ý rằng việc ghi nhật ký mysql thực sự tác động đến hiệu suất, nhưng nó có thể là một điều khôn ngoan để thực hiện.
tôi thường để lại nó trên trên máy chủ dev (trừ khi nó khiến chúng tôi điên :))
(Note: Đối với mysql-5.6 + này sẽ không hoạt Có một giải pháp áp dụng cho mysql. -5.6+ nếu bạn scroll down hay click here)
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 bạn:.
CREATE TABLE `slow_log` (
`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`query_time` time NOT NULL,
`lock_time` time NOT NULL,
`rows_sent` int(11) NOT NULL,
`rows_examined` int(11) NOT NULL,
`db` varchar(512) NOT NULL,
`last_insert_id` int(11) NOT NULL,
`insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`sql_text` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log
SET global general_log = 0;
Tôi không chắc chắn nếu điều này là đúng cho mỗi phiên bản của MySQL (tôi đang trên 5,5), nhưng tôi không phải tạo ra các bảng. Tôi theo cùng một lời khuyên trừ khi tạo ra các bảng, được đề cập ở đây: http://stackoverflow.com/a/678310/135101 –
Có thể nó đã được tạo ra vì một lý do nào đó, @TylerCollier –
Cần lưu ý rằng ' Lệnh CREATE TABLE' (nếu các bảng không tồn tại) được thực hiện trên cơ sở dữ liệu 'mysql', không phải trên bất kỳ cơ sở dữ liệu do người dùng tạo nào. Có lẽ các câu lệnh SQL có thể được cập nhật để phản ánh điều đó. –
Đối với hồ sơ, general_log và slow_log đã được giới thiệu trong 5.1.6:
http://dev.mysql.com/doc/refman/5.1/en/log-destinations.html
5.2.1. Chọn Truy vấn chung và Điểm đến đầu ra của truy vấn chậm
Kể từ MySQL 5.1.6, Máy chủ MySQL cung cấp khả năng kiểm soát linh hoạt trên điểm đến của đầu ra vào nhật ký truy vấn chung và nhật ký truy vấn chậm, nếu các nhật ký đó được bật. Có thể đến cho các entry bản ghi là file log hoặc các bảng general_log và slow_log trong mysql cơ sở dữ liệu
Bên cạnh những gì tôi đã xem qua ở đây, chạy sau đây là cách đơn giản nhất để đổ truy vấn vào một tập tin bản ghi mà không cần khởi động lại
SET global log_output = 'FILE';
SET global general_log_file='/Applications/MAMP/logs/mysql_general.log';
SET global general_log = 1;
có thể được tắt với
SET global general_log = 0;
Lên trên câu trả lời không làm việc trong mysql 5.6+. Sử dụng điều này thay vì:
[mysqld]
general_log = on
general_log_file=/usr/log/general.log
trong my.cnf/file my.ini bạn
Ubuntu/Debian: /etc/mysql/my.cnf
của Windows: c: \ ProgramData \ MySQL \ MySQL server 5.x
wamp: c: \ wamp \ bin \ mysql \ mysqlx.yz \ my.ini
xampp: c: \ xampp \ mysql \ bin \ my.ini.
Nếu bạn đã sử dụng nó, bạn có thể cho tôi biết tác động hiệu suất của các bên trên, và nó sẽ là khôn ngoan để cho phép đăng nhập theo cách này? –
Tác động hiệu suất của Ramesh dường như giảm khoảng 5-15% hiệu suất. Thông tin thêm tại đây https://www.percona.com/blog/2009/02/10/impact-of-logging-on-mysql%E2%80%99s-performance/ – Firze
Tôi không hiểu tại sao Mysql 5.6 không ' t cho phép đặt tệp nhật ký từ truy vấn? Làm thế nào để đăng nhập tất cả các truy vấn trong MySQL 5.6 và sau này khi bạn không có quyền truy cập vào cây thư mục máy chủ nhưng chỉ 'phpMyAdmin'? –
Cách nhanh để bật Nhật ký truy vấn chung của MySQL mà không cần khởi động lại.
mysql> SET GLOBAL general_log = 'ON';
mysql> SET GLOBAL general_log_file = '/var/www/nanhe/log/all.log';
Tôi đã cài đặt mysql qua homebrew, phiên bản mysql: mysql Ver 14,14 distrib 5.7.15, cho osx10.11 (x86_64) sử dụng EditLine bao bọc
Trong trường hợp sử dụng AWS RDS MYSQL, từng hướng dẫn từng bước tại đây.
Khi được đặt làm đầu ra 'tệp', bạn có thể xem nhật ký trực tiếp từ Bảng điều khiển "Đăng nhập" AWS RDS.
Kích hoạt tính năng đăng nhập cho bảng
mysql> SET GLOBAL general_log = 'ON';
mysql> SET global log_output = 'table';
Xem nhật ký bằng cách chọn truy vấn
select * from mysql.general_log
có ký tự đại diện để đăng nhập tất cả các bảng không? (có khá nhiều: C) – RicardoE
Câu hỏi trùng lặp http://stackoverflow.com/q/650238/684229 – TMS
Đối với độc giả lợi ích: Đừng bỏ lỡ để đọc câu hỏi trong bình luận ở trên. – claws
Bạn có thể tham khảo câu trả lời hiện có của tôi được đăng tại đây http://dba.stackexchange.com/a/62477/6037 –