데이터베이스는 Mysql이며 현재 144059개의 사용자 정보가 있습니다. 최근 일부 사용자가 이전에 등록했지만 잠시 후에 로그인할 수 없어 다시 등록해야 한다는 피드백이 있었습니다. 웹사이트는 PHP입니다. 피드백을 받은 후 크론 작업과 로그 등을 확인해 보았으나 원인을 찾을 수 없었습니다. (로그인이 안되는 이유는 사용자 정보가 삭제되었기 때문입니다.)
그러면 어디서부터 시작해야 할지 여쭤보고 싶습니다.
일부 권한 수정 후, 사용자 손실이 다시 발생하지 않았습니다(2개월째). 그러나 이전까지 이용자 수가 감소한 원인은 아직까지 발견되지 않았습니다.
어쨌든 사건은 종결되었습니다.
<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을 예로 들어 보겠습니다. <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 실행 로그, 오류 로그 등이 있습니다.