概述
根据备份方法不同:
- 热备:数据库运行过程中直接备份,对正在运行的数据库操作没有任何的影响。
- 冷备:备份操作是在数据库停止的情况下,这种备份最为简单,只需要复制相关的数据库物理文件即可。
- 温备:数据库运行过程中直接备份,但是会对当前数据库操作有所影响。
根据备份后文件的内容不同:
- 逻辑备份:是指备份出的文件内容是可读的,一般内容是 SQL 语句,如 mysqldump。
- 物理备份:是指复制数据库的物理文件,如 xtrabackup。
根据备份数据库内容不同:
- 全量备份:是指对数据库进行一个完整的备份。
- 增量备份:是指在上次完全备份的基础上,对于更改的数据进行备份。
- 日志备份:是指对二进制日志的备份,通过它可以完成 point-in-time 的恢复工作。
自建 MySQL
备份
物理备份
逻辑备份
恢复
阿里云 RDS
备份
全量备份(数据)
增量备份(日志)
恢复
单库单表恢复
整实例恢复
恢复到原实例
恢复到新实例
恢复到本地自建数据库
备份
物理备份
备份内容:共享表空间文件 .frm
、独立表空间文件 .ibd
、重做日志文件、配置文件 my.cnf
。
优缺点:
- 优点:备份恢复简单、速度快。
- 缺点:备份的文件通常比逻辑文件大很多,且需要停机,不适于用于生产环境。
逻辑备份
mysqldump
语法
1 | Usage: mysqldump [OPTIONS] database [tables] > [backupfile.sql] |
参数
–single-transaction:在备份之前,先执行 start transaction 命令,以此来获得备份的一致性,当前该参数只对 InnoDB 存储引擎有效。当启用此参数时,确保没有任何 DDL 语句执行,因为一致性读并不能隔离 DDL 操作。
–lock-tables (-l):在备份中,依次锁住每个库下所有表,一般用于 MyISAM 存储引擎,当备份时只对数据库进行读取操作,不过备份依然可以保证一致性。对于 InnoDB 存储引擎,不需要使用该参数。
–lock-all-tables (-x):在备份中,对所有库的所有表上锁。
–no-data (-d):不备份数据。
–extended-insert (-e):使用全新多行 insert 语法,默认开启。
–master-data [=value]:通过该参数产生的备份转存文件主要用来建立一个 replication。
1:转存文件中记录 change master 语句。
2:转存文件中 change master 语句被注释。
–flush-logs:开始备份之前刷新日志。
–events (-E):备份事件。
–routines (-R):备份存储过程和函数。
–triggers:备份触发器,该选项默认启用。
–where=’where_condition’ (-w ‘where_condition’):导出给定条件的数据。
实践
1 | # 备份所有库 |
注意:默认是会备份视图。
恢复
二进制日志备份与恢复
作用:二进制日志非常关键,用户可以通过它完成 point-in-time 的恢复工作。对于 InnoDB 存储引擎,推荐的二进制日志的服务器配置应该是:
1 | [mysqld] |
备份:在备份二进制日志之前,可以通过 Flush Logs 命令生成一个新的二进制日志文件,然后后备份之前的二进制日志。
恢复:二进制日志的恢复主要通过工具 mysqlbinlog 实现。例如:
1 | // 恢复单个文件 |
热备
快照备份
MySQL 数据库本身并不支持快照功能,因此快照备份是指通过文件系统支持的快照功能对数据库进行备份。备份的前提是将所有数据库文件放在同一个文件分区中,然后对该分区进行快照操作。支持快照功能的文件系统和设备包括 GUN/Linux 的逻辑管理器 LVM。
LVM 是 Linux 系统下对磁盘分区进行管理的一种机制,LVM 在硬盘和分区之上建立一个逻辑层,来提高磁盘分区管理的灵活性。LVM 使用了写时复制(Copy-on-write)技术来创建快照,当创建一个快照时,仅复制原始卷中数据的元数据(meta data),并不会有数据的物理操作,因此快照的创建过程非常快。
使用 LVM 快照备份 InnoDB 存储引擎表非常简单,只要把与 InnoDB 存储引擎相关的文件如共享表空间、独立表空间、重做日志文件等放在同一个逻辑卷中,然后对这个逻辑卷做快照备份即可。在对 InnoDB 存储引擎文件做快照时,数据库无须关闭,即可以进行在线备份。
全量备份
增量备份
备份策略
参数 | 说明 |
---|---|
备份周期 | 建议一周至少需要备份两次(例如:周一、三、五 / 二、四、六) |
备份时间 | 建议设置为业务低峰期时间 |
保留时间 | 建议保留 30 天,超过保留天数的备份会被自动删除 |
日志备份 | 建议打开,关闭日志备份会导致所有日志被清除,并且无法使用按时间点恢复数据的功能 |
日志备份保留 | 日志备份文件保留的天数,默认为 7 天 |
单库单表 | 开通后会修改备份格式以支持该功能,默认为开启,无法关闭 |
实例释放后备份文件是否保留 | 为防止忘记续费、误操作等情况导致实例数据丢失,建议选择保留最后一个或全部保留,保留不收取费用,可以在已删除实例备份页面下载备份文件,并恢复到本地数据库 |
恢复
恢复方案概览
RDS 提供了多种数据恢复方案,可以将数据恢复至新实例、原实例或自建数据库。
适用场景 | 方案 |
---|---|
MySQL 单库单表恢复 | |
MySQL 实例恢复 | |
MySQL 备份文件恢复到自建数据库 |
单库单表恢复
RDS MySQL 支持单库和单表的数据恢复,可以通过备份指定恢复误删的数据库或表,快速恢复 MySQL 的数据。
注意事项:
- 恢复到原实例过程中会进行主备切换,RDS 服务可能会出现闪断,请确保您的应用有自动重连机制;恢复到新实例不会进行主备切换。
- 超出免费备份空间额度的部分将会产生额外费用,请合理设计备份周期,以满足业务需求的同时,兼顾备份空间的合理利用。
- 如果无法确定所有涉及的表,则需要进行实例级别的恢复。
- 每次最多选择 50 个库或者表。
- 实例内的表低于 50000 张才可以使用单库单表恢复功能,超过 50000 张表时无法使用。
实例恢复
总结
任何时候都需要做好远程异地备份,也就是容灾的防范。