删除不必跑路,详解MySQL备份恢复
📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10年DBA工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
擅长主流数据Oracle、MySQL、PG 运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
文章目录
- 前言
-
- 🚀 1.MySQL备份种类
-
- 🌈 1.1 备份方法
- 🌈 1.2 备份文件的种类
- 🌈 1.3 备份内容
- 🚀 2.MySQL冷备
- 🚀 3.mysqldump 逻辑备份恢复
-
- 🌈 3.1 mysqldump概述
- 🌈 3.2 逻辑备份
- 🌈 3.3 逻辑恢复
- 🚀 4.PXB物理备份恢复
-
- 🌈 4.1 PXB概述
- 🌈 4.2 PXB安装
- 🌈 4.3 全量备份和恢复
前言
MySQL作为一个数据库系统,其备份自然也是非常重要且有必要去做。备份的理由千千万,预防故障,安全需求,回滚,审计,删了又改的需求等等,备份的重要性不言而喻
🚀 1.MySQL备份种类
✨✨MySQL支持的备份类型如下图所示:
🌈 1.1 备份方法
备份可以分为如下 3种:
a.热备份(Hot Backup):热备份也称为在线备份(Online Backup),是指在数据库运行的过程中进行备份,对生产环境中的数据库运行没有任何影响。
常见的热备方案是利用 mysqldumpXtraBackup 等工具进行备份。
b.冷备份(Cold Backup):冷备份也称为离线备份(Offline Backup),是指在数据库关闭的情况下进行备份,这种备份非常简单,只需要关闭数据库,复制相关的物理文件即可。目前,线上数据库一般很少能够接受关闭数据库,所以该备份方式很少使用。
c.温备份(Warm Backup):温备份也是在数据库运行的过程中进行备份,但是备份会对数据库操作有所影响。该备份利用锁表的原理备份数据库,由于影响了数据库的操作,故该备份方式也很少使用。
🌈 1.2 备份文件的种类
备份可以分为如下两种:Physical (Raw) Versus Logical Backups
a.物理备份(Physical Backup):物理备份也称为裸文件备份(Raw Backup),是指复制数据库的物理文件。物理备份即可以在数据库运行的情况下进行备份(常见备份工具:MySQL Enterprise Backup(商业)、XtraBackup 等),也可以在数据库关闭的情况下进行备份。该备份方式不仅备份速度快,而且恢复速度也快,但是由于无法查看备份后的内容,所以只能等到恢复之后,才能检验备份出来的数据是否是正确的。
b.逻辑备份(Logical Backup):逻辑备份是指备份文件的内容是可读的,该文本一般都是由一条条 SQL 语句或者表的实际数据组成。常见的逻辑备份方式有 mysqldump、
SELECT … INTO OUTFILE 等方法。这类备份方法的好处是可以观察备份后的文件内容,缺点是恢复时间往往都会很长。
逻辑备份的最大优点是对于各种存储引擎都可以用同样的方法来备份;
而物理备份则不同,不同的存储引擎有着不同的备份方法。
因此,对于不同存储引擎混合的数据库,用逻辑备份会更简单一些。
🌈 1.3 备份内容
备份可以划分为如下 3 种:
a.全量备份(Full Backup):全量备份(完全备份)是指对数据库进行一次完整的备份,备份所有的数据,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。这是一般常见的备份方式,可以使用该备份快速恢复数据库,或者搭建从库。恢复速度也是最快的,但是每次备份会消耗较多的磁盘空间,并且备份时间较长。所以,一般推荐一周做一次全量备份。
b.增量备份(Incremental Backup):增量备份也叫差异备份,是指基于上次完整备份或增量备份,对数据库新增的修改进行备份。这种备份方式有利于减少备份时使用的磁盘空间,加快备份速度。但是恢复的时候速度较慢,并且操作相对复杂。推荐每天做一次增量备份。
c.日志备份(Binary Log Backup):日志备份是指对数据库二进制日志的备份。二进制日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。该备份方式一般与上面的全量备份或增量备份结合使用,可以使数据库恢复到任意位置。所以,推荐每小时甚至更频繁的备份二进制日志。
在生产环境上,一般都会选择以物理备份为主,逻辑备份为辅,加上日志备份,来满足线上使用数据库的需求。
🚀 2.MySQL冷备
–使用cp进行冷备份
1、关闭 MySQL 数据库服务器
2、拷贝 MySQL 数据库的数据文件
mkdir /backup #创建文件夹存放备份数据库文件
cp -a /var/lib/mysql/* /backup #保留权限的拷贝源数据文件
ls /backup #查看目录下的文件
3、恢复数据库
cp -a /backup/* /var/lib/mysql/ #将备份的数据文件拷贝回去
systemctl start mysqld #重启 MySQL
🚀 3.mysqldump 逻辑备份恢复
🌈 3.1 mysqldump概述
Mysqldump 是 mysql 自带的备份工具,
目录在 bin 目录下面:/usr/local/mysql/bin/mysqldump,支持基于 innodb 的热备份。
但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景,是一个客户端工具
Mysqldump 完全备份+二进制日志可以实现基于时间点的恢复。
🌈 3.2 逻辑备份
1.直接导出表结构和数据(保持一行)
mysqldump -uroot -proot -h192.168.1.54 -P3310 --single-transaction --hex-blob --routines --events --triggers --master-data=2 --databases db_school --default-character-set=utf8 --max_allowed_packet=512M > e:\db_school.sql
✨✨ 参数说明:
#single-transaction 表示一致性备份
#hex-blob 表示可以导出二进制数据,包括图片或者文字,blob
#routines 表示存储过程和函数
#events 表示 job
#triggers 表示触发器
#master-data=2 表示 dump 文件中包含了创建主从复制的相关sql
#max_allowed_packet 是Mysql中的一个设定参数,用于设定所接受的包的大小
✨✨select @@max_allowed_packet;
🌈 3.3 逻辑恢复
导入表结构和数据
mysql -uroot -proot -h192.168.1.54 -P3310 -f --default-character-set=utf8 < db_school_ddl.sql
mysql -uroot -proot -h192.168.1.54 -P3310 -f --default-character-set=utf8 -D db_school< db_school_data.sql
🚀 4.PXB物理备份恢复
🌈 4.1 PXB概述
PXB(Percona XtraBackup)
Xtrabackup 是由 Percona 公司提供的一款 MySQL 数据库备份恢复工具,
是一款开源的能够对 Innodb 和 xtradb 存储引擎数据库进行热备的工具(备份时不影响数据读写)
MySQL冷备、mysqldump、MySQL热拷贝都无法实现对数据库进行增量备份, 在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况下,可以每天进行完整备份,如果每天产生的数据量较大,需要定制数据备份策略。例如每周实用完整备份,周一到周六实用增量备份。而Percona-Xtrabackup就是为了实现增量备份而出现的一款主流备份工具。
特点:
(1)备份过程快速、可靠;
(2)备份过程不会打断正在执行的事务;
(3)能够基于压缩等功能节约磁盘空间和流量;
(4)自动实现备份检验;
(5)还原速度快;
🌈 4.2 PXB安装
✨✨ 安装
yum list | grep percona-xtrabackup
yum install -y percona-xtrabackup-24
yum install -y percona-xtrabackup-80
rpm -qa | grep percona
–查看版本
[root@pxbtest /]# which xtrabackup
[root@pxbtest /]# xtrabackup --version
[root@pxbtest /]# percona-release --help
🌈 4.3 全量备份和恢复
✨✨ 备份
mkdir -p /bk/
xtrabackup -uroot -proot -S/var/lib/mysql/mysql.sock --backup --target-dir=/bk/full
✨✨ 恢复:prepare + copy-back
xtrabackup --prepare --target-dir=/bk/full
–此时关闭数据库 systemctl stop mysqld
xtrabackup --copy-back --target-dir=/bk/full --datadir=/var/lib/mysql
chown -R mysql:mysql /var/lib/mysql