开头语:
在开始对Mysqldump跟Xtrabakcup的介绍与使用方法到之前,说下数据对公司的重要性:
1 | 对于公司来讲,数据库本身可能并不重要,重要的是数据库中存储的数据。 |
为什么备份?
1 | 实现灾难恢复:硬件故障(冗余)、软件故障(BUG)、自然灾害、黑客攻击、误操作、... |
备份时需要注意的事项
- 注意事项
1 | 能容忍最多丢失多少数据; |
- 备份需要考虑的因素
1 | 锁定资源多长时间? |
- 备份什么?
1 | 数据 |
注意:二进制日志、InnoDB事务日志 与数据要分别存放在不同的硬盘中
- 备份策略
1 | 全量+差异 + binlogs |
备份类型
备份的数据的范围
1 | 完全备份和部分备份 |
全量备份、增量备份、差异备份
- 全量备份
1 | 备份整个数据库的所有数据 |
- 增量备份
1 | 仅备份自上一次完全备份或 增量备份以来变量的那部数据 |
- 差异备份
1 | 仅备份自上一次完全备份以来变量的那部数据;(浪费空间,还原效果比增量快) |
- 通过备份恢复数据库
1 | 完全+增量: 完全+每一次增量 + 二进制日志(根据时间点恢复) |
物理备份、逻辑备份
- 物理备份
1 | 直接复制数据文件进行的备份 |
- 逻辑备份(mysqldump)
1 | 通过mysql,从数据库导出数据另存在一个或多个文件中 |
热备、温备、冷备
- 热备
1 | 读写操作均可进行的状态下所做的备份 --> 导致备份的数据时间点可能不一致,恢复后的数据时间点不一致 --> 导致MySQL拒绝恢复 |
- 温备
1 | 可读但不可写状态下进行的备份 |
- 冷备
1 | 读写操作均不可进行的状态下所做的备份 |
mysqldump备份工具使用详解
备份策略
:
1 | 全量备份 + binlogs |
命令详解
- 语法格式:
1 | mysqldump [OPTIONS] database [tables] |
实例详解:
1 | # 表级别备份;不会自动创建数据库 |
- 选项详解
1 | -x, --lock-all-tables 锁定'所有库的所有表',读锁; |
全量备份一次整个数据库
- 开启二进制日志
1 | $ vim /etc/my.cnf.d/server.conf |
- 开始备份数据库
1 | # 使用mysqldump备份整个mysql数据库 |
使用备份恢复数据库
- 重启数据库
1 | $ systemctl stop mariadb.service |
- 登陆数据库进行恢复
1 | $ mysql |
- 使用二进制日志恢复未备份的信息
1 | $ cd /tmp |
- 开启二进制日志记录
1 | > SET @@session.sql_log_bin=ON; |
至此,一次删库到恢复就完成了,不过要注意的是,在恢复完成后,如果业务不是很着急需要上线,这时还要做一次全量备份。如果业务必须立即上线,我们也可以在当天晚上进行备份数据库。
使用备份脚本备份数据库
1 | $ vim mysql-backup.sh |
xtrabackupex备份工具使用详解
安装xtrabackupex
官方下载地址:XtraBackup
安装XtraBackup
1 | ntpdate 172.16.0.1 |
进行一次全库备份
1 | $ vim /etc/my.cnf.d/server.conf |
通过备份恢复数据库
- 恢复之前的准备
1 | # 默认数据库损坏,被删库 |
- 执行Preparing操作
1 | $ innobackupex --apply-log /data/backup/2017-07-13_20-05-42/ |
- 恢复数据库
1 | $ innobackupex --copy-back 2017-07-13_20-05-42/ |
- 启动数据库
1 | $ systemctl start mariadb.service |
- 备份后生成的一些文件
增量备份 数据库(全库)
增量备份:仅备份自上一次完全备份
或增量备份
以来变量的那些数据
- 先做一次全量备份
1 | $ innobackupex --user root /data/backup |
- 连接到数据库中,删除/增加一些数据,为一会做增量备份打下基础
1 | $ mysql |
- 第一次增量备份
1 | $ innobackupex --incremental -u root /data/backup --incremental-basedir=/data/backup/2017-07-13_20-38-20/ |
- 再次连接到数据库,删除修改一些数据,再做
第二次增量备份
1 | $ mysql |
第二次
增量备份
1 | # 这里--incremental-basedir 为上一次增量备份的目录,而非全量备份的目录 |
- 通过两次增量备份 + 全量备份 进行恢复数据库的操作
1 | # 删库 |