tail -f MySQL 로깅 데이터베이스와 동일


12

애플리케이션 로그에 (MySQL) 데이터베이스를 사용하기로 결정했습니다 (logback lib를 사용하는 Java 앱임). tail -f추가 된 새 행을 표시하는 데이터베이스의 특정 테이블과 함께 사용할 수있는 것과 같은 것을 찾으려고합니다 ( tail -f로그 파일에서 작동 하는 방식과 유사 ).

답변:


5

MySQL 바이너리 로깅을 켜십시오. 그런 다음 mysqlbinlog명령을 사용하여 모든 데이터 수정 명령문을 볼 수 있습니다 .


선택한 언어 또는 bash로 이것을 수행하는 방법의 예를 보여 줄 수 있습니까?
Alexander Mills

7

나는 어떤 사람들이 그 질문을 이해하지 못한다고 생각합니다 (또는 나는하지 않습니다). DB에 대해 쿼리를 기록하고 싶지 않습니다. 오히려 응용 프로그램의 로그가 DB로 이동합니다. 파일 인 경우 로그를 추적 할 수 있습니다. 새로운 행이 추가 될 때 테이블이 출력되도록 테이블을 어떻게 테일링합니까?

시간이 지남에 따라 단조 증가하는 고유 필드 (예 : 시퀀스 번호)가 있다고 가정하면이를 처리하기 위해 간단한 루프를 작성하는 것이 어렵지 않아야합니다.

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

이것은 폴링이라고 불리우며 그렇게 재미 있지는 않습니다.
Alexander Mills

3

많은 사람들이 귀하의 질문을 이해하지 못하는 것 같습니다. 표준 MySQL 용어가 아닌 "logging database" 는 무엇을 의미합니까?

클라이언트로부터받은 각 문장을 기록 하는 MySQL General Query Log를 사용하십시오 .

그런 다음 my.cnf에서 log_output = TABLE 을 설정할 수 있습니다 . 파일은 $ mysql_data_directory / general_log.CSV에 작성됩니다. tail -f이 파일을 사용하여 실시간으로 쿼리를 볼 수 있습니다 .


2

여기 내가 사용하는 것이 있습니다. 매우 효율적인 방법은 아니지만 가장 간단한 솔루션 인 것 같습니다.

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


1

데이터베이스 파일 (/var/lib/mysql/database_name/table_name.MY*)에서 tail -f를 사용하고 행을 읽을 때마다 쿼리를 실행하여 해킹 할 수 있습니다.


1

꼬리표를 붙일 테이블에 타임 스탬프 필드를 추가하는 것이 좋습니다. 이를 통해 간단한 쿼리로 원하는 결과를 매우 쉽게 얻을 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.