XtraBackup备份工具

  • 问题
  1. 安装XtraBackup软件包。
  2. 使用XtraBackup执行完整备份、增量备份。
  3. 准备数据恢复目录。
  • 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装XtraBackup软件包

1)了解软件包描述信息

[root@dbsvr1 pub]# rpm -qpi percona-xtrabackup-2.1.6-702.rhel6.x86_64.rpm

Name        : percona-xtrabackup           Relocations: (not relocatable)

Version     : 2.1.6                             Vendor: (none)

Release     : 702.rhel6                     Build Date: 2013年11月20日 星期三 21时20分45秒

Install Date: (not installed)               Build Host: jhc-new-2-centos6-64.novalocal

Group       : Server/Databases              Source RPM: percona-xtrabackup-2.1.6-702.rhel6.src.rpm

Size        : 25077849                         License: GPLv2

Signature   : (none)

Packager    : Percona Development Team <[email protected]>

URL         : http://www.percona.com/software/percona-xtrabackup/

Summary     : XtraBackup online backup for MySQL / InnoDB

Description :

Percona XtraBackup is OpenSource online (non-blockable) backup solution for InnoDB and XtraDB engines.

2)安装依赖包perl-DBD-MySQL

使用RHEL 6自带的即可,yum方式安装:

[root@dbsvr1 pub]# yum -y install perl-DBD-MySQL

.. ..

Running Transaction

Warning: RPMDB altered outside of yum.

  Installing : perl-DBD-MySQL-4.013-3.el6.x86_64                            1/1

  Verifying  : perl-DBD-MySQL-4.013-3.el6.x86_64                            1/1

Installed:

  perl-DBD-MySQL.x86_64 0:4.013-3.el6

Complete!

如果未安装此依赖包,则直接安装percona-xtrabackup时会报错:

[root@dbsvr1 pub]# rpm -ivh percona-xtrabackup-2.1.6-702.rhel6.x86_64.rpm

error: Failed dependencies:

        perl(DBD::mysql) is needed by percona-xtrabackup-2.1.6-702.rhel6.x86_64

3)安装perl-DBD-MySQL

[root@dbsvr1 pub]# rpm -ivh percona-xtrabackup-2.1.6-702.rhel6.x86_64.rpm

Preparing...                ########################################### [100%]

   1:percona-xtrabackup     ########################################### [100%]

4)确认安装的主要程序/脚本

[root@dbsvr1 pub]# rpm -ql percona-xtrabackup

/usr/bin/innobackupex

/usr/bin/innobackupex-1.5.1

/usr/bin/xbcrypt

/usr/bin/xbstream

/usr/bin/xtrabackup

/usr/bin/xtrabackup_55   //适用 MySQL 5.5版本

/usr/bin/xtrabackup_56  //适用 MySQL 5.6版本

/usr/share/doc/percona-xtrabackup-2.1.6

/usr/share/doc/percona-xtrabackup-2.1.6/COPYING

步骤二:使用XtraBackup执行数据库备份

1)做一个完整备份

创建存放备份的文件夹:

[root@dbsvr1 ~]# mkdir -p /backup/mysql

将所有库完整备份到 /backup/mysql/文件夹下,选项 --backup表示备份,--datadir指定MySQL的数据库存放目录,--target-dir指定目标文件夹:

[root@dbsvr1 ~]# xtrabackup_56 –backup \

    --datadir=/var/lib/mysql/ \

    --target-dir=/backup/mysql/

xtrabackup_56 version 2.1.6 for MySQL server 5.6.11 Linux (x86_64) (revision id: 702)

xtrabackup: uses posix_fadvise().

xtrabackup: cd to /var/lib/mysql/

xtrabackup: using the following InnoDB configuration:

xtrabackup:   innodb_data_home_dir = ./

xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend

xtrabackup:   innodb_log_group_home_dir = ./

xtrabackup:   innodb_log_files_in_group = 2

xtrabackup:   innodb_log_file_size = 50331648

>> log scanned up to (1787687)

InnoDB: Allocated tablespace 1, old maximum was 0

[01] Copying ./ibdata1 to /backup/mysql/ibdata1

[01]        ...done

[01] Copying ./mysql/innodb_table_stats.ibd to /backup/mysql/mysql/innodb_table_stats.ibd

[01]        ...done

[01] Copying ./mysql/innodb_index_stats.ibd to /backup/mysql/mysql/innodb_index_stats.ibd

[01]        ...done

[01] Copying ./mysql/slave_worker_info.ibd to /backup/mysql/mysql/slave_worker_info.ibd

[01]        ...done

[01] Copying ./mysql/slave_relay_log_info.ibd to /backup/mysql/mysql/slave_relay_log_info.ibd

[01]        ...done

>> log scanned up to (1787687)

[01] Copying ./mysql/slave_master_info.ibd to /backup/mysql/mysql/slave_master_info.ibd

[01]        ...done

[01] Copying ./db1/tb1.ibd to /backup/mysql/db1/tb1.ibd

[01]        ...done

[01] Copying ./userdb2/userlist.ibd to /backup/mysql/userdb2/userlist.ibd

[01]        ...done

[01] Copying ./userdb2/userlist2.ibd to /backup/mysql/userdb2/userlist2.ibd

[01]        ...done

xtrabackup: The latest check point (for incremental): '1787687'

xtrabackup: Stopping log copying thread.

.>> log scanned up to (1787687)

xtrabackup: Transaction log of lsn (1787687) to (1787687) was copied.

确认备份好的文件数据:

[root@dbsvr1 ~]# ls /backup/mysql/

db1  ibdata1  mysql  userdb2  xtrabackup_checkpoints  xtrabackup_logfile

2)做一个增量备份(基于前一步的完整备份)

随意做一些新增或更改库表的操作,比如在test库中新建一个mytb的表:

mysql> USE test;

Database changed

mysql> CREATE TABLE mytb(id int(4), name varchar(24));

Query OK, 0 rows affected (0.18 sec)

以前一次保存到/backup/mysql/的完整备份为基础,做一个增量备份,保存到/backup/inc01/,指定增量备份参照的基本目录(完整备份目录)需要用到选项--incremental-basedir。相关操作如下:

[root@dbsvr1 ~]# xtrabackup_56  --backup \

    --datadir=/var/lib/mysql/ \

    --target-dir=/backup/inc01/ \

    --incremental-basedir=/backup/mysql/

xtrabackup_56 version 2.1.6 for MySQL server 5.6.11 Linux (x86_64) (revision id: 702)

incremental backup from 1787687 is enabled.

xtrabackup: uses posix_fadvise().

xtrabackup: cd to /var/lib/mysql/

xtrabackup: using the following InnoDB configuration:

xtrabackup:   innodb_data_home_dir = ./

xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend

xtrabackup:   innodb_log_group_home_dir = ./

xtrabackup:   innodb_log_files_in_group = 2

xtrabackup:   innodb_log_file_size = 50331648

>> log scanned up to (1793843)

InnoDB: Allocated tablespace 13, old maximum was 0

xtrabackup: using the full scan for incremental backup

[01] Copying ./ibdata1 to /backup/inc01/ibdata1.delta

[01]        ...done

[01] Copying ./test/mytb.ibd to /backup/inc01/test/mytb.ibd.delta

[01]        ...done

[01] Copying ./mysql/innodb_table_stats.ibd to /backup/inc01/mysql/innodb_table_stats.ibd.delta

[01]        ...done

[01] Copying ./mysql/innodb_index_stats.ibd to /backup/inc01/mysql/innodb_index_stats.ibd.delta

[01]        ...done

[01] Copying ./mysql/slave_worker_info.ibd to /backup/inc01/mysql/slave_worker_info.ibd.delta

[01]        ...done

[01] Copying ./mysql/slave_relay_log_info.ibd to /backup/inc01/mysql/slave_relay_log_info.ibd.delta

[01]        ...done

[01] Copying ./mysql/slave_master_info.ibd to /backup/inc01/mysql/slave_master_info.ibd.delta

[01]        ...done

[01] Copying ./db1/tb1.ibd to /backup/inc01/db1/tb1.ibd.delta

>> log scanned up to (1793843)

[01]        ...done

[01] Copying ./userdb2/userlist.ibd to /backup/inc01/userdb2/userlist.ibd.delta

[01]        ...done

[01] Copying ./userdb2/userlist2.ibd to /backup/inc01/userdb2/userlist2.ibd.delta

[01]        ...done

xtrabackup: The latest check point (for incremental): '1793843'

xtrabackup: Stopping log copying thread.

.>> log scanned up to (1793843)

xtrabackup: Transaction log of lsn (1793843) to (1793843) was copied.

确认备份好的文件数据:

[root@dbsvr1 ~]# ls /backup/inc01/

db1            ibdata1.meta  test     xtrabackup_checkpoints

ibdata1.delta  mysql         userdb2  xtrabackup_logfile

对比完整备份、增量备份的大小:

[root@dbsvr1 ~]# du -sh /backup/mysql/ /backup/inc01/

13M     /backup/mysql/   //完整备份的大小

964K    /backup/inc01/   //增量备份的大小

步骤三:准备用于恢复的数据库目录

通过XtraBackup工具备份的数据库目录,若要恢复到另一个MySQL服务器,需要先做一个“--prepare”的准备操作。

1)准备恢复“完整备份”

完成准备以后,最终/backup/mysql/可用来重建MySQL服务器。这种情况下,官方建议连做两次--prepare,以确保数据一致性:

[root@dbsvr1 ~]# xtrabackup_56  --prepare  \

    --target-dir=/backup/mysql/   //第1次准备

xtrabackup_56 version 2.1.6 for MySQL server 5.6.11 Linux (x86_64) (revision id: 702)

xtrabackup: cd to /backup/mysql/

xtrabackup: This target seems to be not prepared yet.

xtrabackup: xtrabackup_logfile detected: size=2097152, start_lsn=(1787687)

xtrabackup: using the following InnoDB configuration for recovery:

xtrabackup:   innodb_data_home_dir = ./

xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend

xtrabackup:   innodb_log_group_home_dir = ./

xtrabackup:   innodb_log_files_in_group = 1

xtrabackup:   innodb_log_file_size = 2097152

xtrabackup: using the following InnoDB configuration for recovery:

xtrabackup:   innodb_data_home_dir = ./

xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend

xtrabackup:   innodb_log_group_home_dir = ./

xtrabackup:   innodb_log_files_in_group = 1

xtrabackup:   innodb_log_file_size = 2097152

xtrabackup: Starting InnoDB instance for recovery.

xtrabackup: Using 104857600 bytes for buffer pool (set by --use-memory parameter)

InnoDB: The InnoDB memory heap is disabled

InnoDB: Mutexes and rw_locks use GCC atomic builtins

InnoDB: Compressed tables use zlib 1.2.3

InnoDB: Using CPU crc32 instructions

InnoDB: Initializing buffer pool, size = 100.0M

InnoDB: Completed initialization of buffer pool

InnoDB: Highest supported file format is Barracuda.

InnoDB: The log sequence numbers 1767513 and 1767513 in ibdata files do not match the log sequence number 1787687 in the ib_logfiles!

InnoDB: Database was not shutdown normally!

InnoDB: Starting crash recovery.

InnoDB: Reading tablespace information from the .ibd files...

InnoDB: Restoring possible half-written data pages

InnoDB: from the doublewrite buffer...

InnoDB: Last MySQL binlog file position 0 1009, file name mysql-bin.000002

InnoDB: 128 rollback segment(s) are active.

InnoDB: Waiting for purge to start

InnoDB: 5.6.11 started; log sequence number 1787687

[notice (again)]

  If you use binary log and don't use any hack of group commit,

  the binary log position seems to be:

InnoDB: Last MySQL binlog file position 0 1009, file name mysql-bin.000002

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

InnoDB: FTS optimize thread exiting.

InnoDB: Starting shutdown...

InnoDB: Shutdown completed; log sequence number 1787814

[root@dbsvr1 ~]# xtrabackup_56  --prepare  \

    --target-dir=/backup/mysql/   //第2次准备

.. ..

[notice (again)]

  If you use binary log and don't use any hack of group commit,

  the binary log position seems to be:

InnoDB: Last MySQL binlog file position 0 1009, file name mysql-bin.000002

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

InnoDB: FTS optimize thread exiting.

InnoDB: Starting shutdown...

InnoDB: Shutdown completed; log sequence number 1787926

2)准备恢复“完整备份+增量备份”

完成准备以后,最终仍然是/backup/mysql/用来重建MySQL服务器,但这种情况下需提前合并相关增量备份的数据:

先准备完整备份目录,添加--apply-log-only仅应用日志:

[root@dbsvr1 ~]# xtrabackup_56  --prepare \

    --target-dir=/backup/mysql --apply-log-only

xtrabackup_56 version 2.1.6 for MySQL server 5.6.11 Linux (x86_64) (revision id: 702)

xtrabackup: cd to /backup/mysql

xtrabackup: This target seems to be already prepared.

xtrabackup: notice: xtrabackup_logfile was already used to '--prepare'.

xtrabackup: using the following InnoDB configuration for recovery:

xtrabackup:   innodb_data_home_dir = ./

xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend

xtrabackup:   innodb_log_group_home_dir = ./

xtrabackup:   innodb_log_files_in_group = 2

xtrabackup:   innodb_log_file_size = 50331648

xtrabackup: using the following InnoDB configuration for recovery:

xtrabackup:   innodb_data_home_dir = ./

xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend

xtrabackup:   innodb_log_group_home_dir = ./

xtrabackup:   innodb_log_files_in_group = 2

xtrabackup:   innodb_log_file_size = 50331648

xtrabackup: Starting InnoDB instance for recovery.

xtrabackup: Using 104857600 bytes for buffer pool (set by --use-memory parameter)

InnoDB: The InnoDB memory heap is disabled

InnoDB: Mutexes and rw_locks use GCC atomic builtins

InnoDB: Compressed tables use zlib 1.2.3

InnoDB: Using CPU crc32 instructions

InnoDB: Initializing buffer pool, size = 100.0M

InnoDB: Completed initialization of buffer pool

InnoDB: Highest supported file format is Barracuda.

[notice (again)]

  If you use binary log and don't use any hack of group commit,

  the binary log position seems to be:

InnoDB: Last MySQL binlog file position 0 1009, file name mysql-bin.000002

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

InnoDB: Starting shutdown...

InnoDB: Shutdown completed; log sequence number 1787926

然后整合增量备份的数据,通过--incremental-dir选项指定增量位置:

[root@dbsvr1 ~]# xtrabackup_56  --prepare \

    --target-dir=/backup/mysql --apply-log-only \

    --incremental-dir=/backup/inc01

xtrabackup_56 version 2.1.6 for MySQL server 5.6.11 Linux (x86_64) (revision id: 702)

incremental backup from 1787687 is enabled.

xtrabackup: cd to /backup/mysql

xtrabackup: This target seems to be already prepared.

xtrabackup: xtrabackup_logfile detected: size=2097152, start_lsn=(1793843)

xtrabackup: using the following InnoDB configuration for recovery:

xtrabackup:   innodb_data_home_dir = ./

xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend

xtrabackup:   innodb_log_group_home_dir = /backup/inc01

xtrabackup:   innodb_log_files_in_group = 1

xtrabackup:   innodb_log_file_size = 2097152

InnoDB: Allocated tablespace 1, old maximum was 0

xtrabackup: page size for /backup/inc01/ibdata1.delta is 16384 bytes

Applying /backup/inc01/ibdata1.delta to ./ibdata1...

xtrabackup: page size for /backup/inc01/test/mytb.ibd.delta is 16384 bytes

Applying /backup/inc01/test/mytb.ibd.delta to ./test/mytb.ibd...

xtrabackup: page size for /backup/inc01/mysql/innodb_table_stats.ibd.delta is 16384 bytes

Applying /backup/inc01/mysql/innodb_table_stats.ibd.delta to ./mysql/innodb_table_stats.ibd...

xtrabackup: page size for /backup/inc01/mysql/slave_relay_log_info.ibd.delta is 16384 bytes

Applying /backup/inc01/mysql/slave_relay_log_info.ibd.delta to ./mysql/slave_relay_log_info.ibd...

xtrabackup: page size for /backup/inc01/mysql/slave_worker_info.ibd.delta is 16384 bytes

Applying /backup/inc01/mysql/slave_worker_info.ibd.delta to ./mysql/slave_worker_info.ibd...

xtrabackup: page size for /backup/inc01/mysql/slave_master_info.ibd.delta is 16384 bytes

Applying /backup/inc01/mysql/slave_master_info.ibd.delta to ./mysql/slave_master_info.ibd...

xtrabackup: page size for /backup/inc01/mysql/innodb_index_stats.ibd.delta is 16384 bytes

Applying /backup/inc01/mysql/innodb_index_stats.ibd.delta to ./mysql/innodb_index_stats.ibd...

xtrabackup: page size for /backup/inc01/db1/tb1.ibd.delta is 16384 bytes

Applying /backup/inc01/db1/tb1.ibd.delta to ./db1/tb1.ibd...

xtrabackup: page size for /backup/inc01/userdb2/userlist2.ibd.delta is 16384 bytes

Applying /backup/inc01/userdb2/userlist2.ibd.delta to ./userdb2/userlist2.ibd...

xtrabackup: page size for /backup/inc01/userdb2/userlist.ibd.delta is 16384 bytes

Applying /backup/inc01/userdb2/userlist.ibd.delta to ./userdb2/userlist.ibd...

xtrabackup: using the following InnoDB configuration for recovery:

xtrabackup:   innodb_data_home_dir = ./

xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend

xtrabackup:   innodb_log_group_home_dir = /backup/inc01

xtrabackup:   innodb_log_files_in_group = 1

xtrabackup:   innodb_log_file_size = 2097152

xtrabackup: Starting InnoDB instance for recovery.

xtrabackup: Using 104857600 bytes for buffer pool (set by --use-memory parameter)

InnoDB: The InnoDB memory heap is disabled

InnoDB: Mutexes and rw_locks use GCC atomic builtins

InnoDB: Compressed tables use zlib 1.2.3

InnoDB: Using CPU crc32 instructions

InnoDB: Initializing buffer pool, size = 100.0M

InnoDB: Completed initialization of buffer pool

InnoDB: Highest supported file format is Barracuda.

InnoDB: The log sequence numbers 1767513 and 1767513 in ibdata files do not match the log sequence number 1793843 in the ib_logfiles!

InnoDB: Database was not shutdown normally!

InnoDB: Starting crash recovery.

InnoDB: Reading tablespace information from the .ibd files...

InnoDB: Restoring possible half-written data pages

InnoDB: from the doublewrite buffer...

InnoDB: Last MySQL binlog file position 0 1009, file name mysql-bin.000002

[notice (again)]

  If you use binary log and don't use any hack of group commit,

  the binary log position seems to be:

InnoDB: Last MySQL binlog file position 0 1009, file name mysql-bin.000002

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

InnoDB: Starting shutdown...

InnoDB: Shutdown completed; log sequence number 1793843

完成上述操作以后,/backup/mysql/目录即已包含增量备份的数据。

猜你喜欢

转载自blog.csdn.net/weixin_44792728/article/details/90648510