备份:存储的数据副本;
原始数据:持续改变;
恢复:把副本应用到线上系统;
仅能恢复至备份操作时刻的数据状态;
时间点恢复:
binary logs; 二进制日志
为什么备份?
灾难恢复:硬件故障(冗余)、软件故障(bug)、自然灾害、黑客攻击、误操作、...都会造成数据丢失的所要备份
备份时应该注意事项:
能容忍最多丢失多少数据;决定以何种方式来备份
恢复数据需要在多长时间内完成;
需要恢复哪些数据;
做恢复演练:
测试备份的可用性;
增强恢复操作效率;
备份类型:
备份的数据集的范围:
完全备份和部分备份
完全备份:整个数据集;
部分备份:数据集的一部分,比如部分表;
完全备份:全量
增量备份:仅备份自上一次完全备份或 增量备份以来变量的那部数据;
差异备份:仅备份自上一次完全备份以来变量的那部数据;
物理备份、逻辑备份:
物理备份:复制数据文件进行的备份;cp
逻辑备份:从数据库导出数据另存在一个或多个文件中;mysqldump
根据数据服务是否在线
热备:读写操作均可进行的状态下所做的备份;容易恢复时的时间点不一致
Innodb支持热备
温备:可读但不可写状态下进行的备份;
冷备:读写操作均不可进行的状态下所做的备份;
备份需要考虑因素:
锁定资源多长时间?
备份过程的时长?
备份时的服务器负载?
恢复过程的时长?
备份策略:
全量+差异 + binlogs
全量+增量 + binlogs
备份什么?
数据(数据和二进制日志最好备份在不同的地方)
二进制日志、InnoDB的事务日志;
代码(存储过程、存储函数、触发器、事件调度器)
服务器的配置文件
备份工具:
mysqldump:mysql服务自带的备份工具;逻辑备份工具;生成一个sql脚本,只做全量备份
cp/tar 不能做热备 物理备份
lvm2:快照(请求一个全局锁),之后立即释放锁,达到几乎热备的效果;物理备份;
注意:不能仅备份数据文件;要同时备份事务日志;
前提:要求数据文件和事务日志位于同一个逻辑卷;
xtrabackup:
由Percona提供,开源工具,支持对InnoDB做热备,物理备份工具;
完全备份、部分备份;
完全备份、增量备份;
完全备份、差异备份;
mysqlhotcopy 冷备工具
select:
备份:SELECT cluase INTO OUTFILE 'FILENAME'; 对表中部分
数据的导出导入用
恢复:CREATE TABLE
导入:LOAD DATA
mysqldump:
mysqldump [OPTIONS] --all-databases [OPTIONS] 全部备份
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] 可以跟多个库 库级别备份
mysqldump [OPTIONS] database [tables] 表级别
MyISAM存储引擎:支持温备,备份时要锁定表;
-x, --lock-all-tables:锁定所有库的所有表,读锁;
-l, --lock-tables:锁定指定库所有表;
InnoDB存储引擎:支持温备和热备;(适用于myisam的选项也适用于Innodb)
其他选项
-R ,--routines : 存储过程和存储函数
--triggers
-E , --events 事物
--master-data[=#] 记录备份开始一刻 二进制日志文件位置处于那个文件的
--fiush-logs: 锁定表完成后,即进行日志刷新操作 让日志滚动下
如:
mysqldump -uroot -pmageedu --single-transaction -R -E --triggers --master-data=2 --fiush-logs --databases hellodb > /root/hellodb-ful;back-$(date +%F).sql
>SHOW MASTER LOGS; 看log文件
恢复
将二进制日志文件转为sql语句
mysqlbinlog master-log.00005 > /tmp/binlog.sql
进入mysql将日志文件记录功能关闭:
> SET @@session.sql_log_bin=off
> \. /tmp/alldb-fullback-2017-07-11.sql 全量恢复
>\. /tmp/binlog.sql 读取二进制文件
每次做完备份后做一次全量备份