首頁  >  文章  >  後端開發  >  Mysql裡面某一table的部分資料莫名的被刪了,請問如何找到原因?

Mysql裡面某一table的部分資料莫名的被刪了,請問如何找到原因?

WBOY
WBOY原創
2016-07-22 12:01:241260瀏覽

資料庫是Mysql的,有個user table.裡面目前有144059個使用者資料。最近有回饋就是有一些用戶以前註冊過,然後過一段時間發現不能登錄,需要重新註冊。網站是PHP的。得到回饋後就檢查了一下cron job和日誌等,都沒找到原因。 (不能登入的原因就是該使用者的資訊被刪了)

所以,想請教一下,該從哪方面入手比較好。


修改了一些權限之後,使用者遺失的情況就沒有發生過了(已經過了2個月了)。不過,以前遺失用戶的原因一直沒找到。
反正,結案咯。

回覆內容:

資料庫都有log的(指的不是給人看的那些文字log),你找到那條delete語句的transaction id,然後回滾到那裡就好了。 把能接觸到資料的程式設計師全部抓起來,然後老虎凳,辣椒水,不出一個小時,就會有人承認是自己偷偷刪的。 找原因呢,就分析log
log資訊如果不全那該補全就補全
另外沒有人懷疑 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 使用審計外掛程式

一 使用general_log
開啟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>
開啟general_log 可以使用Datahekr 資料庫中間件,有SAAS版本的,能提供比資料庫自帶LOG功能更詳細的審計資訊。 資料庫裡面有慢查詢日誌和執行的SQL日誌,錯誤日誌等等
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn