mysql全量备份的sql文件,可以恢复到具体某一个时间点以及单张表啊?

oraclemch 2010-12-21 09:20:59
mysql全量备份的sql文件,可以恢复到具体某一个时间点以及单张表啊?
今天凌晨3点备份的mysql20101221030000.sql。
1, 单独恢复csf库到昨天下午13:15:00的数据。

2,单独恢复csf库下面的csf_put表到昨天上午13:05:00时的数据。

大家有什么方案没有啊,谢谢了!
...全文
1688 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
小小小小周 2010-12-21
  • 打赏
  • 举报
回复
mysqlbinlog --stop-date="2010-12-20 13:15:00" mysql-bin.000006 > .txt里面看看.是不是正确的.
要是大的话,你修改时间来还原:比如2010-12-20 13:15:00 改成2010-12-20 13:00:00 ...看看别的表的数据有没有恢复.
还原的方法是这样,
你仔细检查下.
oraclemch 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mr_mablevi 的回复:]
引用 11 楼 oraclemch 的回复:

第一种办法我试过了,命令没有报错,但是恢复不了别的表的truncate数据了!
……

那就说明你这个时刻的binlog没有 别的表的 记录呗.
[/Quote]

但是我的表是这个时候truncate的啊!
小小小小周 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 oraclemch 的回复:]

第一种办法我试过了,命令没有报错,但是恢复不了别的表的truncate数据了!
……
[/Quote]
那就说明你这个时刻的binlog没有 别的表的 记录呗.
oraclemch 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mr_mablevi 的回复:]
1,要么你手动创建该表,完成恢复后再删除;
2,用下该参数: --force-read,-f
使用该选项,如果mysqlbinlog读它不能识别的二进制日志事件,它会打印警告,忽略该事件并继续。没有该选项,如果mysqlbinlog读到此类事件则停止。
[/Quote]

第一种办法我试过了,命令没有报错,但是恢复不了别的表的truncate数据了!
小小小小周 2010-12-21
  • 打赏
  • 举报
回复
1,要么你手动创建该表,完成恢复后再删除;
2,用下该参数: --force-read,-f
使用该选项,如果mysqlbinlog读它不能识别的二进制日志事件,它会打印警告,忽略该事件并继续。没有该选项,如果mysqlbinlog读到此类事件则停止。
oraclemch 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]
不能!
全备只不过是你做备份时间点的一个“快照”

你的这种需求只能通过增备的文件(BINLOG)来实现。

1, 单独恢复csf库到昨天下午13:15:00的数据。
找到 昨天下午13:15:00 之前的最新的备份,比如  昨天凌晨3点, 然后再通过BINLOG进行恢复,恢复中你可以MYSQLBINLOG --DATABASE来仅导出你需要的数据库 csf库 的SQL语句。

2……
[/Quote]



[root@ldap-mysql-svn-trac var]# /usr/local/mysql/bin/mysqlbinlog --stop-date="2010-12-20 13:15:00" mysql-bin.000006|mysql -uroot -p123456;
ERROR 1051 (42S02) at line 32: Unknown table 'fin_cell_attr_his'

我这样恢复报错,怎么办?这个'fin_cell_attr_his'表是历史数据表,没有用,我删除掉了。我的存储引擎是myisam,现在如何办?
小小小小周 2010-12-21
  • 打赏
  • 举报
回复
可以.myisam,innodb存储引起都可以用该方法.
oraclemch 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mr_mablevi 的回复:]
那就拿昨天凌晨3点全备恢复,再用该备份后的binlog 按狼头大哥说的这样还原就可以了.还原单表的话,则需要自己手动筛选找出相应操作的sql语句.
[/Quote]

我的是myisam存储引擎,也可以这样恢复吗?
小小小小周 2010-12-21
  • 打赏
  • 举报
回复
那就拿昨天凌晨3点全备恢复,再用该备份后的binlog 按狼头大哥说的这样还原就可以了.还原单表的话,则需要自己手动筛选找出相应操作的sql语句.
oraclemch 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]
不能!
全备只不过是你做备份时间点的一个“快照”

你的这种需求只能通过增备的文件(BINLOG)来实现。

1, 单独恢复csf库到昨天下午13:15:00的数据。
找到 昨天下午13:15:00 之前的最新的备份,比如  昨天凌晨3点, 然后再通过BINLOG进行恢复,恢复中你可以MYSQLBINLOG --DATABASE来仅导出你需要的数据库 csf库 的SQL语句。

2……
[/Quote]

不好意思,第2个也是下午13:05:00,把下午错写成上午了!
oraclemch 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mr_mablevi 的回复:]
没有binlog是还原不了的,要想还原到昨天下午13:15:00 需要昨天该时间前的全备和全备之后的binlog日志.才能定点还原.
[/Quote]

有binlog日志的。
ACMAIN_CHM 2010-12-21
  • 打赏
  • 举报
回复
不能!
全备只不过是你做备份时间点的一个“快照”

你的这种需求只能通过增备的文件(BINLOG)来实现。

1, 单独恢复csf库到昨天下午13:15:00的数据。
找到 昨天下午13:15:00 之前的最新的备份,比如  昨天凌晨3点, 然后再通过BINLOG进行恢复,恢复中你可以MYSQLBINLOG --DATABASE来仅导出你需要的数据库 csf库 的SQL语句。

2,单独恢复csf库下面的csf_put表到昨天上午13:05:00时的数据。
“昨天上午13:05:00” 这是什么时候?!

基本同第一条,对单表,你需要自己手工在导出的SQL语句中进行筛选。

更常见的做法,先恢复全数据库CSF到另一个空的临时数据库中,然后再把其中的表csf_put导出。
小小小小周 2010-12-21
  • 打赏
  • 举报
回复
没有binlog是还原不了的,要想还原到昨天下午13:15:00 需要昨天该时间前的全备和全备之后的binlog日志.才能定点还原.
rucypli 2010-12-21
  • 打赏
  • 举报
回复
不能 看你从业务逻辑能恢复吗
oraclemch 2010-12-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 mr_mablevi 的回复:]
mysqlbinlog --stop-date="2010-12-20 13:15:00" mysql-bin.000006 > .txt里面看看.是不是正确的.
要是大的话,你修改时间来还原:比如2010-12-20 13:15:00 改成2010-12-20 13:00:00 ...看看别的表的数据有没有恢复.
还原的方法是这样,
你仔细检查下.
[/Quote]

明白了,谢谢!

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧