当前位置: 首页 > 图文教程 > 数据库 > MYSQL > MYSQL教程:使用备份恢复数据

MYSQL
MySQL collation方法
mysql Myisamchk小工具使用手册
MySQL server has gone away错误提示解决方法
从其他电脑访问本机的Mysql的设置方法
mysql 卡死 大部分线程长时间处于sending data的状态
MySQL 存储过程和"Cursor"的使用方法
mysql 忘记密码的解决方法(linux和windows小结)
MySQL 编码机制
CMS不要让MySQL为你流泪
MySQL 数据类型和建库策略
MYSQL 数据库命名与设计规范
mysql 按中文字段排序
mysql proxy问题的解决方法
Mysql 数据库访问类
MySQL 数据库跨操作系统的最快迁移方法
MySQL 数据库的临时文件究竟储存在哪里
MySQL 优化设置步骤
mysql 终结点映射器中没有更多的终结点可用的解决方法
MYSQL WHERE语句优化
MySQL 服务器参数说明及查看 设置方法

MYSQL教程:使用备份恢复数据


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 72 ::
收藏到网摘: n/a

恢复过程包括两个信息源---备份文件和二进制日志,备份文件可使用数据恢复到执行备份时的状态,而二进制日志可恢复到发生故障时的状态。下面分别介绍如何利用这两个文件恢复一个数据库或恢复单个数据表。

本文由软晨学习网(http://www.ruanchen.com)整理发布!转载请注明出处,谢谢!

恢复整个数据库的步骤:

  1. 把需恢复的数据库的整个目录的内容拷贝到其它地方,以备用。

  2. 使用最近的备份文件重载数据库。如果使用mysqldump生成的备份,则可使用它们作为mysql的输入重载;如果是通过拷贝数据库目录来备份的,则要关闭数据库服务器,再把备份重新拷贝到数据目录,再重启数据库服务器。

  3. 通过二进制日志重做事务,恢复到出错点的数据。具体操作是这样的,用mysqlbinlog把日志转换成ASCII格式,再把它作为mysql的输入,并指定--one-database选项,以便mysql只执行你指定的数据库恢复。如:

    % ls -t -r -l binlog.[0-9]* | xargs mysqlbinlog | mysql --one-database db_name
    

    但上面命令只适合所有日志文件名具有相同长度的情况。否则需用下面的Perl代码来处理:

    #!/usr/bin/perl -w
    # sort_num.pl
    use strict;
    my @files = <>; #read all input file
    @files = sort { my $anum = $1 if $a =~/\.(\d+)$/; #sort them by numeric extension my $bnum = $1 if $b =~/\.(\d+)$/; $anum <=> $bnum; } @files;
    print @files; #print them
    exit(0);
    如下使用该脚本:
    % ls -l binlog.[0-9]* | sort_num.pl | xargs mysqlbinlog | mysql --one-database db_name
    

    上面讨论的是需所有日志文件的情况,但多数情况下我们只需备份后生成的几个日志文件,这时,可用以下命令来重做。

    % mysqlbinlog binlog.1234 | mysql --one-database db_name
    % mysqlbinlog binlog.1235 | mysql --one_database db_name
    ...
    

    如果我们需恢复因执行DROP DATABASE,DROP TABLE或DELETE语句而损坏的数据库,就需在日志文件中删除该语句,否则重做后结果还是一样。所以需把日志转换成ASCII格式并保存起来,再用编辑器打开该文件,删除这些语句后再重做。

       
    如果使用文本变更日志,则不需使用mysqlbinlog程序,因为该日志文件本身就是ASCII格式。

恢复使用BACKUP TABLE命令备份的数据表可用RESTORE TABLE语句:

备份语句:
mysql> BACKUP TABLE table_name1,table_name2 TO '/backup/table_backup';
恢复语句:
mysql> RESTORE TABLE table_name1,table_name2 FROM '/backup/table_backup';

恢复有外键的数据表,可用SET FOREIGN_KEY_CHECK = 0;语句先关闭键字检查,导入表后再重启它,赋值为1表示检查有效。

恢复InnoDB表空间,当服务器重启时,InnoDB处理程序会执行自动恢复工作,通过选项文件[mysqld]段中的set-variable=innodb_force_recovery=level设置自动恢复的级别,推荐典型的启动值为4。如果需从备份文件恢复,则和上面介绍的方法一样。BDB数据表的恢复也一样,启动服务器时它会进行自动恢复。