在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来查看的.
执行:
mysqlbinlog C:/logs/demolog.000001
#081111 9:02:49 server id 1 end_log_pos 3501 Intvar
SET INSERT_ID=16/*!*/;
#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')/*!*/;
#081111 9:02:49 server id 1 end_log_pos 3646 Xid = 139
COMMIT/*!*/;
#081111 9:02:51 server id 1 end_log_pos 3674 Intvar
SET INSERT_ID=17/*!*/;
#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')/*!*/;
#081111 9:02:51 server id 1 end_log_pos 3819 Xid = 141
COMMIT/*!*/;
#081111 9:02:57 server id 1 end_log_pos 3847 Intvar
SET INSERT_ID=18/*!*/;
#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操作点之前的状态,还需要别的额外的什么操作吗?
如果不需要别的操作,我目前遇到的问题,就是这样执行以后,不报告错误,也不能改变数据库。
[quote]但是执行完毕以后,数据库中的数据并不会恢复到那个时间点,使用了
mysqlbinlog --stop-position="n" 这样的参数也不行。 [/quote]
貌似binlog功能只对事务性存储引擎有效,你不会使用的是MyISAM存储引擎吧
[quote]用mysqlbinlog --stop-date="2008-11-10 20:00" c:/logs/demo.000001 [color=red]|[/color]mysql -uroot -p 会报告错误。[/quote]
那个竖线是linux/unix上shell中的管道符,windows中不支持,mysql文档中都是在linux平台上的情况,windows上应该:
[quote]mysqlbinlog --stop-date="2008-11-10 20:00" c:/logs/demo.000001 -uroot -p [/quote]
直接给mysqlbinlog加上-uroot -p选项就行了
mysqlbinlog --stop-date="2008-11-10 20:00:00" c:/logs/demo.000001 | mysql -uroot -p
注意:[color=red]mysql文档中全部是基于linux操作系统进行讲解的,一定要注意linux命令中的管道符号,windows上可不支持这个[/color]
Innodb才ok把。。。如jones说的,存储引擎不支持事务把
[quote]ENGINE=InnoDB [/quote]
InnoDB 当然是事务型存储引擎了
mysqlbinlog c:/logs/demo.000001
查看一下
那个时间段是否包含在这个日志文件里边
mysqlbinlog --stop-date="2008-11-10 20:00:00" c:/logs/demo.000001 -uroot -p
mysqlbinlog c:/logs/demo.000001 查看日志内容
貌似只有该日志文件存在的时间段才会给恢复。。所以要确认里边日志里边的时间段
呵呵,这个问题可不好说了,估计是你mysql环境哪里有问题,实在不行换个版本试试