当前位置: 首页 > 图文教程 > 专题中心 > MYSQL教程和MYSQL数据库入门教程专题 MYSQL > MYSQL入门教程 > MYSQL教程:使用备份恢复数据

MYSQL入门教程
MYSQL教程:数据库具体操作
MYSQL教程:MySQL程序介绍
MYSQL教程:使用备份恢复数据
MYSQL教程:备份数据库
MYSQL教程:检查数据表和修复数据表
MYSQL教程:建立加密连接
MYSQL教程:MySQL服务器权限表
MYSQL教程:保护MySQL安装程序文件
MYSQL教程:MySQL服务器镜像配置
MYSQL教程:运行多个MySQL服务器
MYSQL教程:优化服务器参数设置
MYSQL教程:MySQL的一些优化配置
MYSQL教程:日志文件管理
MYSQL教程:MySQL用户帐号管理
MYSQL教程:MYSQL启动与退出以及链接故障恢复
MYSQL教程:数据库安全管理
MYSQL教程:调整MySQL数据目录位置
MYSQL教程:状态文件和日志文件
MYSQL教程:数据表最大尺寸限制
MYSQL教程:数据表在系统中表现形式

MYSQL入门教程 中的 MYSQL教程:使用备份恢复数据


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