Hướng dẫn ghi log trong mysql

Hướng dẫn ghi log trong mysql

Đã đăng vào thg 2 20, 2020 10:07 SA 2 phút đọc

1. Giới thiệu

Trong bài viết này mình sẽ chỉ cho bạn cách cho phép lưu lại log của tất cả các truy vấn SQL của MySQL trên hệ điều hành Ubuntu.

Mình thấy điều này rất hữu ích, trợ giúp cực lớn cho các bạn khi degug liên quan đến truy vấn, thao tác với Database.

Cách này cũng dễ hiểu hơn về cách ứng dụng hoạt động bằng cách theo dõi các truy vấn SQL mà nó sử dụng. Vậy hãy bắt đầu...

2. Hướng dẫn

Bước 1: Để bật chế độ lưu log của MySQL, chúng ta phải chỉnh sửa tệp cấu hình MySQL nằm trong /etc/mysql/my.cnf trên Ubuntu.

Lưu ý: Chúng ta phải làm điều đó với quyền quản trị.

Vì vậy, chúng ta chạy lệnh sau đây trên Terminal:

sudo nano /etc/mysql/my.cnf

Bước 2: Xác định vị trí các dòng sau:

[mysqld]

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

Để bật chúng, mình chỉ cần đơn giản là xóa đi dấu ghi chú # trước mỗi dòng là xong. Và kết quả là:

[mysqld]

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

Lưu ý: Trường hợp không tìm thấy 2 dòng này thì bạn có thể thoải mái copy paste vào là xong

Hướng dẫn ghi log trong mysql

Bước 3: Khới động lại mysql

sudo service mysql restart

Bước 4: Vào xem kết quả

Bây giờ bạn có thể theo dõi log các truy vấn của MySQL của mình trong thời gian thực bằng cách sử dụng lệnh tail hoặc xem qua tệp /var/log/mysql/mysql.log. Ví dụ như:

sudo tail -f /var/log/mysql/mysql.log

Đó là những gì chúng ta cần làm.

3. Trải nghiệm

3.1 Khi thao tác với Mysql Workbench

Thao tác: Khi select all Admin trong mysql Work Bench

Hướng dẫn ghi log trong mysql
Log Mysql nhận được
Hướng dẫn ghi log trong mysql

3.2 Khi thao tác với Rails console

Thao tác: Admin.first trong rails c

Hướng dẫn ghi log trong mysql

Log Mysql nhận được

Hướng dẫn ghi log trong mysql

3.3 Khi thao tác với Application

Thao tác: Click vào menu show ra list contact của ứng dụng

Hướng dẫn ghi log trong mysql

Log Mysql nhận được

Hướng dẫn ghi log trong mysql

Note: Đối với ứng dụng Rails thì mình đã có log sql rồi, nên sẽ ko thấy có ích nhiều. nhưng đối với các framework không show log như Wordpress... thì nó có ích ko hề ít

Hướng dẫn ghi log trong mysql

4. Kết luận

LƯU Ý: Xin lưu ý rằng log của MySQL khi bật lên nó sẽ ảnh hưởng tới Performance của hệ thống, vì vậy đừng bật nó lên trên môi trường Production, Chúng ta chỉ dùng nó chỉ để Debug.

Chúc các bạn tìm ra lỗi đó khiến bạn phải kích hoạt lưu lại nội dung log của MySQL. Chúc may mắn.

Hướng dẫn ghi log trong mysql

Tài liệu tham khảo: http://www.techytalk.info/configure-mysql-to-keep-log-of-all-queries-on-ubuntu/

All rights reserved

Bài viết được sự cho phép của tác giả Nguyễn Hữu Đồng

Đôi khi bạn sẽ cần monitor tất cả các query được gửi tới server trong một khoảng thời gian, mysql cung cấp cho ta vài phương pháp để làm chuyện này, cho phép chúng ta xem log của các query và log của các query chậm. Nếu ta kích hoạt tính năng log query thì những log được tạo sẽ sẽ nằm ở một tront hai chỗ file hoặc 2 bảng general_log và slow_log của database có tên là mysql.

1. Đầu tiên, kiểm tra nếu database mysql chưa có hai bảng sau slow_log và general_log thì tạo nó.

  • Để tạo bảng general_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'

Bảng genera_log là mt bản ghi ghi lại những gì mysqld đã làm, mysql server ghi thông tin đến log này khi client kết nối hay ngắt kết nối, log lại mỗi câu truy vấn nhận được từ client. Log này rất hữu dụng khi bạn nghi ngờ có sự sai sót trong truy vấn và muốn truy được client nào đã gửi truy vấn tới.

Hướng dẫn ghi log trong mysql

  • Và để tạo bảng slow_log
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'

Log này lưu lại nhưng câu query mất nhiều thời gian để hoàn thành, bao lâu là lâu được định nghĩa ở biến long_query_time, giá trị mặc định là 10s, slow_log rất quan trọng trong việc xác định query để tối ưu hóa hóa, nhầm tăng hiệu suất của hệ thống.

2. Mở tính năng ghi nhật kí log trên database

set global log_output = 'table';
set global general_log = 1;
set global slow_query_log = 1;

3. Định nghĩa thế nào là slow query

# Mình set 1s là lâu
set global long_query_time = 1;

4. Bây giờ để xem log bạn có thể dùng query này.

select * from mysql.general_log;
select * from mysql.slow_log;

5. Nếu bạn muốn tắt log query vào table

set global general_log = 0;
set global slow_query_log = 0;

Nguồn : TablePlus

Bài viết gốc được đăng tải tại medium.com

Có thể bạn quan tâm:

  • Kinh nghiệm vận hành MySQL – Chú ý khi chọn MySQL làm database
  • Top 5 công cụ mã nguồn mở dành cho MySQL administrator
  • 11 cách tăng tốc nhanh cho WordPress bằng file wp-conig.php

Xem thêm Việc làm Developer hấp dẫn trên TopDev