备份恢复类问题

一、备份方式

1、根据备份后产生的文件格式,分为逻辑备份和物理备份。
(1)逻辑备份

逻辑备份的备份结果就是SQL文件,人工可读。

使用逻辑备份,即使对于memory这种数据落在内存不持久化到磁盘的存储引擎,也可以起到数据备份作用。

逻辑备份适用于所有存储引擎,不过进行逻辑备份以及使用逻辑备份进行数据恢复通常需要花费很多时间。并且对于myisam这样的存储引擎,为了保证数据的一致性,需要进行锁表的操作。

常用的MySQLDump就是一种逻辑备份工具。

(2)物理备份

物理备份的备份结果就是原数据库目录的拷贝。

由于只需要迁移数据库的数据目录,因此通常物理备份要比逻辑备份速度要快很多,只需要拷贝数据目录就可以了。

因为只对数据目录进行拷贝,因此像memory这样的数据表,因为数据是落在内存不持久化在本地磁盘上,在使用物理备份时,就只能备份memory表的结构。

如果使用物理备份,可以采用离线备份的方式,也可以采用在线备份的方式。

如果是离线备份,就需要在数据库停机或者整个数据库进行锁定的情况下进行。

如果是在线备份,则需要借助相关的工具,比如常用的Percona XtraBackup,就是一种在线物理备份工具。

(3)逻辑备份与物理备份的比较

逻辑备份的备份集可移植性较强,可以把数据库的逻辑备份恢复到不同的版本、不同平台的数据库上,但恢复效率较低。

物理备份的备份集可移植性较差,要求备份环境和恢复环境必须是完全相同的。由于物理备份是直接对数据目录进行拷贝,其备份和恢复的速度非常快。

在大型的业务系统中,较多的会使用物理备份的方式。

2、根据备份的数据范围,分为全量备份、差异备份、增量备份
(1)全量备份

所谓全量备份,就是对整个数据库进行完整备份。

(2)差异备份

所谓差异备份,就是拷贝自上一次全量备份后,有改变的文件。

差异备份的优势在于:只需要第一次全量备份和最新一次的差异备份就可以做数据还原了。

(3)增量备份

所谓增量备份,就是拷贝自上一次备份(包括全量备份、差异备份、增量备份)结束后,所发生改变的文件,与上一次是否进行的是全量备份没有关系。

增量备份的优点在于:可以在第一次全量备份后,每一次备份只需要备份少部分数据,也就意味着备份的时间更短,备份速度更快。

增量备份的劣势在于:如果想要执行数据库恢复的话,需要最近一次的全量备份,以及依次还原之后的差异备份和增量备份,恢复时间将会很长,操作也很繁琐。

 

二、常用的备份工具

名称 说明
MySQLDump 最常用的逻辑备份工具,支持全量备份和条件备份,备份结果就是MySQL转储文件,MySQL官方提供
MySQLPump 多线程逻辑备份工具, MySQLDump的增强版本,5.7版本后MySQL官方提供
XtraBackup InnoDB在线物理备份工具,支持多线程和增量备份, Percona公司开源
1、MySQLDump
(1)MySQLDump的优点

备份结果为可读的SQL文件,可用于跨版本跨平台恢复数据。

备份文件是一个文件,其大小要小于物理备份,占用磁盘空间极少。

MySQL发行版自带工具,无需安装第三方软件。

(2)MySQLDump的缺点

只能单线程执行备份,备份速度较慢。

为保证数据一致性备份,其会对备份表加锁,容易造成阻塞。

会对InnoDB Buffer Pool 造成污染。

说明:由于MySQLDump的工作方式就是把数据从表中读出来,然后再写入备份文件中,就可能会把一些原来不需要加载在InnoDB缓冲池中的冷数据加载到InnoDB缓冲池中,而把原来需要加载在InnoDB缓冲池中的热数据刷出InnoDB缓冲池,从而造成所谓的 InnoDB Buffer Pool 污染,进而降低查询性能。

(3)MySQLDump的使用

(3.1)对单独的一个数据库test_80进行备份

mysqldump -uroot -p --databases test_80 > test_80.sql

(3.2)对当前数据库实例下的某两个数据库test_80、public、进行备份

mysqldump -uroot -p --databases test_80 public > test_pub.sql

(3.3)对当前数据库实例下的所有数据库、数据表进行备份

mysqldump -uroot -p --all-databases > backup.sql

(3.4)对数据库test_80下的数据表inventory进行备份

mysqldump -uroot -p test_80 inventory > inventory.sql

(3.5)对数据库test_80下的数据表inventory进行条件备份

mysqldump -uroot -p test_80 inventory --where "is_deleted=0" > inventory_where.sql

 

2、MySQLPump
(1)MySQLPump的优点

MySQL发行版自带工具,无需安装第三方软件,是MySQLDump的增强版

语法同MySQLDump高度兼容,学习成本低

支持基于库和表的并行备份,可以提高逻辑备份的性能

支持使用zlib和Lz4算法对备份进行压缩

(2)MySQLPump的缺点

5.7.11版本之前,一致性备份和并行备份不能同时使用,只能选其一

其是基于表进行并行备份,所以如果单纯对一个大表备份,其性能和MySQLDump相比差别不大

同MySQLDump类似,也会对InnoDB Buffer Pool造成污染

(3)MySQLPump的使用

MySQLPump高度兼容MySQLDump,因此几乎所有在MySQLDump上使用的命令,在MySQLPump上都可以使用。

比如对单独的一个数据库test_80进行备份

mysqlpump -uroot -p --databases test_80 > test_80.sql

可以看到,相比于MySQLDump,MySQLPump的使用只要将命令中的mysqldump 换成mysqlpump即可。

下面说一下和mysqlpump的特别使用:

mysqlpump自身支持对备份文件进行压缩,可选压缩算法为zlib和Lz4算法,压缩后可以节省很多磁盘空间,下面介绍其大致用法。

# 对数据库test_80进行逻辑备份,同时对备份文件进行zlib压缩
mysqlpump -uroot -p --compress-output=zlib --databases test_80 > test_80.zlib
# 将zlib压缩的备份文件解压为可执行SQL文件
zlib_decompress test_80.zlib test_80.sql
只导出用户数据(包括用户权限)
mysqlpump -uroot -p --users --exclude-databases=sys,mysql,public,test_80,new_retail > user.sql

 

3、XtraBackup

由于该篇文章篇幅过长,因此XtraBackup相关内容记录在了文章 热备工具-Percona XtraBackup