mysql bin-log回滚恢复数据

本文介绍了一种通过 MySQL 的 binlog 日志进行数据回滚的方法。具体步骤包括使用 mysqlbinlog 工具生成指定时间段内的 SQL 操作脚本,通过 sed 命令去除可能引起冲突的 INSERT_ID 设置,最后利用 mysql 命令将生成的 SQL 脚本导入到目标数据库中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1.生成需要修复的时间段的所有SQL操作:

  sudo mysqlbinlog -d mydb_test --start-datetime="2017-02-23 04:10:00" --stop-datetime="2017-02-23 13:00:00" /data/mysql/log/mysql- bin.* > mydb_test.sql

2.去掉INSERT_ID设定,以免冲突:

sed -i -e "s%^SET INSERT_ID=%#SET INSERT_ID=%g" mydb_test.sql

3.导入恢复的数据mydb_test.sql(-v 查看回滚信息,-f 跳过错误

mysql --host=xx.xx.xx.xx --port=3306 --user=xxxx --password=xxxxxx --comments --default-character-set=utf8 mydb_test -v -f < mydb_test.sql

MySQL中,redo log与undo logbinlog是三种不同类型的日志,用于在数据库崩溃或者事务回滚恢复数据。它们的写入时机和写入方式如下: 1. redo log的二阶段写入: MySQL的redo log是一种物理日志,用于记录修改数据的物理操作。在事务提交时,MySQL会将事务修改的数据先写入redo log缓冲区中,然后返回给客户端提交成功的消息。此时,事务的changes已经被写入到内存中的redo log缓冲区,但尚未持久化到磁盘。 MySQL会定时将redo log缓冲区中的changes批量写入磁盘,这个过程称为redo log的刷盘。MySQL采用的是redo log的二阶段写入机制,即先将redo log写入磁盘的redo log文件中,再将redo log标记为已提交。这样可以保证在MySQL崩溃时,可以通过redo log文件恢复数据。 2. undo log的写入时机: MySQL的undo log是一种逻辑日志,用于记录事务修改的数据行的旧值。在事务执行时,MySQL会将事务修改的数据行的旧值记录到undo log中。如果事务回滚MySQL会根据undo log中的旧值将数据恢复到事务开始之前的状态。 3. binlog的写入时机: MySQLbinlog是一种逻辑日志,用于记录对数据库执行的所有修改操作(包括INSERT、UPDATE和DELETE等)。在事务提交时,MySQL会将事务执行的修改操作记录到binlog中。binlog中记录的是SQL语句或者语句的逻辑描述,而不是物理操作。 MySQLbinlog可以用于数据备份和恢复,或者用于主从复制。在主从复制中,MySQL会将主数据库的binlog发送给从数据库,从数据库根据binlog中的SQL语句执行相应的修改操作,从而保证主从数据的一致性。 需要注意的是,redo log、undo logbinlogMySQL内部的机制,对于用户来说并不需要直接操作它们。用户只需要使用SQL语句执行相应的操作即可,MySQL会自动将修改操作记录到相应的日志中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值