MySQL利用binlog来恢复数据库

1.根据binlog解析出所有ring数据库的所有sql

[[email protected] ]$ mysqlbinlog --no-defaults --database=ring --start-datetime="2005-04-20 9:55:00" --stop-datetim="2009-04-08 08:05:00" /u01/mysql/log/mysql-bin.000005 > /u01/mysql/log/mysql_restore5.sql

[[email protected] ]$ ls -l /u01/mysql/log/mysql_restore5.sql

-rw-r--r--    1 mysql    dba           407 Apr  8 15:33 /u01/mysql/log/mysql_restore5.sql

--start-datetime=datetime 从哪个点开始解析

--stop-datetim=datetime   从哪个点停止解析

--database=ring               指定需要解析哪个数据库,只提取某个数据库的sql语句

--如果有多个binlog的话需要解析多次,需要解析所有的binlog

2.重新在数据库中执行

[[email protected] ]$ mysql -u root  < /u01/mysql/log/mysql_restore5.sql

ERROR 1062 (23000) at line 2559580: Duplicate entry 175754263-140 for key 1 --恢复过程中出现主键冲突,导入失败

3.删除已经恢复的数据,重新恢复一遍

[[email protected] ]$ mysql -u root

Welcome to the MySQL monitor.  Commands end with ; or g.

Your MySQL connection id is 7647

Server version: 5.0.67-log Source distribution

Type help; or h for help. Type c to clear the buffer.

[email protected](none) 02:55:41>drop database ring;

Query OK, 8 rows affected (0.04 sec)

[[email protected] ]$ mysql -u root -f  < /u01/mysql/log/mysql_restore5.sql   -f参数:忽略错误继续

ERROR 1062 (23000) at line 2559580: Duplicate entry 175754263-140 for key 1

ERROR 1062 (23000) at line 2564671: Duplicate entry 138 for key 1

ERROR 1062 (23000) at line 2566216: Duplicate entry 139 for key 1

ERROR 1062 (23000) at line 2566224: Duplicate entry 140 for key 1

ERROR 1062 (23000) at line 2566232: Duplicate entry 141 for key 1

ERROR 1062 (23000) at line 2566240: Duplicate entry 142 for key 1

ERROR 1062 (23000) at line 2648410: Duplicate entry 143 for key 1

ERROR 1062 (23000) at line 2648418: Duplicate entry 144 for key 1

ERROR 1062 (23000) at line 2648581: Duplicate entry 145 for key 1

ERROR 1062 (23000) at line 2648589: Duplicate entry 146 for key 1

ERROR 1062 (23000) at line 2648597: Duplicate entry 147 for key 1

ERROR 1062 (23000) at line 2648605: Duplicate entry 148 for key 1

ERROR 1062 (23000) at line 2649279: Duplicate entry 149 for key 1

ERROR 1062 (23000) at line 2649287: Duplicate entry 150 for key 1

ERROR 1062 (23000) at line 2649295: Duplicate entry 151 for key 1

ERROR 1062 (23000) at line 2649303: Duplicate entry 152 for key 1

ERROR 1062 (23000) at line 2649311: Duplicate entry 153 for key 1

ERROR 1062 (23000) at line 2649319: Duplicate entry 154 for key 1

ERROR 1062 (23000) at line 2649327: Duplicate entry 155 for key 1

ERROR 1062 (23000) at line 2649335: Duplicate entry 156 for key 1

恢复成功,有部分数据冲突需要开发自己去处理了。

时间: 2024-10-03 17:26:32

MySQL利用binlog来恢复数据库的相关文章

Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废话不多说,下面是梳理的binlog日志操作解说: 一.初步了解binlogMySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. DDL-

mysql 利用binlog增量备份,还原实例

mysql 利用binlog增量备份,还原实例 张映 发表于 2010-09-29 分类目录: mysql 一,什么是增量备份 增量备份,就是将新增加的数据进行备份.假如你一个数据库,有10G的数据,每天会增加10M的数据,数据库每天都要备份一次,这么多数据是不是都要备份呢?还是只要备份增加的数据呢,很显然,我只要备份增加的数据.这样减少服务器的负担. 二,启用binlog vi my.cnf log-bin=/var/lib/mysql/mysql-bin.log,如果是这样的话log-bin

mysql通过binlog来恢复数据

mysql通过binlog来恢复数据  一.什么是binlog 1.binlog基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中: 二进制日志的信息: 文件位置:默认存放位置为数据库文件所在目录下 文件的命名方式: 名称为hostname-bin.xxxxx (重启mysql一次将会自动生成一个新的binlog) 2.配置binlog,在配置文件my.cnf中设置,并重启mysql 3.状态的查看:mysql> show variab

如何通过Mysql的二进制日志恢复数据库数据

经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响.所以本文我们将和大家一起分享学习下如何通过Mysql的二机制日志(binlog)来恢复数据. 系统环境: 操作系统:CentOS 6.5 X64  (虚拟机): WEB服务:PHP+Mysql+apache: 网站:为方便,直接在本地用蝉知系统搭建一个DEMO站点: 操作步骤: 1.开启binlog功能及基本操作: 2.往站点添加数据: 3.刷新binlog日志: 4.删除

mysql通过data文件恢复数据库的方式

1.首先定位mysql的my.ini配置文件,查找datadir的位置 #Path to the database rootdatadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/" 一般情况下,该文件夹是隐藏,需要显示所有文件. 2.将data目录下的文件拷贝至datadir.重启启动数据库即可 net start mysql mysql通过data文件恢复数据库的方式,布布扣,bubuko.com

mysql通过data目录恢复数据库

mysql通过data目录恢复数据库 阅读:1236次   时间:2010-03-24 06:53:30   字体:[大 中 小] 重装系统后,MySQL服务没有了,但是数据库的文件还在,这个时候我想恢复以前的数据库, 起码要把数据导出来. MySQL重装N次,永远提示Could not start service error:0! 后来终于找到一个方儿,就是先把以前的库文件都拷贝出来,把以前的MySQL文 件全部清除,然后装个新的,这个时候MySQl可以正常启动了,然后在新的MySQL里建一个

mysql 从sql存储文件恢复数据库乱码

场景一: 一台电脑上导出的sql文件到另一台电脑上恢复数据库,汉字全部是乱码,然后可能还有部分数据提示超长. 场景二: 拿到的sql文件不是原始的导出sql文件,只有表结构和表数据,出现的问题和场景一的一致. 本人的MySQL数据库版本是5.6的. 原因排除.......源自百度搜索结果,可能部分结果根本没起作用. ①.检测字符集: MySQL执行命令:SHOW VARIABLES LIKE 'character%' 网上提供的命令结果截图是 但是本人MySQL5.6安装时已经指定编码方式utf

MySQL利用binlog恢复误操作数据

在人工手动进行一些数据库写操作的时候(比方说数据订正),尤其是一些不可控的批量更新或删除,通常都建议备份后操作.不过不怕万一,就怕一万,有备无患总是好的.在线上或者测试环境误操作导致数据被删除或者更新后,想要恢复,一般有两种方法. 方法一.利用最近的全量备份+增量binlog备份,恢复到误操作之前的状态,但是随着数据量的增大,binlog的增多,恢复起来很费时.方法二.如果binlog的格式为row,那么就可以将binlog解析出来生成反向的原始SQL 以下是利用方法二写的一个python脚本b

mysql利用bin-log恢复误删除数据.

模拟备份数据库mysqldump db1 > db1.sql 启用新的bin-log文件mysql>flush logs; mysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |