我将使用日志文件恢复我的MySQL数据库表。我的数据库名是"decsys“。
我已经使用日志文件创建了sql。
C:\wamp\bin\mysql\mysql5.5.8\bin>mysqlbinlog -d decsys C:\wamp\bin\mysql\mysql5.5.8\data\mysql-bin.0000xx > sql1.sql (file size 8GB)
我要恢复的不是整个数据库,只有一个表。(表名:cm)。
发布于 2015-02-01 23:40:48
最可靠的方法是将所有数据库--整个服务器--还原到另一台机器上,方法是加载备份(转储)文件并回放适当的日志,从转储开始的binlog坐标开始.然后使用mysqldump
提取一个感兴趣的表,并将其复制到所需的目标。
无论如何,你必须首先从备份中恢复一些东西--我假设你理解,但没有提到。回放二进制日志可以捕获还原备份和日志结束之间发生的事件。
据我所知,播放单个表的行事件是不支持的。但是,即使以这种方式恢复单个数据库(模式)也是一项复杂的操作。
只有当创建日志条目的服务器上的--database
或-d
设置为ROW
时,mysqlbinlog
的binlog_format
选项才能准确地确定所需的数据库;或者,如果二进制日志是由启用log_slave_updates
的副本生成的,则级联中至少有一个服务器(包括最后一个服务器)将其binlog_format
设置为ROW
,因为这会将复制事件强制转换为ROW
格式,这是一个单向进程。
如果事件没有以ROW
格式登录,那么在没有服务器上的所有其他数据的情况下,无法保证二进制日志的正确工作。如果--database
或-d
选项没有以ROW
格式登录,也不可能确定它们是否会捕获所有语句,因为它们与USE
语句的交互以及MySQL如何解释复制事件的其他复杂问题。
这并不意味着mysqlbinlog
被破坏,只意味着它是一个高级工具,只能在复制工作方式的约束下使用。
二进制日志格式是为将更改从一台服务器复制到另一台服务器而设计的,并且只包含足够的信息,当所讨论的两台服务器以相同的数据集开始时--因此引用从备份恢复。
另外,在生产系统中回放二进制日志并不是你想要做的事情,除非你的生产系统被损坏得如此严重,以至于你别无选择,只能从备份中完全重新加载它,并且想要通过可用的日志进行回放,以尽量减少丢失的数据量。
https://dba.stackexchange.com/questions/90723
复制相似问题