đuôi -f tương đương với cơ sở dữ liệu đăng nhập MySQL


12

Chúng tôi đã quyết định rằng chúng tôi nên chuyển sang sử dụng cơ sở dữ liệu (MySQL) cho nhật ký ứng dụng của chúng tôi (đó là một ứng dụng Java sử dụng lib logback). Tôi hy vọng tìm thấy một cái gì đó giống như tail -ftôi có thể sử dụng với một bảng cụ thể trong cơ sở dữ liệu đó sẽ hiển thị cho tôi các hàng mới khi chúng được thêm vào (tương tự như cách tail -flàm việc trên các tệp nhật ký).

Câu trả lời:


5

Bật ghi nhật ký nhị phân MySQL. Sau đó, bạn có thể sử dụng mysqlbinloglệnh để xem tất cả các câu lệnh sửa đổi dữ liệu.


bạn có thể đưa ra một ví dụ về cách làm điều này bằng ngôn ngữ bạn chọn hoặc với bash không?
Alexander Mills

7

Tôi không nghĩ rằng một số người hiểu câu hỏi (hoặc tôi không). Bạn không muốn đăng nhập các truy vấn đối với DB; thay vì một bản ghi từ một ứng dụng đang đi vào một DB. Nếu đó là một tập tin bạn có thể theo dõi nhật ký. Làm thế nào để bạn theo dõi một bảng để khi một hàng mới được thêm vào, nó là đầu ra?

Không nên viết một vòng lặp đơn giản để xử lý việc này, giả sử bạn có một trường duy nhất tăng đơn điệu theo thời gian (ví dụ: số thứ tự).

current_pos = select max(seq) from table
while true
  new_pos = select max(seq) from table
  if new_pos > current_pos
    select * from table where seq > current_pos
    current_pos = new_pos
  endif
  sleep 1
endwhile

cái này được gọi là bỏ phiếu và nó không thú vị lắm :) nhưng tôi cho rằng, nếu bạn phải sử dụng bỏ phiếu.
Alexander Mills

3

Có vẻ như nhiều người trong chúng ta không hiểu câu hỏi của bạn. Ý bạn là gì khi "ghi nhật ký cơ sở dữ liệu" , đó không phải là một thuật ngữ MySQL tiêu chuẩn.

Sử dụng Nhật ký truy vấn chung của MySQL , ghi nhật ký từng câu lệnh nhận được từ máy khách.

Sau đó, bạn có thể đặt logDefput = TABLE trong my.cnf của mình. Tập tin sẽ được ghi vào $ mysql_data_directory / general_log.CSV. Bạn có thể tail -ftập tin này để xem các truy vấn trong thời gian thực.


2

Đây là những gì tôi sử dụng. Có vẻ là giải pháp đơn giản nhất, mặc dù nó không hiệu quả lắm:

watch "mysql db_name -e '(SELECT * FROM my_table ORDER BY id DESC LIMIT 10) ORDER BY id ASC;'"


1

Bạn có thể thực hiện một cách dễ dàng bằng cách sử dụng đuôi -f trên tệp cơ sở dữ liệu (/var/lib/mysql/database_name/table_name.MY*) và sau đó chạy truy vấn của bạn mỗi khi đọc một dòng.


1

Tôi đề nghị thêm trường dấu thời gian vào bất kỳ bảng nào bạn muốn theo đuôi. Điều đó sẽ cho phép bạn có được kết quả mong muốn rất dễ dàng với một truy vấn đơn giản.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.