首先我们得知道为什么要做数据备份,我认为作为一个合格的云计算运维工程师,对数据做定期的备份是必备的基本技能和反射条件。对数据的备份能够防止系统崩溃或人为失误操作带来的数据丢失的安全隐患。我们都知道数据有多份冗余,但不等于备份,比如像xfs和ext4这些文件系统,它们都属于日志式的文件系统,对数据能进行相应的日志缓存,但也只能防止系统的突然崩溃或断电带来的数据丢失,因为它们可以通过日志进行回溯追踪,从而恢复相应的数据。那如何对mysql数据库备份呢?那得通过相关备份工具来实现了。接下来将会详细介绍如何通过xtrabackup工具来进行mysql数据库的备份及恢复过程。
备份工具 | 说明 | 备份类型 |
---|---|---|
libbackup | 官方备份工具,收费 | 物理备份 |
xtrabackup | 开源社区备份工具 | 物理备份 |
mysqldump | 官方自带备份工具,开源免费 | 逻辑备份 |
mysqlbackup | 官方备份工具 | 物理备份 |
这三种数据备份的方式我在xfs文件系统的完全备份、增量备份及数据恢复一文中简单介绍过,大家可以去看一看。
每次对数据进行完整的备份,即对整个数据库的备份、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础。
(1)备份测试数据(完全备份)
nnobackupex --user=root --password='ZRSanqy@123' /xtrabackup/
ls /xtrabackup/
(1)停止数据库
systemctl stop mysqld
(2)删除mysql数据(用于恢复测试)
rm -rf /var/lib/mysql/*
rm -rf /var/log/mysqld.log
(3)重演恢复
innobackupex --apply-log /xtrabackup/2020-08-20_14-55-22/
cat /etc/my.cnf
innobackupex --copy-back /xtrabackup/2020-08-20_14-55-22/
chown mysql.mysql /var/lib/mysql -R
(7)启动mysqld服务
systemctl start mysqld
(8)查看数据库中的数据
select * from test.t1
只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。以上次完整备份或上次的增量备份的时间为时间点,仅备份这之间的数据变化。
(1)备份测试数据(完全备份)
innobackupex --user=root --password='ZRSanqy@123' /xtrabackup
ls /xtrabackup
innobackupex --user=root --password='ZRSanqy@123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2020-08-20_16-53-22/ --在全备份基础上的第一次增量备份
innobackupex --user=root --password='ZRSanqy@123' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2020-08-20_17-11-18/ --在第一次增量备份基础上的第二次增量备份
(1)停止数据库
systemctl stop mysqld
(2)删除mysql数据(用于恢复测试)
rm -rf /var/lib/mysql/*
(3)依次重演恢复
innobackupex --apply-log --redo-only /xtrabackup/2020-08-20_16-53-22/
innobackupex --apply-log --redo-only /xtrabackup/2020-08-20_16-53-22/ --incremental-dir=/xtrabackup/2020-08-20_17-11-18/
innobackupex --apply-log --redo-only /xtrabackup/2020-08-20_16-53-22/ --incremental-dir=/xtrabackup/2020-08-20_17-49-22
(4)mysql数据恢复
innobackupex --copy-back /xtrabackup/2020-08-20_16-53-22/ --重演恢复完后再次恢复全备份数据即可
(5)修改恢复的目录属主和属组
chown mysql.mysql /var/lib/mysql -R
(6)启动mysqld服务
systemctl start mysqld
(7)查看数据库中的数据
select * from test.t1
备份那些自从第一次次完全备份之后被修改过的所有文件,备份的时间起点是从第一次次完整备份起,且以后每次备份都是和第一次完整备份进行比较(注意是第一次,不是上一次),备份自第一次完整备份以来所有的修改过的文件。备份数据量会越来越大。
事先准备测试数据:
这里以3.2节增量备份恢复的数据作为原数据进行数据备份恢复测试。
(1)备份测试数据(完全备份)
innobackupex --user=root --password='ZRSanqy@123' /xtrabackup/ --完整备份
innobackupex --user=root --password='ZRSanqy@123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-08-20_19-22-22/ --基于完整备份的第一次差异备份
innobackupex --user=root --password='ZRSanqy@123' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-08-20_19-22-22/ --基于完整备份的第二次差异备份
(1)停止数据库
systemctl stop mysqld
(2)删除mysql数据(用于恢复测试)
rm -rf /var/lib/mysql/*
(3)依次重演恢复
innobackupex --apply-log --redo-only /xtrabackup/2020-08-20_19-22-22/
innobackupex --apply-log --redo-only /xtrabackup/2020-08-20_19-22-22/ --incremental-dir=/xtrabackup/2020-08-20_19-48-32/ --这里选择重演恢复第二次的差异备份
(4)mysql数据恢复
innobackupex --copy-back /xtrabackup/2020-08-20_19-22-22/ --重演恢复完后再次恢复全备份数据即可
(5)修改恢复的目录属主和属组
chown mysql.mysql /var/lib/mysql -R
(6)启动mysqld服务
systemctl start mysqld
(7)查看数据库中的数据
select * from test.t1