备份恢复
数据备份对我们很重要,数据库运行中,可能会发生很多问题。例如:操作系统异常,硬件错误或者用户误删除数据。
在升级数据库版本之前,备份数据也是有必要的。备份的数据可以用于其他系统,或者设置一个分布式的备份数据库。
mysql提供了多种备份策略。 本文包括以下内容:
- 备份类型: 逻辑 vs 物理 , 全量 vs 增量
- 备份的方法
- 恢复的方法
- 备份的 调度,压缩,加密
- 表维护以便修复损坏的表
[图片上传失败...(image-a88279-1560359081443)]
类型
逻辑 vs 物理
物理备份会拷贝存储数据库内容的目录和文件。 这适用于在出现问题时需要快速恢复的大型,重要的数据库。
逻辑备份保存的数据是数据库的逻辑结构(CREATE DATABASE, CREATE TABLE 语句) 和内容(INSERT 语句或分割的文件)。
这适用于小型数据库,可以修改数据和表结构或者在其他系统重新创建数据。
物理备份有以下特点:
- 包含了数据库目录和文件的精确副本。通常是所有或部分mysql data目录
- 物理备份速度快于逻辑备份,因为它只做文件拷贝,没有转换过程。
- 输出内容更紧凑,通常是二进制的压缩格式
- 由于速度和压缩,对于大型繁忙的数据库很重要,mysql的企业级备份产品更倾向使用物理备份。
- 备份和恢复的粒度从整个数据目录到单个数据文件。是否提供表级别的粒度取决于存储引擎。
例如InnoDB表可以位于单独的文件中,也可以与其他InnoDB表共享文件存储。每个MyISAM表唯一对应与一组文件。 - 除数据库外,备份还可以包含相关的log文件,配置文件。
- 内存表由于不存储在磁盘上,所以很难通过这种方式备份。(mysql企业级备份产品可以在备份时取出数据)
- 备份仅可以移植到有相同或类似硬件特性的机器上。
- 备份操作可在mysql server不运行时,如果server在运行中,有必要对数据加入合适的锁,以便于在备份期间数据内容不会发生变化。
- 物理备份工具包括用于InnoDB或任何其他表的MySQL Enterprise Backup的mysqlbackup,或用于MyISAM表的文件系统级命令(如cp,scp,tar,rsync)。
- 物理备份恢复的工具包括:MySQL Enterprise Backup恢复工具,ndb_restore 恢复 NDB tables。 在操作系统级别拷贝文件,可以通过将其移动到原始的路径位置下,来实现恢复。
逻辑备份特点:
- 通过查询mysql server获取数据库结构和内容信息。
- 速度较慢,因为需要查询数据库,并转换。
- 输出的结果较大,通常是文本格式文件。
- 备份恢复的粒度可以是数据库级别,表级别,不受存储引擎影响。
- 不包括相关的log文件,配置文件。
- 备份结果以逻辑格式存储,与机器无关,可移植性较高。
- 可在mysql server运行时,进行备份。server不需要停止。
- 逻辑备份的工具包括mysqldump程序 和 SELECT ... INTO OUTFILE语句。这些可以在所有存储引擎执行,包括内存。
- 恢复逻辑备份的数据,可以使用mysql client。如果是多个文件,可以使用LOAD DATA语句或mysqlimport client。
在线 vs 离线
在线备份需要加入适当的锁,以便不会发生会损害备份完整性的数据修改。
离线备份通常用于复制从属服务器,可以脱机不降低系统可用性。
本地 vs 远程
本地是在mysql server的相同主机中进行。 而远程是在另外的主机执行。
全量 vs 增量
以上介绍方法都可以进行全量备份。
增量备份需要开启mysql server的binary log,bin log是server使用,用于记录数据变化的文件。
增量恢复,即时间点恢复基于二进制日志,通常在备份文件完全恢复之后,将备份文件还原到备份时的状态。 然后,在二进制日志文件中写入的数据更改将作为增量恢复应用于重做数据修改,并使服务器达到所需的时间点。
备份方法
Making a Hot Backup with MySQL Enterprise Backup
Making Backups with mysqldump
Making Backups by Copying Table Files
Making Delimited-Text File Backups
Making Incremental Backups by Enabling the Binary Log
Making Backups Using Replication Slaves
Recovering Corrupt Tables
Making Backups Using a File System Snapshot
参考文档
https://dev.mysql.com/doc/refman/8.0/en/backup-types.html
https://dev.mysql.com/doc/refman/8.0/en/backup-methods.html