Câu trả lời của @Gauis là tuyệt vời. Để thêm vào nó, bạn có thể như sau:
MySQL 5.1 hiện cho phép lưu trữ nhật ký chung và nhật ký truy vấn chậm dưới dạng bảng SQL.
Thêm phần này vào /etc/my.cnf:
[mysqld]
log-output=TABLE
log
Khởi động lại mysql
Sau đó, khi mysqld tạo nhật ký chung, thay vì tệp văn bản, nó sẽ tạo bảng dưới dạng bảng CSV trong thư mục / var / lib / mysql / mysql (cơ sở dữ liệu lược đồ mysql).
Chỉ cần làm điều này để thấy nó:
SHOW CREATE TABLE mysql.general_log\G
Tất cả các kết nối sẽ chồng chất trong đó.
Đối với bạn, điều đó không hữu ích lắm khi truy vấn nó. Nó sẽ chỉ là một lần quét toàn bộ bảng mỗi lần.
Phải làm sao đây ??? CHUYỂN ĐỔI CHO MyISAM và INDEX BẢNG !!!!
SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
ALTER TABLE mysql.general_log ADD INDEX (event_time);
SET GLOBAL general_log = @old_log_state;
Tùy chọn, bạn có thể muốn đặt một chỉ mục toàn văn bản trên trường đối số.
Tôi vừa thiết lập MySQL 5.5.9 trên máy chủ và dùng thử. Đây là kết quả:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.9-log MySQL Community Server (GPL)
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
iml-db10:3306 (DB (none)) :: show create table mysql.general_log\G
*************************** 1. row ***************************
Table: general_log
Create Table: CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` int(11) 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'
1 row in set (0.01 sec)
iml-db10:3306 (DB (none)) :: SET @old_log_state = @@global.general_log;
Query OK, 0 rows affected (0.00 sec)
iml-db10:3306 (DB (none)) :: SET GLOBAL general_log = 'OFF';
Query OK, 0 rows affected (0.00 sec)
iml-db10:3306 (DB (none)) :: ALTER TABLE mysql.general_log ENGINE = MyISAM;
Query OK, 9 rows affected (0.02 sec)
Records: 9 Duplicates: 0 Warnings: 0
iml-db10:3306 (DB (none)) :: ALTER TABLE mysql.general_log ADD INDEX (event_time);
Query OK, 9 rows affected (0.00 sec)
Records: 9 Duplicates: 0 Warnings: 0
iml-db10:3306 (DB (none)) :: SET GLOBAL slow_query_log = @old_log_state;
Query OK, 0 rows affected (0.00 sec)
iml-db10:3306 (DB (none)) :: select * from mysql.general_log;
+---------------------+-----------------------------+-----------+-----------+--------------+-------------------------------------------+
| event_time | user_host | thread_id | server_id | command_type | argument |
+---------------------+-----------------------------+-----------+-----------+--------------+-------------------------------------------+
| 2011-02-24 14:42:18 | [lwdba] @ [127.0.0.1] | 3 | 106451130 | Connect | lwdba@127.0.0.1 on |
| 2011-02-24 14:42:18 | lwdba[lwdba] @ [127.0.0.1] | 3 | 106451130 | Query | select @@version_comment limit 1 |
| 2011-02-24 14:42:18 | lwdba[lwdba] @ [127.0.0.1] | 3 | 106451130 | Query | SHOW VARIABLES LIKE 'hostname' |
| 2011-02-24 14:42:18 | lwdba[lwdba] @ [127.0.0.1] | 3 | 106451130 | Quit | |
| 2011-02-24 14:42:18 | [lwdba] @ [127.0.0.1] | 4 | 106451130 | Connect | lwdba@127.0.0.1 on |
| 2011-02-24 14:42:18 | lwdba[lwdba] @ [127.0.0.1] | 4 | 106451130 | Query | select @@version_comment limit 1 |
| 2011-02-24 14:42:30 | lwdba[lwdba] @ [127.0.0.1] | 4 | 106451130 | Query | show create table mysql.general_log |
| 2011-02-24 14:43:54 | lwdba[lwdba] @ [127.0.0.1] | 4 | 106451130 | Query | SET @old_log_state = @@global.general_log |
| 2011-02-24 14:44:00 | lwdba[lwdba] @ [127.0.0.1] | 4 | 106451130 | Query | SET GLOBAL general_log = 'OFF' |
+---------------------+-----------------------------+-----------+-----------+--------------+-------------------------------------------+
9 rows in set (0.00 sec)
iml-db10:3306 (DB (none)) :: show create table mysql.general_log\G
*************************** 1. row ***************************
Table: general_log
Create Table: CREATE TABLE `general_log` (
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`user_host` mediumtext NOT NULL,
`thread_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumtext NOT NULL,
KEY `event_time` (`event_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='General log'
1 row in set (0.00 sec)
Bây giờ, bạn có thể truy vấn bằng dấu thời gian và tìm kiếm các mã thông báo cụ thể trong trường đối số.
Ví dụ, thông báo dòng 4 của CHỌN tôi đã làm. Đăng nhập của tôi đã được ghi lại trong trường đối số là lwdba@127.0.0.1 on
. Bạn có thể theo dõi những điều này.
Điều gì sẽ xảy ra nếu vị tướng trở nên quá lớn (Tin tôi đi, nó sẽ trở nên quá lớn rất nhanh)
Phải làm sao đây ???
- tắt máy tính
- di chuyển general_log.frm, general_log.MYD và general_log.MYI sang một ổ đĩa khác (và lớn hơn).
- Tạo ba liên kết tượng trưng đến general_log.frm, general_log.MYD và general_log.MYI từ / var / lib / mysql / mysql
- chown mysql: mysql general_log.frm general_log.MYD general_log.MYI trên ổ đĩa mới
- chown mysql: mysql general_log.frm general_log.MYD general_log.MYI symlink trong / var / lib / mysql / mysql
- bắt đầu sao lưu
BTW Khi bạn đã đăng nhập chung ngoại tuyến, bạn có thể chạy chúng để thu thập các thông tin đăng nhập riêng biệt đã làm một cái gì đó trong mysqld:
SET SQL_LOG_BIN=0;
use mysql
DROP TABLE IF EXISTS audit_user_host;
CREATE TABLE audit_user_host
(
user_host VARCHAR(32),
PRIMARY KEY (user_host)
) ENGINE=MyISAM;
SHOW CREATE TABLE audit_user_host\G
INSERT IGNORE INTO mysql.audit_user_host SELECT user_host FROM mysql.general_log;
SELECT COUNT(1) FROM mysql.audit_user_host;
Tôi có một máy khách với 3 máy chủ DB. Eeach với DB Server có hơn 1.000.000.000 (1 tỷ [nghìn triệu]) dòng trong đó. Kịch bản trên mất khoảng 2,5 giờ để hoàn thành. Bảng Aud_user_host đã kết thúc với 27 thông tin đăng nhập riêng biệt.
Bạn sẽ được tốt để đi.
Hãy vui vẻ với điều này, mọi người !!!