您的位置:首页 > 数据库 > MySQL

MySQL(XtraBackup备份工具)

2019-05-20 16:13 483 查看

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 <mysql-dev@percona.com>
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 178
3ff7
7687 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/目录即已包含增量备份的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: