ibbackup备份与恢复

1.备份

ibbackup备份的基本命令:

#ibbackup 传入两个配置文件的路径参数
ibbackup /path/to/my.cnf /path/to/my2.cnf
#典型的:
ibbackup /etc/my.cnf /home/mysql/backup-my.cnf

ibbackup会根据第一个参数中的my.cnf文件,获取需要备份的InnoDB的数据文件ibdata和日志文件ib_logfile的位置,并将其备份到第二个参数my2.cnf所指定的位置,ibbackup将读取第一个参数my.cnf中的如下内容:

datadir=...
innodb_data_home_dir=...
innodb_data_file_path=...
innodb_log_group_home_dir=...
innodb_log_files_in_group=...
innodb_log_file_size=...
#这里需要注意的是,很多的配置文件 my.cnf 中是没有 innodb_log_group_home_dir 和innodb_data_home_dir,这样ibbackup 会执行失败。

在第二个配置文件my2.cnf中的datadir、innodb_data_home_dir和innodb_log_group_home_dir是填写备份的目录,而且这些目录是要填写绝对路径的,因为ibbackup不识别这些文件中填写的相对路径。两个配置文件my.cnf和my2.cnf中关于数据文件的数量和大小设置必须相同,包括autoextend参数也要保持一致,而日志文件则可以不一样。

my.cnf

datadir = /var/lib/mysql
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:1G:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_log_files_in_group = 2
innodb_log_file_size=256M

backup-my.cnf

datadir = /home/mysql/backup
innodb_data_home_dir = /home/mysql/backup
innodb_data_file_path = ibdata1:1G:autoextend
innodb_log_group_home_dir = /home/mysql/backup
innodb_log_files_in_group = 2
innodb_log_file_size=256M
#innodb_log_arch_dir 是mysql5.0支持的参数,在mysql5.1中已经被innodb_log_group_home_dir替代

ibbackup备份的只是InnoDB的数据文件和日志文件,而并没有备份.frm文件。因此.frm文件还需手动copy或者是使用mysqldump命令进行备份。

准备好之后,就运行备份命令:

ibbackup --compress /etc/my.cnf /home/mysql/backup-my.cnf

–compress是压缩备份,恢复的时候也相应添上–uncompress,压缩备份的数据文件是有.ibz后缀的。成功备份后在备份的目录下就会有ibbackup_logfile和ibdata*.ibz等文件。

2.恢复

恢复主要有三个步骤,恢复日志、启动备份的mysql、故障数据恢复。

  1. 进行日志重做
    ibbackup在备份期间用日志文件ibbackup_logfile记录了备份期间数据的变化,在恢复的时候是使用此日志对备份的数据进行日志重做。参考手册中说“By applying that file to the backed up data files we can roll forward them so that every page in the data files corresponds to the same log sequence number of the InnoDB log.”,但具体日志重做的细节还没有找到相关的资料。日志重做使用的命令如下:

    #--uncompress是因为在备份时使用了--compress参数
    ibbackup --apply-log --uncompress /home/mysql/backup-my.cnf

    在运行了这个命令之后,ibbackup便开始进行日志恢复,日志重做后会在备份的目录生成ib_logfile*和ibdata*等文件。然后在输出的信息中,有一处比较重要是:

    #file name后面的路径为mysql的BINLOG目录,其他的输出信息忽略
    ibbackup: Last MySQL binlog file position 0 969, file name /var/lib/mysql/.../logs/mysql-bin.000001

    这个是指示了备份时的binlog位置,便于在第三步进行binlog数据恢复时用到。可以看到,在mysql-bin.00001的0-969为备份前binlog的位置。

  2. 恢复后重启数据库服务
    重启数据库服务器,是指使用backup-my.cnf的配置来启动数据库服务,要注意的是,因此备份的时候只是备份的InnoDB的数据文件和日志文件,如果要重新在另一个目录下启动数据库服务的话,需要将所有在原来mysql的数据目录下的.frm文件目录和mysql目录等文件拷贝到新的目录下。

    mysqld_safe --defaults-file=/home/mysql/backup-my.cnf &
  3. 根据BINLOG恢复故障数据
    由于在备份后,数据库可能会存在更改,因此要将那些备份后的数据库更改应用到恢复的状态,这个时候就要根据binlog的记录来恢复。在第一步日志重做的时候,记录下备份前的binlog位置为969,因此,我们在恢复binlog时就是指定–start-position为969,从这个位置开始恢复,同时,如果还有其他的mysql-bin.00000*,也要一起恢复。

    mysqlbinlog --start-position=969 mysql-bin.00001 | mysql -u root -p***
This entry was posted in MySQL. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>