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

MYSQL
MySQL忘记密码恢复密码的实现方法
mysql 时间转换函数的使用方法
使用mysql的disctinct group by查询不重复记录
mysql备份恢复mysqldump.exe几个常用用例
超详细mysql left join,right join,inner join用法分析
mysql 5.0.67最新版替代MySQL 5.0.51b版本官方下载
比较详细的MySQL字段类型说明
mysql 记录不存在时插入 记录存在则更新的实现方法
MYSQL基础之连接MYSQL、修改密码、添加用户
mysql数据库优化必会的几个参数中文解释
mysql中文排序注意事项与实现方法
MySQL 5.0触发器参考教程
MySQL5创建存储过程的示例
MYSQL5 masterslave数据同步配置方法
mysql数据库导出xml的实现方法
MySql增加用户、授权、修改密码等语句
Mysql默认设置的危险性分析
用MySQL创建数据库和数据库表代码
Mysql如何避免全表扫描的方法
mysql的校对规则引起的问题分析

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 69 ::
收藏到网摘: 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数据表的恢复也一样,启动服务器时它会进行自动恢复。