>백엔드 개발 >PHP 튜토리얼 >MySQL의 특정 테이블에 있는 데이터 중 일부가 알 수 없는 이유로 삭제되었습니다. 이유를 어떻게 알 수 있나요?

MySQL의 특정 테이블에 있는 데이터 중 일부가 알 수 없는 이유로 삭제되었습니다. 이유를 어떻게 알 수 있나요?

WBOY
WBOY원래의
2016-07-22 12:01:241283검색

데이터베이스는 Mysql이며 현재 144059개의 사용자 정보가 있습니다. 최근 일부 사용자가 이전에 등록했지만 잠시 후에 로그인할 수 없어 다시 등록해야 한다는 피드백이 있었습니다. 웹사이트는 PHP입니다. 피드백을 받은 후 크론 작업과 로그 등을 확인해 보았으나 원인을 찾을 수 없었습니다. (로그인이 안되는 이유는 사용자 정보가 삭제되었기 때문입니다.)

그러면 어디서부터 시작해야 할지 여쭤보고 싶습니다.


일부 권한 수정 후, 사용자 손실이 다시 발생하지 않았습니다(2개월째). 그러나 이전까지 이용자 수가 감소한 원인은 아직까지 발견되지 않았습니다.
어쨌든 사건은 종결되었습니다.

답글 내용:

데이터베이스에는 로그가 있습니다(사람들이 보는 텍스트 로그를 참조하지 않음). 삭제 문의 트랜잭션 ID를 찾아 거기에서 롤백하면 됩니다. 데이터에 접근할 수 있는 프로그래머들을 모두 체포하고 호랑이 벤치와 페퍼 워터를 사용하면 한 시간 안에 누군가가 비밀리에 삭제했다는 사실을 인정할 것입니다. 원인을 찾으려면 로그를 분석하면 됩니다
로그 정보가 불완전하다면 필요에 따라 완성하세요
그리고 혹시 sql inject를 의심하시는 분 계신가요? MySQL이 binlog를 활성화한 후에는 쓰기 작업이 바이너리 로그에 기록됩니다. mysqlbinlog를 사용하여 데이터를 확인/내보내기/복원할 수 있습니다.

이전에 mysqldump 전체 백업과 binlog 증분 백업을 수행했다고 가정합니다. mysqldump 전체 백업에서 --flush-logs 매개변수를 사용하여 전체 백업 전에 binlog를 지웁니다.

먼저 mysqldump를 사용하여 이전 전체 백업을 복원한 다음 mysqlbinlog를 사용하여 특정 시점 복원을 수행합니다. :

<code class="language-text">mysql -uroot -prootpwd db_name < db_name.sql 
mysqlbinlog --stop-datetime="2013-10-12 12:30:00" /var/log/mysql/mysql-bin.000001  |  mysql -uroot -prootpwd
</code>
먼저 코드 로직을 확인해 보겠습니다. 설명할 수 없는 여러 레코드의 손실은 데이터베이스 자체나 하드 디스크의 문제가 아닐 가능성이 높습니다. 데이터를 다시 가져오더라도 코드 논리가 잘못되면 앞으로도 데이터를 잃게 됩니다. 하드 드라이브 데이터가 손실되었습니다! Percona 5.6을 예로 들어 보겠습니다.
두 가지 방법이 있습니다.
1 General_log 사용
2 감사 플러그인 사용

1 General_log를 사용하여
General_log 열기
<code class="language-text">set global general_log=on;
 
 mysql> show variables  where value like '%table%'
    -> ;
+------------------------------+-----------------------+
| Variable_name                | Value                 |
+------------------------------+-----------------------+
| log_output                   | TABLE                 |
| slave_rows_search_algorithms | TABLE_SCAN,INDEX_SCAN |
| tx_isolation                 | REPEATABLE-READ       |
+------------------------------+-----------------------+
3 rows in set (0.00 sec)
</code>
SAAS 버전이 있고 데이터베이스와 함께 제공되는 LOG 기능보다 더 자세한 감사 정보를 제공할 수 있는 Datahekr 데이터베이스 미들웨어를 사용할 수 있습니다. 데이터베이스에는 느린 쿼리 로그, SQL 실행 로그, 오류 로그 등이 있습니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.