1、数据备份概述
备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低。
数据丢失的场景举例:
硬件故障
软件故障
自然灾害
黑客攻击
误操作 (占比最大)
1.1、衡量备份恢复重要指标
衡量备份恢复有两个重要的指标:
恢复点目标(RPO)
恢复点目标是指数据能恢复到什么程度
恢复时间目标(RTO)
恢复时间目标是指数据恢复需要多长时间
1.2、数据库备份分类
数据库备份方式分很多种,从物理与逻辑的角度来看,备份可分为:
物理备份:指对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份)。
冷备份:在关闭数据库时进行的备份操作,能够较好地保证数据库的完整性。
热备份:在数据库运行状态中进行操作,这种备份方法依赖于数据库的日志文件。
逻辑备份:指对数据库逻辑组件(如"表"等数据库对象)的备份。
数据库的备份从策略角度来看,备份可分为以下几类:
完全备份:每次对数据进行完整的备份。可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多的时间和空间,所以,做一次完全备份的周期要长些。
差异备份:备份那些自从上次完全备份之后被修改过的文件,只备份数据库部分的内容。它比最初的完全备份小,因为只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。
增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。
2、MySQL备份工具
2.1、mysqldump备份工具
MySQL官方提供了Mysqldump逻辑备份工具,它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert语句,当我们需要还原这些数据时,只要执行这些insert语句,即可将对应的数据还原。
//mysqldump命令语法:
mysqldump [选项] 数据库名 [表名] > 备份文件名选项列表:
数据库备份实例演示:
备份所有数据库:
mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db
备份指定数据库:
mysqldump -uroot -d test > /backup/mysqldump/test.db
备份指定数据库,指定表(多个库或表以空格间隔):
mysqldump -uroot -p mysql db event > /backup/mysqldump/2table.db
备份指定数据库排除某些表:
mysqldump -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > /backup/mysqldump/test2.db数据库还原实例演示:
//mysqldump工具导入数据库备份,在导入备份数据库前,需要先手动创建数据库并且数据库名称和原来保持一致
mysql -uroot -p -e "create database db_name"
mysql -uroot -p db_name < /backup/mysqldump/db_name.db
//soure方法
mysql > use db_name
mysql > source /backup/mysqldump/db_name.db2.2、tar冷备份工具
tar归档工具,使用tar直接归档数据库文件也可实现数据库的备份,但需要数据库处于停止运行状态。
//先关闭mariadb服务
systemctl stop mariadb.service
//备份所有的数据库文件
cd /var/lib/mysql/
tar -zcvf /root/mysql_`date +%F`.tar.gz *
//还原备份的数据,还原之后记得修改文件属主
tar -xvf /root/mysql_2021-03-08.tar.gz -C /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql/
systemctl start mariadb.service
2.3、Xtrabackup备份工具
XtraBackup(PXB)工具是Percona公司用perl语言开发的一个用于 MySQL数据库物理热备的备份工具,能够非常快速地备份与恢复mysql数据库,且支持在线热备份(备份时不影响数据读写)。
Xtrabackup中包含两个工具:
xtrabackup :用于热备份innodb,xtradb引擎表的工具,不能备份其他表。
innobackupex :提供了用于myisam(会锁表)和innodb引擎,及混合使用引擎备份的能力。
Xtrabackup的优点:
备份速度快,物理备份可靠
备份过程不会打断正在执行的事务(无需锁表)
能够基于压缩等功能节约磁盘空间和流量
自动备份校验
还原速度快
可以流传,将备份传输到另外一台机器上
在不增加服务器负载的情况备份数据
支持增量备份
//语法:
xtrabackup | innobackupex [--defaults-file=#] [--backup | --prepare | --copy-back | --move-back] [OPTIONS]Xtrabackup工具备份常用选项:
//下载安装Xtrabackup备份工具
wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.22-15/binary/redhat/8/x86_64/percona-xtrabackup-80-8.0.22-15.1.el8.x86_64.rpm
dnf -y localinstall percona-xtrabackup-80-8.0.22-15.1.el8.x86_64.rpm
//完全备份
trabackup --backup --databases=test --target-dir=/backup/xtrabackup/ -uroot -p123456
//恢复阶段:准备备份,恢复之前需要准备备份
xtrabackup --prepare --target-dir=/backup/xtrabackup/
//恢复数据(保证要还原的数据库服务器的data目录为空)
rm -rf /var/lib/mysql/* //模拟数据丢失
xtrabackup --copy-back --target-dir=/backup/xtrabackup/
chown -R mysql:mysql /var/lib/mysql
systemctl restart mysqld增量备份:
//先创建完全备份
xtrabackup --backup --databases=test --target-dir=/backup/xtrabackup/ -uroot -p123456
//创建第一次增量备份
xtrabackup --backup --databases=test --target-dir=/backup/inc1/ --incremental-basedir=/backup/xtrabackup/ -uroot -p123456
//创建第二次增量备份
xtrabackup --backup --databases=test --target-dir=/backup/inc2/ --incremental-basedir=/backup/inc1/ -uroot -p123456
//恢复阶段:准备全量备份
xtrabackup --prepare --apply-log-only --target-dir=/backup/xtrabackup/
//准备第一次增量备份,将第一次增量备份与全备合并
xtrabackup --prepare --apply-log-only --target-dir=/backup/xtrabackup/ --incremental-dir=/backup/inc1
//准备第二次增量备份,将第二次增量备份与全备合并
xtrabackup --prepare --target-dir=/backup/xtrabackup/ --incremental-dir=/backup/inc2/
//恢复数据(保证要还原的数据库服务器的data目录为空)
rm -rf /var/lib/mysql/* //模拟数据丢失
xtrabackup --copy-back --target-dir=/backup/xtrabackup/
chown -R mysql:mysql /var/lib/mysql
systemctl restart mysqld2.4、Mariabackup备份工具
Mariabackup是MariaDB提供的一个开源工具,用于对InnoDB,Aria和MyISAM表进行物理在线备份。这个工具基于Percona的XtraBackup解决方案。
//语法:
mariabackup [--defaults-file=#] [--backup | --prepare | --copy-back | --move-back] [OPTIONS]完全备份与恢复:
//全量备份
mariabackup --backup --target-dir /root/mariadb-backup-`date +%F` --user root --password "1"
//恢复阶段:准备全备数据,恢复之前必须准备
mariabackup --prepare --target-dir /root/mariadb-backup-2021-03-10/ --user root --password "1"
//恢复数据(保证要还原的数据库服务器的data目录为空)
rm -rf /var/lib/mysql/* //模拟数据丢失
mariabackup --copy-back --target-dir /root/mariadb-backup-2021-03-10/ --user root --password "1"
chown -R mysql.mysql /var/lib/mysql/
systemctl restart mariadb.service增量备份与恢复:
//全量备份,增量备份前需要先进行一次全量备份
mariabackup --backup --target-dir /root/mariadb-backup-`date +%F` --user root --password "1"
//基于全量备份,进行第一次增量备份
mariabackup --backup --target-dir /root/mariadb-backup-`date +%F`-inc1 --incremental-basedir /root/mariadb-backup-2021-03-10/ --user root --password "1"
//恢复阶段:现在有2个备份,一个是全备一个是增量备份
//准备全备数据
mariabackup --prepare --apply-log-only --target-dir /root/mariadb-backup-2021-03-10/ --user root --password "1"
//将增量备份与全备合并
mariabackup --prepare --target-dir /root/mariadb-backup-2021-03-10/ --incremental-dir /root/mariadb-backup-2021-03-10-inc1/ --user root --password "1"
//如果有多次增量备份,按照增量备份顺序依次将增量备份与全备合并,记得加--apply-log-only选项,最后一次增量备份不需要添加该选项
//恢复数据(保证要还原的数据库服务器的data目录为空)
rm -rf /var/lib/mysql/* //模拟数据丢失
mariabackup --copy-back --target-dir /root/mariadb-backup-2021-03-10/ --user root --password "1"
chown -R mysql.mysql /var/lib/mysql/
systemctl restart mariadb.service
评论区