window下使用二进制文件对mysql数据库备份及恢复(再现用户操作)

本文介绍如何在MySQL中启用二进制日志文件,备份数据库,以及如何利用这些日志进行精确的数据恢复,包括按时间点和操作点恢复的方法。

1,查看二进制日志文件是否启用

mysql>show variables like 'log_bin';

如果未启用,则启用二进制文件(默认是关闭的 )

2,在mysql的配置文件[mysqld]区域加上如下配置

log-error=  #记录错误日志
#log=         #记录所有日志
#log-slow-queries=   #记录慢查询日志
#log-update=             #记录更新
log-bin=                      #二进制日志

以上默认只启用错误日志,和二进制日志,可以指定日志文件名(如log-bin=logBin.log)如果不指定文件名在使用默认文件名(主机名-bin-000001)

3.重启mysql服务(net stop mysql 和 net start mysql)win7下以管理员身份运行command line客户端

到此为止,二进制文件启用成功

4,开始备份数据库

 mysqldump -uroot -p123456 database_name>d:/backup20070713.sql
5,恢复数据库:删除原有数据库,建立数据库,把备份数据库导入

    mysqladmin -uroot -p123456 drop database_name

    mysqladmin -uroot -p123456 create database_name

    mysql -uroot -p123456 database_name<d:/backup20070713.sql

    注:在导入备份数据库前,database_name如果没有,是需要创建的;而且与backup20070713.sql中数据库名是一样的才能导入。

6,使用二进制文件再现用户操作,即恢复到想恢复的时刻(如不小心误删除,错误更新等....)

使用日志文件恢复数据库必须要有一个数据库备份(只要是在二进制日志文件功能开启之后备份的就行)。恢复数据库时,可以通过时间恢复,也可以通过操作点恢复。

(1)、通过时间恢复方法如下:

如果我在2011-04-02 00:00:00时刻开启了二进制日志文件功能,并备份了数据库文件。且在2011-04-02 12:00:00数据库发生异常,需要恢复到2011-04-0210:00:00。则操作如下:

l       用备份将数据库回复到2011-04-0200:00:00时候的状态。

l       在命令行输入如下命令:

mysqlbinlog--stop-date="2011-04-02 10:00:00" mysql安装目录\data\binary-log.000001  | mysql -u root –p

这样,系统会自动执行从二进制日志有记录开始截止到2011-04-02 10:00:00,用户所做过的所有操作。与stop-date对应的,还有start-date属性,可以设定执行记录的开始时间。也可以两个属性都设置。

 

2、通过操作点恢复方法如下:

在命令行中输入mysqlbinlog D:\binary-log.000003 > D:\log.txt,执行后打开log.txt,查看里面语句,可以发现:在每个操作之前,都会有一个独特的编号,如下红字显示:

/*!*/;

# at 450 /*编号450*/

#110402 15:31:50 server id 1 end_log_pos 529       Query       thread_id=2    exec_time=0         error_code=0

SET TIMESTAMP=1301729510/*!*/;

DROP TABLE `jwc`

此编号随着操作数增多而变大。和时间一样是一个标记,通过操作点恢复的语句如下:

mysqlbinlog --stop-position="450" mysql安装目录\data\binary-log.000001  | mysql -u root –p

这样,系统会自动执行二进制日志中编号最低的语句到编号450语句。与stop-position对应的,还有start-position属性,可以设定执行记录的开始编号。


Windows环境下,可以利用MySQL的binlog(二进制日志)通过`mysqlbinlog`工具来恢复数据。下面是具体操作方法: ### 利用指定binlog文件恢复 进入`data`目录下,使用如下命令将指定的`binlog`文件内容恢复数据库中。示例命令如下: ```bash mysqlbinlog --no-defaults --set-charset=utf8 C:\software\mysql\mysql-master\data\master-bin.000004 | mysql -uroot -proot123 ``` 上述命令中,`--no-defaults`表示不读取默认选项文件;`--set-charset=utf8`指定字符集为`utf8`;`C:\software\mysql\mysql-master\data\master-bin.000004`是具体的`binlog`文件路径;`mysql -uroot -proot123`是使用`root`用户`root123`密码登录到MySQL中执行恢复操作 [^1]。 ### 按位置范围恢复 可以按`binlog`文件的开始结束位置进行读取并恢复。例如读取`mysql-bin.000003`从开始位置`154`到结束位置`99568`,并输出到`C`盘下的`MySQL.sql`文件。示例命令如下: ```bash mysqlbinlog --start-position=154 --stop-position=99568 C:\Program Files\mysql-5.7.23-winx64\mysql-5.7.23-winx64\data\mysql-bin.000003 > C:\MySQL.sql ``` 之后可以通过以下命令将生成的`MySQL.sql`文件内容恢复数据库中: ```bash mysql -uroot -proot123 < C:\MySQL.sql ``` 这里`--start-position`指定开始位置,`--stop-position`指定结束位置 [^3]。 ### 按日期范围恢复 如果要恢复某一天的所有操作,可以按日期范围进行恢复。例如要把2010 - 06 - 06这一天的所有操作导入到`1234.sql`里,示例命令如下: ```bash mysqlbinlog --start-datetime="2010-06-06 00:00:00" --stop-datetime="2010-06-07 00:00:00" C:\path\to\your\binlog\files > 1234.sql ``` 然后使用以下命令将`1234.sql`文件内容恢复数据库: ```bash mysql -uroot -proot123 < 1234.sql ``` 需要注意的是,有些操作如`insert into a select uuid();`这类包含随机数的操作不记录二进制,可能需要特殊处理 [^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值