Maison >développement back-end >tutoriel php >Mysql里面某一table的部分数据莫名的被删了,请问如何找到原因?

Mysql里面某一table的部分数据莫名的被删了,请问如何找到原因?

WBOY
WBOYoriginal
2016-07-22 12:01:241284parcourir

数据库是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 </code>
先查查代码逻辑吧,莫名其妙丢掉几条记录不大可能是数据库本身或者硬盘的问题。你就算把数据找回来,代码逻辑上不对,以后还是会丢数据。 硬盘数据丢失! 以percona 5.6为例:
有两种方法:
1 使用general_log
2 使用审计插件

一 使用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>
可以使用Datahekr 数据库中间件,有SAAS版本的,能提供比数据库自带LOG功能更详细的审计信息。 数据库里面有慢查询日志和执行的SQL日志,错误日志等等
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn