Mysql数据库日志,备份及回滚操作

本文介绍了如何在Windows环境下配置MySQL的二进制日志,包括查看、暂停、删除日志的操作。同时详细讲解了数据库的完全备份与增量备份的方法,以及如何进行数据库的恢复,特别强调了在恢复过程中如何避免不必要的日志记录。
一、打开二进制日志配置 :

在Windows系统下,对mysql的my.ini的log-bin等进行配置目录位置时,假设要将log-bin的日志配置到D盘的mysqllog的文件为binlog。则可以如下配置 :

[mysqld]

log-bin="D:\mysqllog/binlog"  注意:在这里的最后一个路径采用的是"/"而不是Windows文件系统的“\"


二、二进制日志处理:

1、查看

采用Mysqlbinlog.exe。可以在安装目录的Server里的Bin目录下找到。

查看: cmd> mysqlbinlog.exe filename (添加 --database [databasename] 可以查看某个特定的数据库的sql日志)

2、暂停日志记录

mysql> SET SQL_LOG_BIN=0/1  设置为0:表示暂停记录;否则为1;

3、删除二进制日志

mysql> RESETMASTER;  (注意,将删除全部,要小心!!!!)

mysql> PURGE MASTER LOGS TO filename.number: 删除编号小于number的日志;

mysql> PURGE MASTER LOGS BEFORE 'yyyy-mm-dd hh:MM:ss' : 删除日志前的日志;

4、刷新日志,使得当前的日志编号增加一

采用MysqlAdmin.exe. 可以在安装目录的Server里的Bin目录下找到。

如当前的服务器的日志文件为: binlog.000002

则执行: cmd> mysqladmin -u root -p flush-logs    :输入密码

执行之后,在二进制日志目录下会增加一个新的日志文件: binlog.000003。此后,服务器的新日志将会写到binlog.000003。

此做法很适合于增量备份时使用。


三、数据库备份与还原

采用mysqldump.exe. 可以在安装目录的Server里的Bin目录下找到。

1、完全备份:

cmd> mysqldump -u root -p test > test.sql   :输入密码  将会备份数据库名为test的数据库到mysqldump.exe所在的目录的test.sql文件。

2、完全备份整个服务器的数据库,并刷新日志文件:

刷新日志文件的目的:告诉服务器将日志写到新的日志文件,为此,将来进行的备份就不用再进行完全备份了,只需要备份新的日志文件。实现”增量备份“

cmd> mysqldump -u root -p --flush-logs   执行之后将会生成更多的新的日志文件。如备份3个数据库时,会再生成3个日志文件。因为3个数据库的备份是被看成3个不同的事务执行的。因此,加上:--single-transaction 标记之后,将作为一个事务。因此,只会增加一个日志文件。

3、还原操作:

注意:由于一般情况下,系统的二进制日志是打开的,因此,执行还原时,会将还原的sql代码同样写入到日志。当显然,这些代码并不一定是需要存在的。因此,可以用暂停二进制日志的方式进行避免,但是,我在测试时,发现采用:SET SQL_LOG_BIN=0并不能做到。因此,可以采用以下的做法:

    1)、刷新一个日志文件: cmd> mysqladmin -u root -p flush-logs. (这个文件用于存放还原时产生的日志,而不会影响原来的日志)

    2)、执行还原一个数据库:test:cmd> mysql  -u -root -p < test.sql; 

    3)、再将”增量“的日志执行到数据库test(要小心,不要执行其他数据库的二进制日志):

        cmd>  mysqlbinlog log.number | mysql -u root -p test 。

        可以加入--database [name]的参数,指定只选择增量还原某个数据库的sql。如针对 test数据库: 

        cmd> mysqlbinlog log.number --database test | mysql -u root -p test

    4)、在此过程生成的日志文件可以考虑删除。因为是原来的数据。


<think>好的,用户需要了解如何在MySQL回滚误更新的数据。首先,我得回忆一下MySQL的事务处理机制。记得事务需要支持回滚的话,必须使用支持事务的存储引擎,比如InnoDB,而MyISAM是不支持的。所以第一步要确认用户使用的表引擎是不是InnoDB。 然后,用户可能没有开启事务,或者没有正确使用事务语句。正确的步骤应该是用BEGIN或者START TRANSACTION来开始事务,然后执行更新操作,如果发现错误,用ROLLBACK来回滚。如果没问题,就COMMIT提交。但用户可能没有显式地开始事务,导致自动提交模式开启,这样每条语句都会立即提交,无法回滚。 接下来,用户提到的误更新可能是在没有事务的情况下执行的,这时候常规的事务回滚可能不适用。这时候可能需要使用备份恢复或者binlog来恢复数据。不过这种方法比较复杂,需要用户有之前的备份或者开启了二进制日志。 另外,引用中提到的参考资料里提到,使用Spring事务时,插入操作无法回滚可能是因为存储引擎的问题。这也提醒用户检查存储引擎是否正确设置。 可能用户没有意识到自动提交的设置,可以通过查看@@autocommit变量来确认,如果是1的话,需要手动开启事务。此外,使用FLASHBACK工具需要MySQL版本支持,或者利用binlog导出SQL再恢复,这步骤可能对用户来说有点难度,需要详细说明步骤。 总结下来,回答应该分几种情况:如果事务未提交,如何回滚;如果已经提交,如何通过备份日志恢复。同时要强调存储引擎的重要性,以及检查自动提交设置。还要提供预防措施,比如定期备份、使用事务、开启binlog等。 需要确保回答结构清晰,步骤明确,用户能按步骤操作。同时生成的相关问题要围绕事务使用、存储引擎区别、数据恢复方法等方面,帮助用户进一步了解相关知识。</think>### MySQL数据库误更新回滚操作方法 #### 一、使用事务回滚(适用于未提交的操作) 1. **确认存储引擎为InnoDB** MySQL中只有InnoDB引擎支持事务回滚,需先检查表类型: ```sql SHOW TABLE STATUS LIKE '表名'; ``` 若`Engine`字段显示`InnoDB`则可继续操作[^2][^4]。 2. **显式开启事务** 在操作前通过以下命令开启事务: ```sql START TRANSACTION; -- 或 BEGIN; ``` 3. **执行更新语句** ```sql UPDATE 表名 SET 字段 = 新值 WHERE 条件; ``` 4. **回滚操作** 若发现更新错误,立即执行: ```sql ROLLBACK; ``` 此时更新会被撤销[^1][^4]。 --- #### 二、已提交事务的恢复方法 若误操作已提交(如未显式开启事务且`@@autocommit=1`),需通过以下途径恢复: 1. **使用备份恢复** - 通过`mysqldump`或物理备份文件还原至更新前的状态 - 需满足条件:**存在有效备份** 2. **通过binlog恢复(需开启二进制日志)** 步骤: ```bash # 1. 解析binlog找到误操作位置点 mysqlbinlog --start-datetime="误操作前时间" --stop-datetime="误操作后时间" binlog文件 > tmp.sql # 2. 反向生成恢复SQL cat tmp.sql | grep -v "误操作语句" > rollback.sql # 3. 执行恢复 mysql -u root -p < rollback.sql ``` 3. **使用MySQL Flashback工具(如MyFlash)** 第三方工具可直接生成反向SQL: ```bash ./myflash --binlogFile=mysql-bin.000001 --startPos=1234 --endPos=5678 --outputFile=rollback.sql ``` --- #### 三、关键注意事项 1. **自动提交模式检查** 执行`SELECT @@autocommit;`,若返回`1`则每次更新会立即生效,需通过`SET autocommit=0`临时关闭(需配合显式事务)。 2. **预防措施** - 生产环境操作前开启事务验证 - 定期备份+binlog保留至少7天 - 使用`--safe-updates`参数防止无WHERE条件更新 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值