MySQL günlük veritabanı için tail -f eşdeğeri


12

Uygulama günlüklerimiz için (MySQL) veritabanına geçmemiz gerektiğine karar verildi (logback lib kullanan bir Java uygulaması). Ben tail -feklendikçe bana yeni satırları ( tail -fgünlük dosyalarında nasıl çalıştığına benzer) gösterecek belirli bir tablo ile kullanabileceğiniz gibi bir şey bulmayı umuyorum .

Yanıtlar:


5

MySQL ikili günlük kaydını açın. Ardından, mysqlbinlogtüm veri değiştiren ifadeleri görmek için komutu kullanabilirsiniz .


seçtiğiniz dilde veya bash ile nasıl yapılacağına dair bir örnek gösterebilir misiniz?
Alexander Mills

7

Bazı insanların soruyu anladığını sanmıyorum (ya da anlamıyorum). DB karşı sorguları günlüğe kaydetmek istemez; bunun yerine bir uygulamadan bir günlük bir DB'ye giriyor. Eğer bir dosya olsaydı günlüğü kuyruğa alabilirdin. Bir tabloyu yeni bir satır eklendiğinde çıktı alınacak şekilde nasıl kuyruğa alırsınız?

Zaman içinde monoton olarak artan (örneğin bir sıra numarası) benzersiz bir alanınız olduğunu varsayarak, bunun üstesinden gelmek için basit bir döngü yazmak zor olmamalıdır.

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

Buna oylama denir ve o kadar eğlenceli değil :) ama eğer oy kullanmanız gerekiyorsa, iyi bir teknik.
Alexander Mills

3

Görünüşe göre çoğumuz sorunuzu tam olarak anlamıyoruz. Standart bir MySQL terimi olmayan "günlük kaydı" ile ne demek istiyorsun ?

Bir istemciden alınan her ifadeyi günlüğe kaydeden MySQL Genel Sorgu Günlüğünü kullanın .

Daha sonra my.cnf dosyasında log_output = TABLE ayarını yapabilirsiniz . Dosya $ mysql_data_directory / general_log.CSV dosyasına yazılacaktır. Şunları yapabilirsiniz tail -fBu dosya gerçek zamanlı olarak sorguları görüntülemek için.


2

İşte kullandığım. Çok verimli olmasa da, en basit çözüm görünüyor:

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


1

Veritabanı dosyasında tail -f (/var/lib/mysql/database_name/table_name.MY*) kullanarak ve sonra her satır okunduğunda sorgunuzu çalıştırarak bunu hacky bir yolla yapabilirsiniz.


1

Kuyruklamak istediğiniz herhangi bir tabloya zaman damgası alanı eklemenizi öneririm. Bu, basit bir sorgu ile istenen sonuçları kolayca elde etmenizi sağlayacaktır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.