`

MySQL数据库恢复(使用mysqlbinlog命令)

 
阅读更多

1:开启binlog日志记录 
修改mysql配置文件mysql.ini,在[mysqld]节点下添加 

复制代码代码如下:

# log-bin 
log-bin = E:/log/logbin.log 


路径中不要包含中文和空格。重启mysql服务。通过命令行停止和启动mysql服务 

复制代码代码如下:

c:\>net stop mysql
c:\>net start mysql


进入命令行进入mysql并查看二进制日志是否已经启动 
Sql代码 

复制代码代码如下:

mysql>show variables like 'log_%'; 


日志成功开启后,会在E:/log/目录下创建logbin.index和logbin.000001两个文件。logbin.000001就是数据库的备份文件,以后就可以通过此文件对数据库进行恢复操作。 

2:查看备份的二进制文件 
Sql代码 

复制代码代码如下:

c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001 


日后记录的操作多了,命令行方式基本就用不上了。可以使用将日志导出文件的方式来查看日志内容 
2.1 导出 
Xml代码 

复制代码代码如下:

c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001 > e:/log/log.txt 


">": 导入到文件中; ">>": 追加到文件中 
如果有多个日志文件 
Sql代码 

复制代码代码如下:

c:\mysql\bin\> mysqlbinlog e:/log/logbin.000001 > e:/log/log.sql 
c:\mysql\bin\> mysqlbinlog e:/log/logbin.000002 >> e:/log/log.sq 


2.2 按指定位置导出: 
Sql代码 

复制代码代码如下:

c:\mysql\bin\>mysqlbinlog --start-position=185 --stop-position=338 e:/log/logbin.000001 > e:/log/log3.txt 


2.3 按指定时间导出: 
Xml代码 

复制代码代码如下:

c:\mysql\bin\>mysqlbinlog --start-datetime="2010-01-07 11:25:56" --stop-datetime="2010-01-07 13:23:50" e:/log/logbin.000001 > e:/log/log_by_date22.txt 


3:从备份恢复数据库 
做了一次更新操作,之后日志的内容如下: 
Sql代码 

复制代码代码如下:

/*!40019 SET @@session.max_insert_delayed_threads=0*/; 
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; 
DELIMITER /*!*/; 
# at 4 
#110107 13:23:50 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.53-community-log created 110107 13:23:50 at startup 
# Warning: this binlog is either in use or was not closed properly. 
ROLLBACK/*!*/; 
BINLOG ' 
ZqMmTQ8BAAAAZgAAAGoAAAABAAQANS4xLjUzLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAABmoyZNEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC 
'/*!*/; 
# at 106 
#110107 13:26:58 server id 1 end_log_pos 185 Query thread_id=44 exec_time=1 error_code=0 
SET TIMESTAMP=1294378018/*!*/; 
SET @@session.pseudo_thread_id=44/*!*/; 
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/; 
SET @@session.sql_mode=1344274432/*!*/; 
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; 
/*!\C utf8 *//*!*/; 
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/; 
SET @@session.lc_time_names=0/*!*/; 
SET @@session.collation_database=DEFAULT/*!*/; 
BEGIN 
/*!*/; 
# at 185 
#110107 13:26:58 server id 1 end_log_pos 338 Query thread_id=44 exec_time=1 error_code=0 
use ncl-interactive/*!*/; 
SET TIMESTAMP=1294378018/*!*/; 
UPDATE `t_system_id` SET `id_value`='3000' WHERE (`table_name`='t_working_day') 
/*!*/; 
# at 338 
#110107 13:26:58 server id 1 end_log_pos 365 Xid = 8016 
COMMIT/*!*/; 
DELIMITER ; 
DELIMITER /*!*/; 
DELIMITER ; 
# End of log file 
ROLLBACK /* added by mysqlbinlog */; 
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; 
/*!40019 SET @@session.max_insert_delayed_threads=0*/; 
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; 
DELIMITER /*!*/; 
# at 4 
#110107 13:23:50 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.53-community-log created 110107 13:23:50 at startup 
# Warning: this binlog is either in use or was not closed properly. 
ROLLBACK/*!*/; 
BINLOG ' 
ZqMmTQ8BAAAAZgAAAGoAAAABAAQANS4xLjUzLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAABmoyZNEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC 
'/*!*/; 
# at 106 
#110107 13:26:58 server id 1 end_log_pos 185 Query thread_id=44 exec_time=1 error_code=0 
SET TIMESTAMP=1294378018/*!*/; 
SET @@session.pseudo_thread_id=44/*!*/; 
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/; 
SET @@session.sql_mode=1344274432/*!*/; 
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; 
/*!\C utf8 *//*!*/; 
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/; 
SET @@session.lc_time_names=0/*!*/; 
SET @@session.collation_database=DEFAULT/*!*/; 
BEGIN 
/*!*/; 
# at 185 
#110107 13:26:58 server id 1 end_log_pos 338 Query thread_id=44 exec_time=1 error_code=0 
use ncl-interactive/*!*/; 
SET TIMESTAMP=1294378018/*!*/; 
UPDATE `t_system_id` SET `id_value`='3000' WHERE (`table_name`='t_working_day') 
/*!*/; 
# at 338 
#110107 13:26:58 server id 1 end_log_pos 365 Xid = 8016 
COMMIT/*!*/; 
DELIMITER ; 
DELIMITER /*!*/; 
DELIMITER ; 
# End of log file 
ROLLBACK /* added by mysqlbinlog */; 
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; 


3.1 恢复: 
Sql代码 

复制代码代码如下:

c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001 | mysql -u root -p 


3.2 按指定位置恢复: 
Sql代码 

复制代码代码如下:

c:\mysql\bin\>mysqlbinlog --start-position=185 --stop-position=338 e:/log/logbin.000001 | mysql-u root -p 


3.3 按指定时间恢复: 
Xml代码 

复制代码代码如下:

c:\mysql\bin\>mysqlbinlog --start-datetime="2010-01-07 11:25:56" --stop-datetime="2010-01-07 13:23:50" e:/log/logbin.000001 | mysql -u root -p 


3.4 通过导出的脚本文件恢复 
Sql代码 

复制代码代码如下:

c:\mysql\bin\>mysql -e "source e:/log/log.sql" 


4.其他常用操作 
4.1 查看所有日志文件 

Sql代码 

复制代码代码如下:

mysql>show master logs; 


4.2 当前使用的binlog文件 
Sql代码 

复制代码代码如下:

mysql>show binlog events \g; 


4.3 产生一个新的binlog日志文件 
Sql代码 

复制代码代码如下:

mysql>flush logs; 


4.4 删除所有二进制日志,并从新开始记录(注意:reset master命令会删除所有的二进制日志) 
Sql代码 

复制代码代码如下:

mysql > flush logs; 
mysql > reset master; 


4.5 快速备份数据到sql文件 

Sql代码 

复制代码代码如下:

c:\mysql\bin>mysqldump -u root -p --opt --quick interactive > e:/log/mysqldump.sql 


为了方便查看,把从脚本恢复的命令在写一次 
Sql代码 

复制代码代码如下:

c:\mysql\bin\>mysql -e "source e:/log/mysqldump.sql" 
分享到:
评论

相关推荐

    MySQL数据库运维之数据恢复的方法

    之前三篇文章分别介绍了MySQL数据库常见的备份方法,其中包括逻辑备份和物理备份,本篇将总结一下MySQL数据库的数据恢复相关内容。这些数据恢复方案在之前备份内容介绍时,此处总结一下恢复方案,并结合数据库的二...

    MySQL数据库增量数据恢复案例

     MySQL数据库每日零点自动全备  某天上午10点,小明莫名其妙地drop了一个数据库  我们需要通过全备的数据文件,以及增量的binlog文件进行数据恢复  二、主要思想  利用全备的sql文件中记录的CHANGE MASTER...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    03-学会使用MySQL数据库的帮助.avi 04-修改mysql密码多方法实战及注意-排错.avi 05-找回丢失的mysql密码实战.avi 06-多实例找回丢失的mysql密码.avi 07-SQL语言介绍及分类详解.avi 08-创建不同字符集数据库及企业...

    Linux上通过binlog文件恢复mysql数据库详细步骤

    为了显示这些二进制内容,我们可以使用mysqlbinlog命令来查看。  用途1:主从同步  用途2:恢复数据库(也是线上出现一次数据库文件丢失后,才对这个有所了解并学习的)  mysqlbinlog命令用法:shell> ...

    MySQL执行delete误删除数据恢复

    寻求专业帮助:如果以上方法无法解决问题,可以寻求专业的数据库恢复服务公司的帮助。 无论采用何种方式,对数据库的误删操作都需要谨慎处理。在恢复数据的过程中,务必确保不会对现有数据造成更大的影响。同时,...

    数据库灾难性恢复(数据库技术;灾难性;恢复;数据备份)

    工程师通过技术手段读取将数据都恢复为可以读的数据,数据恢复不是靠一两种软件就可以完成,往往需要数个工程师靠经验不同的方式才能恢复数据,当然数据库恢复还包括各种操作系统:除普通的WINDOWS外,还有Unix、...

    MySQL8.0中binlog的深入讲解

    主要作用:复制、恢复和审计。 3 开启Binlog 3.1 查询当前 MySQL 是否支持 binlog 如下OFF代表不支持 3.2 修改 my.cnf 文件以支持 binlog 查看my.cnf路径 mysql –help –verbose | grep my.cnf     ...

    MySql 5.1 参考手册.chm

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

    MySQL 5.1参考手册

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? ...

    MySQL 5.1中文手冊

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

    MySQL 5.1参考手册 (中文版)

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

    MySQL 5.1参考手册中文版

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? ...

    MYSQL中文手册

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? ...

    MySQL 5.1官方简体中文参考手册

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

    mysql官方中文参考手册

    1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. ...

Global site tag (gtag.js) - Google Analytics