阅读 885

DBA防跑路,是不是备份最重要? | 数据库系列

前几天又看到新闻,某厂用户数据又丢了,据说是实习生的锅。

数据安全性,是 DBA 最重要的职责,没有之一,今天系统性的说一下 MySQL 的备份。

_画外音:_估计不是 DBA 和 OP 对这个问题也不太关注,权当了解知识吧。

MySQL 的备份分两大类

(1)物理备份 (Physical Backup)

(2)逻辑备份 (Logical Backup)

什么是物理备份?

以拷贝文件的方式备份数据库内容,典型的,可以备份数据库的:

  • 数据文件 / 目录

  • 配置文件 / 目录

  • 日志文件 / 目录

什么是逻辑备份?

备份数据库的逻辑结构,典型的玩法是,把数据库备份为一系列 SQL 语句:

  • create database;

  • create table;

  • create index;

  • insert …;

_画外音:_一些 SQL 包含元信息,一些 SQL 包含数据内容。

物理备份有什么特点?

一般来说,物理备份:

(1)速度比较快,它只是单纯的文件拷贝备份;

(2)大小比较小,文件往往是经过压缩的;

(3)往往要求数据库实例处于离线状态 (offline),不允许数据库文件变更,以保证数据一致性;

_画外音:_即使企业版支持所谓的在线物理备份,也会加很大的锁,备份期间数据库可用性较差。

(4)备份的可移植性往往比较差,数据恢复时,必须是几乎相同的硬件体系结构;

_画外音:_windows 下物理备份,不能直接应用恢复到 Linux 下的 MySQL。

说到在线备份一致性,不同存储引擎,对于锁颗粒度要求也是不一样的:

(1)InnoDB 引擎,允许一个表一个文件,在线物理备份时可以一个一个表(文件)加锁备份;

(2)MyISAM 引擎,一个表对应一组文件,在线物理备份时必须锁一组文件;

(3)MEMORY 引擎,额,内容不存在磁盘上;

_画外音:_强烈建议,还是别搞什么在线物理备份了。

具体怎么实施物理备份呢?

既然是备份文件 / 目录,常见的文件工具就能搞定,例如:cp,scp,tar,rsync 等。

_画外音:__还有一些 MySQL 工具,要么是企业版的,要么不支持所有存储引擎(例如:_只支持 MyISAM 引擎的 mysqlhotcopy)。

逻辑备份有什么特点?

一般来说,逻辑备份:

(1)通过访问 MySQL 服务,来获得数据库的结构信息与数据内容;

(2)速度比较慢,除了要将数据库信息转化为逻辑格式 (logical format),很可能还要传回客户端备份程序;

(3)备份粒度更细,全库,单库,全表,单表都可以备份,所有存储引擎都能备份(包含 MEMORY 引擎);

(4)往往不能备份数据库日志,数据库配置文件;

(5)因为备份的是逻辑格式,可移植性非常好;

_画外音:_windows 下备份,也能快速应用到 Linux。

(6)备份时,数据库实例必须处于在线状态 (online);

_画外音:_在线备份和离线备份,更多被称为 “热备(hot)” 和“冷备(cold)”。

具体怎么实施逻辑备份呢?

常见的玩法是:

(1)mysqldump

(2)select … into outfile

_画外音:_再次强调,MEMORY 引擎也可以逻辑备份。

本地 (local) 备份和远程 (remote) 备份分别指什么?

本地备份,是指备份动作实施在 MySQL 服务器所在的主机上。

远程备份,是指备份动作实施在另一台主机上。

_画外音:_本地备份往往存在 “备份与数据库服务器竞争本地资源” 的问题,远程备份往往有较大的网络开销。

mysqldump:即可以在本地,又可以在远程实施。

select … into outfile:同上。

mysqlhotcopy:只能本地实施。

其他物理备份:基本上都是本地实施,因为 MySQL 服务器要处理离线状态。

快照备份 (snapshot backup)?

MySQL 自身不支持。

全量备份 (full backup) 与增量备份 (incremental backup)?

全量备份,是指备份截止到某一个时间点的全部数据。全量备份方法很多,上文所说的各种方案,全部是全量备份方案。

增量备份,是指从某一个时间点开始,利用 binlog 记录数据变化的方法,来实施的备份。

作为 DBA 和 OP,数据安全性是第一要务,全量备份和增量备份都是必须的!
数据被删除了,应该如何 “低成本、高安全性、且能够快速恢复”,防止跑路呢?

几个要点:
(1)全量备份 + 增量备份 + 定期演练;
(2)1 小时延时从库;
(3)双份 1 小时延时从库;
这不是本文的重点,细节不展开,具体见《db 如何快速回滚 + 恢复,DBA 的神技能》。
_画外音:_或许,这篇文章大家更感兴趣。

看完本文,可能大部分人觉得没什么用(物理备份,逻辑备份,在线备份,离线备份,热备,冷备,本地备份,远程备份,快照备份,全量备份,增量备份,人都晕了)。
毕竟,更多人使用 MySQL 而无需运维 MySQL,但系统性了解下 MySQL 备份知识,没有坏处。

_画外音:_本文基于 MySQL5.6 版本。

调研

删过数据库的同学,扣个 1。

文章分类
后端
文章标签