weixin_42298206 2008-11-11 08:03
浏览 2018
已采纳

mysqlbinlog 怎么将数据库恢复到指定的时间?

在windows 2003下安装了wamp server,其中的mysql开启了二进制日志功能,请问怎么样利用mysqlbinlog将数据恢复到指定的时间。

目前用mysqlbinlog --stop-date="2008-11-10 20:00" c:/logs/demo.000001 |mysql -uroot -p 会报告错误。

请问确切的使用方式是什么?
[b]问题补充:[/b]
在windows 2003下安装了wamp server,其中的mysql开启了二进制日志功能,请问怎么样利用mysqlbinlog将数据恢复到指定的时间。

目前用mysqlbinlog --stop-date="2008-11-10 20:00" c:/logs/demo.000001 |mysql -uroot -p 会报告错误。

请问确切的使用方式是什么?

================================
嗯,谢谢楼上几位的回答,目前已经不报告错误了。

但是执行完毕以后,数据库中的数据并不会恢复到那个时间点,使用了
mysqlbinlog --stop-position="n" 这样的参数也不行。

[b]问题补充:[/b]
在windows 2003下安装了wamp server,其中的mysql开启了二进制日志功能,请问怎么样利用mysqlbinlog将数据恢复到指定的时间。

目前用mysqlbinlog --stop-date="2008-11-10 20:00" c:/logs/demo.000001 |mysql -uroot -p 会报告错误。

请问确切的使用方式是什么?
[b]问题补充:[/b]
在windows 2003下安装了wamp server,其中的mysql开启了二进制日志功能,请问怎么样利用mysqlbinlog将数据恢复到指定的时间。

目前用mysqlbinlog --stop-date="2008-11-10 20:00" c:/logs/demo.000001 |mysql -uroot -p 会报告错误。

请问确切的使用方式是什么?

================================
嗯,谢谢楼上几位的回答,目前已经不报告错误了。

但是执行完毕以后,数据库中的数据并不会恢复到那个时间点,使用了
mysqlbinlog --stop-position="n" 这样的参数也不行。

应该是事务性的数据库

CREATE TABLE demotable (
id INTEGER(8) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) COLLATE latin1_swedish_ci DEFAULT '',
PRIMARY KEY (id)
)ENGINE=InnoDB
AUTO_INCREMENT=19 CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci'
COMMENT='InnoDB free: 4096 kB';

这里是测试的DDL,大家看看是不是用的InnoDB作为引擎的。

[b]问题补充:[/b]
在windows 2003下安装了wamp server,其中的mysql开启了二进制日志功能,请问怎么样利用mysqlbinlog将数据恢复到指定的时间。

目前用mysqlbinlog --stop-date="2008-11-10 20:00" c:/logs/demo.000001 |mysql -uroot -p 会报告错误。

请问确切的使用方式是什么?
[b]问题补充:[/b]
在windows 2003下安装了wamp server,其中的mysql开启了二进制日志功能,请问怎么样利用mysqlbinlog将数据恢复到指定的时间。

目前用mysqlbinlog --stop-date="2008-11-10 20:00" c:/logs/demo.000001 |mysql -uroot -p 会报告错误。

请问确切的使用方式是什么?

================================
嗯,谢谢楼上几位的回答,目前已经不报告错误了。

但是执行完毕以后,数据库中的数据并不会恢复到那个时间点,使用了
mysqlbinlog --stop-position="n" 这样的参数也不行。

[b]问题补充:[/b]
在windows 2003下安装了wamp server,其中的mysql开启了二进制日志功能,请问怎么样利用mysqlbinlog将数据恢复到指定的时间。

目前用mysqlbinlog --stop-date="2008-11-10 20:00" c:/logs/demo.000001 |mysql -uroot -p 会报告错误。

请问确切的使用方式是什么?
[b]问题补充:[/b]
在windows 2003下安装了wamp server,其中的mysql开启了二进制日志功能,请问怎么样利用mysqlbinlog将数据恢复到指定的时间。

目前用mysqlbinlog --stop-date="2008-11-10 20:00" c:/logs/demo.000001 |mysql -uroot -p 会报告错误。

请问确切的使用方式是什么?

================================
嗯,谢谢楼上几位的回答,目前已经不报告错误了。

但是执行完毕以后,数据库中的数据并不会恢复到那个时间点,使用了
mysqlbinlog --stop-position="n" 这样的参数也不行。

应该是事务性的数据库

CREATE TABLE demotable (
id INTEGER(8) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) COLLATE latin1_swedish_ci DEFAULT '',
PRIMARY KEY (id)
)ENGINE=InnoDB
AUTO_INCREMENT=19 CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci'
COMMENT='InnoDB free: 4096 kB';

这里是测试的DDL,大家看看是不是用的InnoDB作为引擎的。

应该是有的,因为我也使用了--stop-position="n"这样的参数来恢复,而参数中的n就是根据show binlog events来查看的.

[b]问题补充:[/b]

执行:
mysqlbinlog C:/logs/demolog.000001

at 3473

#081111 9:02:49 server id 1 end_log_pos 3501 Intvar
SET INSERT_ID=16/*!*/;

at 3501

#081111 9:02:49 server id 1 end_log_pos 3619 Query thread_id=10 exec_tim
e=0 error_code=0
SET TIMESTAMP=1226365369/*!*/;
[color=red]INSERT INTO demotable (id,name) VALUES (NULL,'p')/*!*/;

at 3619[/color]

#081111 9:02:49 server id 1 end_log_pos 3646 Xid = 139
COMMIT/*!*/;

at 3646

#081111 9:02:51 server id 1 end_log_pos 3674 Intvar
SET INSERT_ID=17/*!*/;

at 3674

#081111 9:02:51 server id 1 end_log_pos 3792 Query thread_id=10 exec_tim
e=0 error_code=0
SET TIMESTAMP=1226365371/*!*/;
INSERT INTO demotable (id,name) VALUES (NULL,'q')/*!*/;

at 3792

#081111 9:02:51 server id 1 end_log_pos 3819 Xid = 141
COMMIT/*!*/;

at 3819

#081111 9:02:57 server id 1 end_log_pos 3847 Intvar
SET INSERT_ID=18/*!*/;

at 3847

#081111 9:02:57 server id 1 end_log_pos 3964 Query thread_id=10 exec_tim
e=0 error_code=0
SET TIMESTAMP=1226365377/*!*/;

这样,我执行:

mysqlbinlog --stop-position="3646" C:/logs/demolog.000001 -uroot -p
或者:
mysqlbinlog --stop-date="2008-11-11 9:02:48" C:/logs/demolog.000001 -uroot -p

这样是不是就可以把数据库恢复到9:02:49之前的数据库状态,或者是就是3646操作点之前的状态,还需要别的额外的什么操作吗?

如果不需要别的操作,我目前遇到的问题,就是这样执行以后,不报告错误,也不能改变数据库。

  • 写回答

10条回答 默认 最新

  • iteye_521 2008-11-11 09:28
    关注

    [quote]但是执行完毕以后,数据库中的数据并不会恢复到那个时间点,使用了
    mysqlbinlog --stop-position="n" 这样的参数也不行。 [/quote]
    貌似binlog功能只对事务性存储引擎有效,你不会使用的是MyISAM存储引擎吧

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用