首页 > 技术文章 > xtrabackup工具备份和还原

weiweirui 2020-10-12 22:31 原文

xtrabackup完全备份和还原

percona提供的mysql数据库备份工具,惟一开源的能够对innodb和xtradb数据库进行热备的工具,percona-xtrabackup-24-2.4.18-1.el7.x86_64.rpm

下载: https://www.percona.com/downloads/

xtrabackup 特点:

备份还原过程快速、可靠

备份过程不会打断正在执行的事务

能够基于压缩等功能节约磁盘空间和流量

自动实现备份检验

开源,免费

注意:目前percona-xtrabackup-24-2.4.18-1.el8.x86_64.rpm不支持CentOS 8上的mariadb-10.3版本

[root@centos7 ~]#ll /backup/
total 18456
-rw-r----- 1 root root      431 Oct 12 19:55 backup-my.cnf
drwxr-x--- 2 root root       20 Oct 12 19:55 db1
drwxr-x--- 2 root root       20 Oct 12 19:55 db2
drwxr-x--- 2 root root      146 Oct 12 19:55 hellodb
-rw-r----- 1 root root 18874368 Oct 12 19:55 ibdata1
drwxr-x--- 2 root root     4096 Oct 12 19:55 mysql
drwxr-x--- 2 root root     4096 Oct 12 19:55 performance_schema
drwxr-x--- 2 root root       20 Oct 12 19:55 test
-rw-r----- 1 root root      135 Oct 12 19:55 xtrabackup_checkpoints
-rw-r----- 1 root root      420 Oct 12 19:55 xtrabackup_info
-rw-r----- 1 root root     2560 Oct 12 19:55 xtrabackup_logfile

[root@centos7 ~]#cat /backup/xtrabackup_info
uuid = d65fd364-0c81-11eb-ae46-000c2976d39b
name =
tool_name = xtrabackup
tool_command = --backup --target-dir=/backup/
tool_version = 2.4.18
ibbackup_version = 2.4.18
server_version = 5.5.65-MariaDB
start_time = 2020-10-12 19:55:33
end_time = 2020-10-12 19:55:35
lock_time = 0
binlog_pos =
innodb_from_lsn = 0
innodb_to_lsn = 1630825
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N

[root@centos7 ~]#cat /backup/xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 1630825
last_lsn = 1630825
compact = 0
recover_binlog_info = 0
flushed_lsn = 1630825

[root@centos17 ~]#cat /data/backup/xtrabackup_binlog_pos_innodb
./mariadb-bin.000001 8069
[root@centos17 ~]#cat /data/backup/backup-my.cnf
# This MySQL options file was generated by innobackupex.

# The MySQL server
[mysqld]
innodb_checksum_algorithm=innodb
innodb_log_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:10M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=5242880
innodb_fast_checksum=false
innodb_page_size=16384
innodb_log_block_size=512
innodb_undo_directory=.
innodb_undo_tablespaces=0
server_id=0
redo_log_version=0
master_key_id=0
[root@centos7 ~]#file /data/backup/xtrabackup_logfile
/data/backup/xtrabackup_logfile: data

基于centos7 的mariadb-5.5.65实现

1.安装xtrabackup包
[root@centos7 ~]#yum -y install percona-xtrabackup-24-2.4.18-1.el7.x86_64.rpm
[root@centos17 ~]#yum -y install percona-xtrabackup-24-2.4.18-1.el7.x86_64.rpm

2.原主机做完全备份到/backup,并拷贝到目标主机上
#/backup目录不需要事先创建
[root@centos7 ~]#xtrabackup -uroot -pcentos --backup --target-dir=/backup/
[root@centos7 ~]#scp -r /backup/ 10.0.0.17:/data/

3.在目标主机上还原
1) 预准备:确保数据一致,提交完成的事务,回滚未完成的事务
[root@centos17 ~]#xtrabackup --prepare --target-dir=/data/backup/
2)复制到数据目录
注:数据库目录必须为空,MYSQL服务不能启动
[root@centos17 ~]#xtrabackup --copy-back --target-dir=/data/backup/
3)还原属性
[root@centos17 ~]#chown -R mysql.mysql /var/lib/mysql
4)启动服务
[root@centos7 ~]#systemctl start mariadb

#测试数据库文件是否还原
[root@centos7 ~]#mysql   hellodb

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1               |
| db2               |
| hellodb           |
| mysql             |
| performance_schema |
| test               |
+--------------------+
7 rows in set (0.00 sec)

基于CentOS 8 的 MySQL5.7 实现,也支持MySQL5.5和Mariadb5.5

1 安装xtrabackup包
[root@centos8 ~]#yum -y install percona-xtrabackup-24-2.4.20-1.el8.x86_64.rpm
2 在原主机做完全备份到/backup
#/backup目录不需事先创建
[root@centos8 ~]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/
[root@centos8 ~]#scp -r /backup/*   目标主机:/backup

3 在目标主机上还原
[root@centos18 ~]#yum -y install percona-xtrabackup-24-2.4.20-1.el8.x86_64.rpm
1)预准备:确保数据一致,提交完成的事务,回滚未完成的事务
[root@centos18 ~]#xtrabackup --prepare --target-dir=/backup/
2)复制到数据库目录
  注意:数据库目录必须为空,MySQL服务不能启动
[root@centos18 ~]#xtrabackup --copy-back --target-dir=/backup/
3)还原属性
[root@centos18 ~]#chown -R mysql:mysql /var/lib/mysql
4)启动服务
[root@centos18 ~]#service mysqld start

案例:旧版xtrabackup完全备份及还原

1.在源主机备份

innobackupex --user=root /backup
scp -r /backup/2018-02-23_11-55-57/     目标主机:/data/

2.在目标主机预准备开始并还原

#预准备
innobackupex --apply-log /data/2018-02-23_11-55-57/

#还原过程
systemctl stop mariadb
rm  -rf /var/lib/mysql/*
innobackupex  --copy-back /data/2018-02-23_11-55-57/
chown -R mysql.mysql /var/lib/mysql/
systemctl start mariadb

 

xtrabackup完全备份+增量备份和还原

安装xtrabackup包
[root@centos7 ~]#yum -y install percona-xtrabackup-24-2.4.18-1.el7.x86_64.rpm
1完全备份
[root@centos7 ~]#mkdir -p /backup/base/
[root@centos7 ~]#xtrabackup -uroot -pcentos --backup --target-dir=/backup/base/
2第一次修改数据
MariaDB [hellodb]> update teachers set  age=60 where tid=3;
3第一次增量备份
[root@centos7 ~]#xtrabackup -uroot -pcentos --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/
4.第二次修改数据
MariaDB [hellodb]> update teachers set age=80 where tid=2;
5.第二次增量备份
[root@centos7 ~]#xtrabackup -uroot -pcentos --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
6.拷贝文件到目标主机
[root@centos7 ~]#scp -r /backup/* 10.0.0.17:/data/backup/
#备份过程生成三个备份目录
/data/backup/{base,inc1,inc2}

还原过程
1.预准备完成备份,此选项--apply-log-only 阻止回滚未完成的事务
[root@centos17 ~]#xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base
2.合并第一次增量备份到完全备份
[root@centos17 ~]#xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base --incremental-dir=/data/backup/inc1
3.合并第二次增量备份到完全备份:最后一次还原不需要加此选项--apply-log-only
[root@centos17 ~]#xtrabackup --prepare --target-dir=/data/backup/base --incremental-dir=/data/backup/inc2
4.复制到数据库目录,注意数据库目录必须为空,MYSQL服务不能启动
[root@centos17 ~]#xtrabackup --copy-back --target-dir=/data/backup/base
5.还原属性
[root@centos17 ~]#chown -R mysql.mysql /var/lib/mysql
6,启动服务
[root@centos17 ~]#systemctl start mariadb

#测试目标主机数据库数据是否还原
[root@centos17 ~]#mysql hellodb
MariaDB [hellodb]> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name         | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang   |  45 | M     |
|   2 | Zhang Sanfeng |  80 | M     |
|   3 | Miejue Shitai |  60 | F     |
|   4 | Lin Chaoying |  93 | F     |
|   5 | xiaoqiao     |  16 | F     |
|   6 | daqiao       |  18 | F     |
+-----+---------------+-----+--------+

新版xtrabackup完全,增量备份及还原

1 备份过程
1)完全备份:
[root@centos8 ~]#mkdir /backup/
[root@centos8 ~]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/base
2)第一次修改数据
3)第一次增量备份
[root@centos8 ~]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base
4)第二次修改数据
5)第二次增量
[root@centos8 ~]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/inc2 -
-incremental-basedir=/backup/inc1
6)[root@centos8 ~]#scp -r /backup/* 目标主机:/backup/
#备份过程生成三个备份目录
/backup/{base,inc1,inc2}

2还原过程
1)预准备完成备份,此选项--apply-log-only 阻止回滚未完成的事务
[root@centos8 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base 2)合并第1次增量备份到完全备份,
[root@centos8 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base
--incremental-dir=/backup/inc1
3)合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only
[root@centos8 ~]#xtrabackup --prepare --target-dir=/backup/base --incremental•dir=/backup/inc2
4)复制到数据库目录,注意数据库目录必须为空,MySQL服务不能启动
[root@centos8 ~]#xtrabackup --copy-back --target-dir=/backup/base
5)还原属性:[root@centos8 ~]#chown -R mysql:mysql /var/lib/mysql
6)启动服务:[root@centos8 ~]#service mysqld start

旧版xtrabackup完全,增量备份及还原

1.在源主机备份

innobackupex /backup
mkdir /backup/inc{1,2}
#修改数据库内容
innobackupex  --incremental /backup/inc1 --incremental-basedir=/backup/2018-02-
23_14-21-42(完全备份生成的路径)
#再次修改数据库内容
innobackupex  --incremental /backup/inc2 --incremental•basedir=/backup/inc1/2018-02-23_14-26-17 (上次增量备份生成的路径)
scp  -r   /backup/*   目标主机:/data/

2.在目标主机还原

#预准备过程
innobackupex  --apply-log --redo-only /data/2018-02-23_14-21-42/
innobackupex  --apply-log --redo-only /data/2018-02-23_14-21-42/ --incremental•dir=/data/inc1/2018-02-23_14-26-17
innobackupex  --apply-log /data/2018-02-23_14-21-42/ --incremental•dir=/data/inc2/2018-02-23_14-28-29/

#还原过程
不启动mariadb
systemctl stop mariadb
rm -rf /var/lib/mysql/*
innobackupex  --copy-back /data/2018-02-23_14-21-42/
chown -R mysql.mysql /var/lib/mysql/
systemctl start mariadb

xtrabackup单表导出和导入

#导出
1 单表备份
innobackupex  -uroot -pmagedu --include='hellodb.students' /backup
2备份表结构
mysql -e 'show create table hellodb.students' > student.sql
3删除表
mysql -e 'drop table hellodb.students'
#导出
4 innobackupex  --apply-log --export /backups/2018-02-23_15-03-23/


5 创建表
mysql>CREATE TABLE `students` (
`StuID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Name` varchar(50) NOT NULL,
`Age` tinyint(3) unsigned NOT NULL,
 `Gender` enum('F','M') NOT NULL,
`ClassID` tinyint(3) unsigned DEFAULT NULL,
`TeacherID` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`StuID`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8
6 删除表空间
alter table students discard tablespace;
7 cp /backups/2018-02-23_15-03-23/hellodb/students.{cfg,exp,ibd}
/var/lib/mysql/hellodb/
8 chown -R mysql.mysql /var/lib/mysql/hellodb/
9 mysql>alter table students import tablespace;  

 

推荐阅读