用mysqlbinlog恢复MySQL数据库
要是MySQL办事器启用了二进制日志,你可以利用mysqlbinlog东西来规复从指定的时间点开端(比方,从你末了一次备份)直到如今或另一个指定的时间点的数据。关于启用二进制日志的信息,参见5.11.3节,“二进制日志”。对于mysqlbinlog的细致信息,参见mysql手册8.6节,“mysqlbinlog:用于处置惩罚二进制日志文件的实用东西”。
要想从二进制日志规单数据,你需要知道当前二进制日志文件的路径和文件名。一样平常可以从选项文件(即my.cnf ormy.ini,取决于你的体系)中找到路径。要是未包含在选项文件中,当办事器启动时,可以在命令行中以选项的情势给出。启用二进制日志的选项为--log-bin。要想确定当前的二进制日志文件的文件名,输入下面的MySQL语句:
SHOW BINLOG EVENTS G
你还可以从命令行输入下面的内容:
mysql --user=root -pmy_pwd -e 'SHOW BINLOG EVENTS G'
将暗码my_pwd替换为办事器的root暗码。
1. 指定规复时间
对于MySQL4.1.4,可以在mysqlbinlog语句中经过--start-date和--stop-date选项指定DATETIME格式的起止时间。举例说明,假定在本日上午10:00(本日是2005年4月20日),执行SQL语句来删除一个大表。要想规复表和数据,你可以规复前晚上的备份,并输入:
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456
| mysql -u root -pmypwd
该命令将规复截止到在--stop-date选项中以DATETIME格式给出的日期和时间的所有数据。要是你没有检测到几个小时后输入的错误的SQL语句,可能你想要规复背面发生的活动。凭据这些,你可以用起使日期和时间再次运行mysqlbinlog:
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456
| mysql -u root -pmypwd
在该行中,从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据规复到上午10:00前一秒钟。你应查抄日志以确保时间确切。下一节介绍怎样实现。
2. 指定规复位置
也可以不指定日期和时间,而利用mysqlbinlog的选项--start-position和--stop-position来指定日志位置。它们的作用与起止日选项雷同,差别的是给出了从日志起的位置号。利用日志位置是更正确的规复要领,特别是当由于粉碎性SQL语句同时发生很多事件的时候。要想确定位置号,可以运行mysqlbinlog寻找执行了不盼望的事件的时间范围,但应将效果重新指向文本文件以便进行查抄。操纵要领为:
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00"
/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
该命令将在/tmp目次创立小的文本文件,将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件,寻找你不要想重复的语句。要是二进制日志中的位置号用于停止和继续规复操纵,应进行解释。用log_pos加一个数字来标志位置。利用位置号规复了曩昔的备份文件后,你应从命令行输入下面内容:
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456
| mysql -u root -pmypwd
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456
| mysql -u root -pmypwd
下面的第1即将规复到停止位置为止的所有事件。下一即将规复从给定的肇始位置直到二进制日志竣事的所有事件。因为mysqlbinlog的输入包括每个SQL语句记载之前的SET TIMESTAMP语句,规复的数据和相关MySQL日志将反应事件执行的原时间。
- 文章作者: 福州军威计算机技术有限公司
军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。
TAG:
评论加载中...
|