
一、物理冷备份
冷备份其实就是停掉数据库服务,cp数据文件的方法;这种方法对MyISAM和InnoDB存储引擎都合适,但是一般很少使用,
因为很多应用是不允许长时间停机的。
- 进行备份的操作过程:
停掉MySQL服务,在操作系统级别备份MySQL的数据文件和日志文件到备份目录;
- 进行恢复的操作过程:
停掉MySQL服务,在操作系统级别恢复MySQL的数据文件,然后重启MySQL服务,使用mysqlbinlog工具恢复增量数据日志;
二、物理热备份
在MySQL中,对于不同的存储引擎热备份方法也有所不同,下面主要介绍MyISAM和InnoDB两种最常用的存储引擎的热备份方法;
2.1 数据库存储引擎应用:MyISAM
MyISAM存储引擎的热备份有很多方法,本质其实就是将要备份的表加读锁,然后再cp数据文件到备份目录:
方法一:使用mysqlhotcopy工具
mysqlhotcopy是MySQL自带的一个热备份工具,使用方法很简单:
[root@master ~]# mysqlhotcopy db_name [/path/to/new_directory]
-- mysqlhotcopy有很多选项,具体可以使用--help查看帮助信息;
参考官方链接说明:https://dev.mysql.com/doc/refman/5.6/en/mysqlhotcopy.html
方法二:手工锁表copy
在mysqlhotcopy使用不熟悉的情况下,可以手工来做热备份,操作步骤如下:
# 对数据库中所有表加读锁:
mysql> flush tables for read;
-- 然后cp数据文件到备份目录即可;
2.2 数据库存储引擎应用:InnoDB
ibbackup是Innobase公司的一个热备份工具,专门对InnoDB存储引擎进行物理热备份,此工具是收费的,但可以免费使用1个月;
Innobase公司已经于2005年被Oracle公司所收购。
使用ibbackup备份工具的备份步骤简要说明:
01 编辑用于启动的配置文件my.cnf和用于备份的配置backup-my.cnf
# 配置文件配置参考:my.cnf
[mysqld]
datadir=/data/3306/data
innodb_data_home_dir=/data/3306/data
innodb_data_file_path=ibdata1:100M;ibdata2:200M;ibdata3:500M:autoextend
innodb_log_group_home_dir=/data/3306/data
set-variable=innodb_log_files_in_group=2
set-variable=innodb_log_file_size=20M
# 配置文件配置参考:backup-my.cnf
[mysqld]
datadir=/data/3306/backup
innodb_data_home_dir=/data/3306/backup
innodb_data_file_path=ibdata1:100M;ibdata2:200M;ibdata3:500M:autoextend
innodb_log_group_home_dir=/data/3306/backup
set-variable=innodb_log_files_in_group=2
set-variable=innodb_log_file_size=20M
02 实现数据文件信息热备过程:
-- ibbackup工具不会覆盖任何重名的文件,因此在新的备份开始之前,需要确保备份目录中没有重名文件,否则备份可能会失败
[root@master ~]# ibbackup /data/3306/my.cnf /data/3306/backup-my.cnf
... 省略部分信息...
-- 备份成功后,备份目录下包含有数据文件和日志文件等相关数据信息;
[root@master ~]# ll /data/3306/backup
Xtrabackup(PXB)是Percona公司CTO Vadim参与开发的一款基于InnoDB的在线热备工具,属于物理备份数据工具;
具有开源、免费、支持在线热备、备份恢复速度快、占用磁盘空间小等特点,并且支持不同情况下的多种备份形式。
官方软件下载链接:https://www.percona.com/downloads/
对于数据库8.0.20版本,需要使用PXB 8.0.12+以上版本,对于数据库8.0.11~8.0.19,可以使用PXB 8.0正式版本;
PXB 8.0只能备份MySQL 8.0版本数据,不能备份低版本数据信息;如果想备份数据库服务低版本程序数据,需要下载使用PXB 2.4版本;
xtrabackup包含两个主要的工具:xtrabackup和innobackupex
-
xtrabackup 只能备份InnoDB和XtraDB两种类型的数据表,而不能备份MyISAM类型数据表;
-
innobackupex 是一个封装了xtrabackup的perl脚本,支持同时备份InnoDB和MyISAM,但对MyISAM备份时需要加全局读锁;
由于PXB属于第三方软件工具程序,因此需要进行单独下载安装:
# 进行软件程序上传
[root@master ~]# cd /usr/local/
[root@master local]# rz -y
[root@master local]# ll percona-xtrabackup-80-8.0.13-1.el7.x86_64.rpm
-r-------- 1 root root 13097340 11月 27 02:08 percona-xtrabackup-80-8.0.13-1.el7.x86_64.rpm
-- 利用yum方式安装本地的rpm包程序,可以有效解决软件依赖的问题;
# 进行软件程序安装
[root@master local]# yum install -y percona-xtrabackup-80-8.0.13-1.el7.x86_64.rpm
-- 验证
[root@master local]# which xtrabackup
/usr/bin/xtrabackup
Xtrabackup(PXB)属于物理备份工具(针对数据文件进行备份),具体备份逻辑如下:(支持增量备份数据)
-
在数据库服务运行期间,通过拷贝数据文件(实质拷贝的是数据页),进而实现数据备份目的;
-
在进行数据文件拷贝的同时,会将备份期间的变化redo日志信息同时进行备份(拷贝);
Xtrabackup(PXB)属于物理备份工具(针对数据文件进行备份),具体恢复逻辑如下:
-
在进行数据恢复时,模拟了InnoDB Crash recovery(CR)的运行过程,需要将备份进行处理,才能进行数据恢复;
-
在进行数据恢复时,对于备份进行处理操作,特指的就是前滚操作(redo)和回滚操作(undo),从而解决数据恢复一致性问题;
Xtrabackup数据备份方式01:实现全量备份
# 全量备份操作:
-- 进行物理备份的目标目录不能存在数据信息,需要指定一个空目录进行备份
[root@master ~]# mkdir /data/backup/full -p
-- backup参数信息表示进行全备操作
[root@master ~]# xtrabackup --defaults-file=/data/3306/data/my.cnf --host=10.0.0.51 --user=root --password=123456 --port=3306 --backup --target-dir=/data/backup/full
或者使用参数--datadir替换掉参数--defaults-file
[root@master ~]# xtrabackup --datadir=/data/3306/data --user=root --password=123456 --port=3306 --backup --target-dir=/data/backup/full
# 物理备份命令执行输出信息说明:
221127 02:46:11 >> log scanned up to (277574297)
-- 记录日志位置点信息,表示进行拷贝数据的checkpoint的SN号码,相当于磁盘当前数据页的SN号码;
Using undo tablespace './undo_001'.
Using undo tablespace './undo_002'.
Opened 2 existing undo tablespaces.
221127 02:46:11 [01] Copying ./ibdata1 to /data/backup/full/ibdata1
221127 02:46:11 [01] ...done
221127 02:46:11 [01] Copying ./sys/sys_config.ibd to /data/backup/full/sys/sys_config.ibd
221127 02:46:11 [01] ...done
221127 02:46:11 [01] Copying ./mysql.ibd to /data/backup/full/mysql.ibd
... 省略部分信息...
-- 进行相关数据文件、日志文件、共享表空间文件、数据表空间文件等文件的拷贝,并且拷贝过程是不会进行锁表操作的;
-- 数据表空间信息备份完毕后,会有提示字段信息,并且此时会锁定binlog日志文件,并将binlog日志文件复制到备份目录;
-- 在进行binlog日志文件备份时,会生成xtrabackup_binlog_info文件信息,用于记录物理备份后的二进制日志位置点;
-- 二进制日志文件备份完毕后,会释放binlog日志文件锁定状态,并再次检查checkpoint的SN号码,确认redo日志是否变化;
-- 可以看到将原有数据库的数据目录信息,已经基本迁移到指定的物理备份目录中;
[root@master backup]# ll /data/backup/full/
Xtrabackup数据备份工具在热备操作后产生的特殊数据文件说明:
| 序号 | 文件名称 | 解释说明 |
|---|---|---|
| 01 | xtrabackup_binlog_info | 表示用于存储备份时的binlog位置点信息 |
| 02 | xtrabackup_checkpoints | 表示用于记录备份时的数据页LSN信息,主要用于接下一次备份,需要保证连续性; |
| 03 | xtrabackup_info | 表示整体物理备份信息的总览 |
| 04 | xtrabackup_logfile | 表示存储在备份数据期间产生的新的的redo日志的信息; |
| 05 | xtrabackup_tablespaces | 表示用于存储表空间的其余信息 |
Xtrabackup数据恢复方式01:全量备份恢复
当数据库数据破坏后进行恢复时,需要注意的几点地方:
-
1)/data目录下所有的目录和文件所属者都被修改为root,需要手动执行
chown -R mysql.mysql /data/*命令进行修改 -
2)如果配置文件也存放在/data目录下,删除后无法进行恢复,需要提前进行备份保存。最好提前做好配置文件和数据进行分离
-
3)/data/3306/logs/目录下所有日志文件都会被清理,如果有需要,需要提前进行备份操作
模拟进行数据库数据破坏性操作:
[root@master ~]# pkill mysqld
[root@master ~]# rm -rf /data/3306/data/*
[root@master ~]# rm -rf /data/3306/logs/*
[root@master ~]# rm -rf /data/3306/binlog/*
进行数据库数据恢复的操作过程:
-- 表示模拟CR过程,将redo日志进行前滚,undo日志进行回滚,让恢复数据信息保持一致性状态
[root@master ~]# xtrabackup --prepare --target-dir=/data/backup/full
...忽略部分信息...
Shutdown completed; log sequence number 19214860
221127 16:31:58 completed OK!
-- 将进行物理备份后的数据,再次进行还原恢复到备份前的目录中(拷贝回数据)
[root@master ~]# xtrabackup --copy-back --target-dir=/data/backup/full
-- 重新设置数据目录权限,并重新启动恢复数据库业务
[root@master ~]# chown -R mysql.mysql /data/*
[root@master ~]# /etc/init.d/mysqld start
Xtrabackup数据备份方式02:实现增量备份
xtrabackup物理备份数据时,实现增量备份原理分析:
-
增量备份的实质是,基于上一次备份LSN变化过的数据页,进行相应的备份操作,从而可以不断实现增量备份操作;
-
在备份同时产生的新的变更,会将redo日志信息备份;
-
第一次增量备份时依赖于全量备份的,将来的恢复操作也要合并到全备中,再进行统一恢复;
说明:利用XPK增量备份数据,主要目的是减少频繁全备数据的时间开销,可以将每天增量的数据进行更快速的备份

# 增量备份准备:
-- 提前准备好全量备份的目录;
[root@master ~]# mkdir /data/backup/full -p
-- 提前准备好增量备份的目录;
[root@master ~]# mkdir /data/backup/inc -p
# 进行备份操作:
-- 进行全量备份操作,并且开启并发线程备份功能(--parallel=4),从而提高备份效率(建议4~8个)
[root@master ~]# xtrabackup --defaults-file=/etc/my.cnf --host=10.0.0.51 --user=root --password=123456 --port=3306 --backup --parallel=4 --target-dir=/data/backup/full
-- 模拟登陆数据库,进行相关操作,实现增量备份的效果
mysql> create database pxb;
mysql> use pxb
mysql> create table t1(id int);
mysql> insert into t1 values(1),(2),(3);
mysql> commit;
-- 进行增量备份操作
[root@master ~]# xtrabackup --defaults-file=/etc/my.cnf --host=10.0.0.51 --user=root --password=123456 --port=3306 --backup --parallel=4 --target-dir=/data/backup/inc --incremental-basedir=/data/backup/full
# 可以进行继续备份操作(了解)
-- 提前准备好增量备份的增量备份目录;
[root@master ~]# mkdir /data/backup/inc02 -p
-- 模拟登陆数据库,进行相关操作,实现增量备份的效果
mysql> create database pxb02;
mysql> use pxb02
mysql> create table t1(id int);
mysql> insert into t1 values(1),(2),(3);
mysql> commit;
-- 进行增量备份操作的下一次增量备份
[root@master ~]# xtrabackup --defaults-file=/etc/my.cnf --host=10.0.0.51 --user=root --password=123456 --port=3306 --backup --parallel=4 --target-dir=/data/backup/inc02 --incremental-basedir=/data/backup/inc
Xtrabackup数据恢复方式02:增量备份恢复
模拟进行数据库数据破坏性操作:
[root@master ~]# pkill mysqld
[root@master ~]# rm -rf /data/3306/data/*
[root@master ~]# rm -rf /data/3306/logs/*
[root@master ~]# rm -rf /data/3306/binlog/*
进行数据库数据恢复的操作过程:
# 准备相关备份日志信息
-- 准备全量备份的日志;
[root@master ~]# xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full
-- 准备增量备份的日志,并且将增量备份合并到全量备份中;如果后面还有增量数据继续合并到全量备份中,比如再将/data/backup/inc02目录下面的数据合并到/data/backup/full目录当中xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full --incremental-dir=/data/backup/inc02
[root@master ~]# xtrabackup --prepare --apply-log-only --target-dir=/data/backup/full --incremental-dir=/data/backup/inc
-- 在全量和增量数据合并后,在整体做日志信息的准备;
[root@master ~]# xtrabackup --prepare --target-dir=/data/backup/full
# 进行数据备份拷回操作
-- 将进行物理备份后的数据,再次进行还原恢复到备份前的目录中(拷贝回数据)
[root@master ~]# xtrabackup --datadir=/data/3306/data --copy-back --target-dir=/data/backup/full
或者
[root@master ~]# xtrabackup --copy-back --target-dir=/data/backup/full
# 重新启动恢复业务功能
-- 重新设置数据目录权限,并重新启动恢复数据库业务
[root@master ~]# chown -R mysql.mysql /data/*
[root@master ~]# /etc/init.d/mysqld start
官方参数参考链接:https://docs.percona.com/percona-xtrabackup/8.4/xtrabackup-option-reference.html?h=apply+log#apply-log-only
相关参数说明:
- –apply-log-only:在恢复数据过程中,不加载undo文件内容,保证数据恢复一致性





暂无评论内容