mysql更新数据能回滚吗?如何实现呢?

XIAO 2020-05-17 10:09:33 java常见问答 6997

不熟悉使用mysql数据库的朋友们,可能会对其有非常多的小问题,例如说,mysql更新数据可以回滚吗?我们应该如何去实现呢?

操作数据库时候难免会因为“大意”而误操作,需要快速恢复的话通过备份来恢复是不太可能的,因为需要还原和binlog差来恢复,等不了,很费时。这里说明因为Update 操作的恢复方法:主要还是通过binlog来进行恢复,前提是binlog_format必须是Row格式,否则只能通过备份来恢复数据了。

以下情况可以恢复数据:

1 ,innodb引擎表开启了事务,执行dml语句,比如delete、update、insert之类,并且没有提交即commit操作的话,可以执行rollback进行回滚恢复。如果是ddl操作,如drop、create、alter之类的操作时无效的。

2, 在进行删除操作之前有备份,比如mysqldump,物理备份数据文件之类的操作,那么可以恢复到删除前的数据。

3, 如果你的删除操作是直接对data下的文件进行删除,注意,不是粉碎文件操作,那么你可以尝试用磁盘恢复软件来找回被误删的数据文件;

binlog2sql快速回滚:

首先,确认你的MySQL server开启了binlog,设置了以下参数:

[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 1000M
binlog-format = row

如果没有开启binlog,也没有预先生成回滚SQL,那真的无法快速回滚了。对存放重要业务数据的MySQL,强烈建议开启binlog。

随后,安装开源工具binlog2sql。binlog2sql是一款简单易用的binlog解析工具,其中一个功能就是生成回滚SQL。

git clone https://github.com/danfengcao/binlog2sql.git
pip install -r requirements.txt

然后,我们就可以生成回滚SQL了。

回滚步骤:

登录mysql,查看目前的binlog文件。

最新的binlog文件是mysql-bin.000002,我们再定位误操作SQL的binlog位置

生成回滚sql,并检查回滚sql是否正确。

确认回滚sql正确,执行回滚语句。登录mysql,数据回滚成功。

那么以上就是有关mysql更新数据回滚的所有内容了,还想了解java常见问答的更多相关信息,记得关注本站消息哦。

推荐阅读:

mysql更新数据导致锁表怎么解决?

mysql更新数据库慢是为什么?如何解决?

mysql如何优化?mysql性能调优经验分享!