为什么备份:
灾难恢复: 硬件故障 (冗余), 软件故障 (bug), 自然灾害,**, 误操作,...
测试: 测试时, 为了模仿真实环境中用户访问情况, 通常需要用真实数据去做测试.
备份恢复的原则:
策略正确: 平时要设计好备份还原所涉及到的人员, 确保能做正确的事.
执行不出问题: 平时做演练, 以确保出现问题时, 能做正确的事情.
出问题时做正确的事情.
异地灾备
必要性: 防止同一台机器, 同一个网络环境中, 同一个物理机房不可用导致服务不可用.
备份项: 配置文件, 周边配置, 周期性计划任务.
备份注意事项:
能容忍最多丢失多少数据: 决定了使用的备份手段和工具
恢复数据需要在多长时间内完成
电商站点若发生故障, 数据恢复时, 一小时损失可能数以亿计数据. 若用二进制文件恢复, 可能恢复时长极长, 且可能因业务量大, 单条语句写入二进制文件顺序不同导致数据与真实数据不一致.
需要恢复哪些数据
线上生产数据集, 线上认证, 配置等
数据备份后需要经常测试备份的可用性, 另一方面也可以增强恢复操作的效率, 在真正需要恢复数据时做到有条不紊.
数据备份的类型
根据备份的数据集的范围可分为完全备份和部分备份
完全备份: 备份整个数据集
部分备份: 备份整个数据集中的一部分, 如部分表.
全量备份, 增量备份, 差异备份
全量备份: 备份全部数据
增量备份: 备份自上一次完全备份或增量备份以来变化的那部分数据
差异备份: 仅备份自上一次完全备份以来变化的那部数据
根据备份方式分为物理备份和逻辑备份
物理备份: 直接复制数据文件
逻辑备份: 从数据库导出数据另存在一个或多个文件中
根据数据服务是否在线可分为热备, 温备, 冷备
热备: 读写操作均可进行的状态下所做的备份
温备: 可读但不可写状态下进行的备份;
冷备: 读写操作均不可进行的状态下所做的备份; 最可靠, 但却是最不可行的. 可借助主从复制实现.
备份时需要考虑到的因素:
要不要锁定资源, 锁定资源多长时间?
备份过程的时长?
备份时的服务器负载?
恢复过程的时长?
备份工具
mysqldump
MySQL 服务自带的备份工具, 逻辑备份工具.
可以做到完全, 部分备份
对 InnoDB 支持热备, 对 MyISAM 存储引擎支持温备.
cp/tar
lvm2: 快照 (请求一个全局锁), 之后立即释放锁, 达到几乎热备的效果; 物理备份;
注意: 不能仅备份数据文件; 要同时备份事务日志;
前提: 要求数据文件和事务日志位于同一个逻辑卷;
Innobackup/xtrabackup
由 Percona 提供, 开源工具, 支持对 InnoDB 做热备, 物理备份工具;
支持完全备份, 部分备份; 完全备份, 增量备份; 完全备份, 差异备份;
mysqlhotcopy: 几乎冷备
select: 据说相当 LOW
备份: SELECT cluase INTO OUTFILE 'FILENAME';
恢复: CREATE TABLE
导入: LOAD DATA
mysqldump 用法
特点: 支持逻辑备份, 完全备份, 部分备份;
逻辑备份: 数据服务要正常运行, 监听在某个端口, mysqldump 可以通过端口访问 MySQL.
通过 SELECT 语句查询后导出至一个文件, 恢复时通过 INSERT 语句把所有查询结果插入至数据库.
有可能会丢失精度
mysqldump 用法:
- SYNOPSIS:
- mysqldump [OPTIONS] database [tables]
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] 备份指定表
mysqldump [OPTIONS] --all-databases [OPTIONS] 备份所有表
OPTIONS
--all-databases 备份所有库
--databases db1,db2.... 备份指定一到多个数据库:
db 备份单个数据库中的所有目标对象 (不会自动创建库, 只是备份库中的表, 代码, 存储过程, 存储函数, 触发器以及事件调度器等)
db table1,table2... 备份指定的表
MyISAM 存储引擎: 最多支持温备, 备份时要锁定所有要备份表 (若是备份哪个表锁定哪个表, 还原时各表时间点不一致)
-x, --lock-all-tables 锁定所有库的所有表, 读锁
-l, --lock-tables 锁定指定库所有表
InnoDB 存储引擎: 支持温备和热备;
--single-transaction 创建一个事务, 基于此快照执行备份; 必须加上这个选项才支持热备
在 REPEATABLE-READ 隔离级别, mysqldump 连进数据库时看到的视图是一致的, 都是启动事务那一刻的状态. 在这种情况下, 启动一个事务, 备份的所有数据都是这个时间点的.
其它选项:
-R, --routines 备份指定库的存储过程和存储函数;
--triggers 备份指定库的触发器
-E, --events 备份事件调度器
--master-data[=#] 在备份的目标文件中记录一个 CHANGE MASTER TO 语句, 记录备份的那一刻处于哪个二进制文件的哪个位置.
mysqldump 导出数据时, 当这个参数的值为 1 的时候, mysqldump 出来的文件就会包括 CHANGE MASTER TO 这个语句, CHANGE MASTER TO 后面紧接着就是 file 和 position 的记录, 在 slave 上导入数据时就会执行这个语句, salve 就会根据指定这个文件位置从 master 端复制 binlog. 默认情况下这个值是 1.
记录下来一个注释的 CHANGE MASTER TO 语句, 仅为我们参考使用, 不打算用它来设定从服务器复制线程的启动通常就设置为 2.
--flush-logs 锁定表完成后, 即进行日志刷新操作;
来源: http://www.bubuko.com/infodetail-3122266.html