`
vieri124
  • 浏览: 26118 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Mysql 数据库数据恢复笔记(转)

阅读更多

Mysql 数据库数据恢复笔记(转)

出处:sunmoon的思考空间。 http://sunmoon.kmblog.info/?p=218

 

问题情境:在数据库里执行SQL语句时不小心错误操作,将wordpress数据库里wp_posts表里的post_content字段的值统一更新成了网站的地址,致使内容丢失。这时发现本数据库恰好没有最近的备份,mysql服务的更新日志没有打开,但是二进制日志却存在。进一步检测,发现数据库及表的存储引擎设为非事务型MyISAM,而不是事务型的存储引擎InnoDB。数据库为5.0以上版本。现在想将post_content字段的值恢复到错误更新之前的状态,何解?

 

 

探索解决方案的过程:

1、先通过查看一些资料发现许多人发文说若只是存在二进制日志的话,可以用二进制日志恢复数据库。二进制日志存储了mysql数据库的所有操作记录,包括查询、创建、更新、删除等操作。二进制日志按照时间将每一次的操作以二进制的形式保存进日志里。通常有多个二进制文件,每个二进制文件都是增量记录操作(上次二进制日志备份之后数据库的所有操作)。而且利用mysqlbinlog.exe工具可以基于时间点来恢复数据。查询了mysqlbinlog的用法以及实践过以后,只有如下形式才能正常运行。

  在运行中输入:H:\wamp\mysql\bin\mysqlbinlog.exe –database=”mydatabase” –stop-date=”2010-06-07 9:30:00″ ../data/mysql-bin.000058|mysql -uroot –p123456

其中第一句是工具软件的路径和名称,必须有路径,否则找不到程序。后面–开头的是语法的选项,这里有两个选项设置database:要恢复的数据库,stop-date:恢复到的时间点。再后面是数据库的某个要执行的二进制文件路径与名称,可以是绝对地址或相对于mysqlbinlog.exe 所在位置的相对地址。最后面|之后的是数据库访问权限设置,-u表示用户名,-p表示密码。如果用户名、密码为root、123456,则写为如上形式。

问题:按照上述语句执行二进制日志恢复,将数据库添加和更新post_content值的那段日志都执行了一遍,数据库却仍没有任何改变。再查了一些资料,发现好些人碰到相同的问题;查询中偶然发现有人说非事务型的数据库不支持用二进制日志来恢复数据库,所以无效。

2、将数据库的二进制日志、所用工具、数据库保存到本地服务器,并到数据库中进入每个表,将该表的存储引擎改为InnoDB,而且数据库的存储引擎也改为InnoDB。再用上面的语句执行还是不行。能够顺利执行,但执行后没有对数据库造成任何改变。

3、然后想将二进制文件保存为sql文件,然后再将sql文件导入数据库或直接执行,以来重新执行以前的数据库操作来恢复数据。

先是用H:\wamp\mysql\bin\mysqlbinlog.exe –database=”mydatabase” –stop-date=”2010-06-07 9:30:00″ ../data/mysql-bin.000050 > c:\my.sql |mysql -uroot –p123456

即将数据库操作记录保存到C盘的my.sql文件里面。上述语句执行同样没有效果,即没有生成my.sql文件。多次执行仍没有效果。

4、最后经过对mysqlbinlog的详细了解,发现一个选项可以设置导出文件:result-file,用法是–result-file=”c:\my.sql”  。抱着尝试的心态运行下面的语句:

H:\wamp\mysql\bin\mysqlbinlog.exe –database=”mydatabase” –stop-date=”2010-06-07 9:30:00″ –result-file=”c:\my.sql” ../data/mysql-bin.000050 | mysql -uroot –p123456 ,然后文件输出成功了。查看之后,果然是所有操作记录,而且有丢失数据的创建和更新操作,热泪盈眶啦。

5、再然后由于一个sql文件过大,所以不得不采取mysql.exe中用source语法来导入操作,因为mysql数据库本身上传的sql文件不能超过2M左右,大了数据库报错。而my.sql 文件中有大量的数据库查询操作,占了大量数据,所以文件比较大。

然后利用如下命令来打开mysql控制台语法如下:

h:\wamp\mysql\bin\mysql.exe  -uroot –p123546

这样就会登录数据库。

然后在输出如下命令(前面的mysql>不是命令,而是登录之后的前缀)。

mysql>source c:\my.sql,就会让数据库执行文件里的所有操作。

只需要将与数据库里的丢失数据有关的所有操作重新执行一遍,那么相应的数据就会被恢复到最后执行的二进制日志操作时间。

 

6、经过不懈努力,终于将wp_posts表恢复到原先的数据状态,然后将本地数据库里该表导出为wp_posts.sql文件,到服务器上的数据库里加载执行(之前先删除老的wp_posts,否则报错)执行之后,wp_posts表就恢复到原先的状态。

7、感概:一句话,还是要及时的备份数据啊,特别是对数据库进行操作之前要备份数据库,以免数据操作出错恢复力度太大或者难以恢复啊。毕竟二进制日志恢复起来不太容易,而且非事务型数据库可能永远无法恢复。特别是二进制日志都没有的时候,就回天乏术了。

 

分享到:
评论

相关推荐

    MySQL5.5学习笔记

    MySQL5.5学习笔记,里边是MySQL基础知识,包括对数据库,数据表,视图,数据类型和运算符,MySQL函数,存储过程和函数,以及对数据的增删改查等知识,还有MySQL用户管理以及数据备份与还原的知识!适合初学者学习~

    MySQL的基础知识笔记

    2. 数据库基础知识介绍:介绍了MySQL的基本概念、数据类型、变量、索引、事务、提交和回滚等知识。 3. MySQL的安装:介绍了如何安装MySQL,包括选择安装方式、配置MySQL环境变量等。 4. MySQL常用的一些命令介绍:...

    MySQL5学习笔记

    MySQL基础 1 MySQL安装 1 下载安装MySQL 1 配置MySQL 1 下载安装mysql-gui-tools 2 数据库入门 3 ...MySQL灾难性复制恢复总结 16 MySQL授权管理 17 未解决及已解决问题 19 未解决问题 19 已解决问题 19

    超强MySQL课程笔记_V4.0.ctb

    DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据 SELECT C. DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE 3. 数据访问技术 A. ODBC PHP <.php> B. ...

    MySQLDBA运维笔记.pdf

    1.2.6 创建存放两个 mysql 实例的数据目录...............................................................11 1.2.7 创建两个 mysql 多实例的配置文件.............................................................

    mysql5 培训 PPT beta1

    到MySQL的安装、配置、标准SQL的DML、DDL、DCL、高级查询、数据库设计、表约束、PowerDesigner12.5的使用、三大范式、索引、视图、存储过程和函数、触发器,MySQL权限原理及管理、数据的备份与恢复。内容丰富、详实...

    MySQL笔记之数据备份与还原的使用详解

    下面来写一点关于数据备份与还原相关的笔记   数据备份 使用mysqldump命令备份一个数据库 mysqldump -u username -p dbname table1 table2…>BackupName.sql 其中,dbname表示数据库名称,table1和table2表示表的...

    Oracle入门教程.三思笔记.一步一步学Oracle

    [三思笔记]RMAN管理ORACLE_RAC数据库的备份与恢复.pdf [三思笔记]statspack初步学和用.pdf [三思笔记]动态性能视图.pdf [三思笔记]全面学习MySQL+Proxy特性.pdf [三思笔记]全面学习oracle的flashback特性.pdf [三思...

    load-mysql-dump:非常简单的项目,演示如何将数据库转储文件加载到任何其他数据库中

    加载-mysql-转储一个非常简单的项目,演示如何通过 JDBC 将数据库转储文件加载到任何数据库中。... 可以解析数据库转储文件并将数据恢复到给定的数据库中。 任何数据库:Postgres、Oracle、SQL 服务器等……无论

    MySQL笔记-binlog理论及binlog回滚恢复数据

    binlog:MySQL数据库的二进制日志,记录用户对数据库操作的SQL语句(select除外),使用mysqlbin可以查看其内容 binlog有三种: 1. STATMENT:基于SQL语句的复制,每一条会修改数据的sql语句会被记录到binlog中。 2....

    MySQL高级学习笔记(三):Mysql逻辑架构介绍、mysql存储引擎详解

    和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离 。 这种架构可以...

    MySQL服务维护笔记第1/2页

    以下就是针对MySQL作为专门的数据库服务器的优化建议: MySQL服务的安装/配置的通用性; 系统的升级和数据迁移方便性; 备份和系统快速恢复; 数据库应用的设计要点; 一次应用优化实战; MySQL服务器的规划

    jdbc入门笔记

    jdbc 黑马课程2014的 1.常见的数据库介绍 2.Mysql数据库的安装配置以及简介 3.SQL之数据库创建语句 4.SQL之数据表结构操作语句 ...6.Mysql数据库的备份以及恢复。 7.多表设计(外键约束) 8.多表查询(笛卡尔积)

    浅析MySQL 备份与恢复

    数据无价,MySQL作为一个数据库系统,其备份自然也是非常重要且有必要去做。备份的理由千千万,预防故障,安全需求,回滚,审计,删了又改的需求等等,备份的重要性不言而喻。除了备份本身, 如何使用备份来恢复 ...

    review_emp_dept_salgrade.sql

    此文件是自己在复习MySQL时的Demo表数据,上传至此,纯属备份作用,无任何实用价值,请勿下载,以免浪费您的积分。若有读者比照我的笔记练习MySQL语句时,可以下载此Demo数据作以练习,文章中标明了链接地址。

    2009达内SQL学习笔记

    保存在oracle数据库中的所有操作细节: spool oracleday01.txt :开始记录 spool off :开始保存细节 四、SELECT语句:选择操作、投影操作。 select:从一个或多个表中检索一个或多个数据列。包含信息:想选择...

    Java学习笔记-个人整理的

    {1.13.3}打包备份与恢复}{42}{subsection.1.13.3} {1.13.3.1}\texttt {tar},\texttt {gzip}}{42}{subsubsection.1.13.3.1} {1.13.3.2}\texttt {zip}}{42}{subsubsection.1.13.3.2} {1.13.3.3}文本创建与编辑}{43...

    asp.net知识库

    在.NET访问MySql数据库时的几点经验! 自动代码生成器 关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--...

Global site tag (gtag.js) - Google Analytics