xtrabackup工具备份和还原
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;