1、什么是备份和恢复?
备份:存储的数据副本;
原始数据:持续改变;
恢复:把副本应用到线上系统;
仅能恢复至备份操作时刻的数据状态;
时间点恢复:
binary logs;
为什么备份?
灾难恢复:硬件故障(冗余)、软件故障(bug)、自然灾害、黑客攻击、误操作、...
测试;
备份时应该注意事项:
能容忍最多丢失多少数据;
恢复数据需要在多长时间内完成;
需要恢复哪些数据;
做恢复演练:
测试备份的可用性;
增强恢复操作效率;
...
备份类型:
备份的数据集的范围:
完全备份和部分备份
完全备份:整个数据集;
部分备份:数据集的一部分,比如部分表;
全量备份、增量备份、差异备份:
完全备份:备份整个数据集;
增量备份:仅备份自上一次完全备份或增量备份以来变量的那部数据;
差异备份:仅备份自上一次完全备份以来变量的那部数据;
物理备份、逻辑备份:
物理备份:复制数据文件进行的备份;
逻辑备份:从数据库导出数据另存在一个或多个文件中;
根据数据服务是否在线:
热备:读写操作均可进行的状态下所做的备份;
温备:可读但不可写状态下进行的备份;
冷备:读写操作均不可进行的状态下所做的备份;
备份所需要考虑的问题?
锁定资源多长时间?
备份过程的时长?
备份时的服务器负载?
恢复过程的时长?
备份策略:
全量+差异 + binlogs
全量+增量 + binlogs
备份手段:
物理、逻辑
备份什么?
数据
二进制日志、InnoDB的事务日志;
代码(存储过程、存储函数、触发器、事件调度器)
服务器的配置文件
备份工具:
mysqldump:mysql服务自带的备份工具,客户端工具;逻辑备份工具;
clipboard1.png
https://www.percona.com/
完全、部分备份
InnoDB:热备;
MyISAM:温备;
eg:
# mysqldump -uroot -h172.18.0.67 -pcentos --single-transaction -R --triggers -E --database hidb --master-data=2 --flush-logs > /root/hidb-$(data +%F-%H-%M-%S).sql
cp/tar
lvm2:快照(请求一个全局锁),之后立即释放锁,达到几乎热备的效果;物理备份;
注意:不能仅备份数据文件;要同时备份事务日志;
前提:要求数据文件和事务日志位于同一个逻辑卷;
xtrabackup:
由Percona组织提供,开源工具,支持对InnoDB做热备,物理备份工具
完全备份、部分备份;
完全备份、增量备份;
完全备份、差异备份;
单表导入导出
mysqlhotcopy
select:
备份:SELECT cluase INTO OUTFILE 'FILENAME';
恢复:CREATE TABLE
导入:LOAD DATA
InnoBase:Innodb --> XtraDB, Innobackup --> Xtrabackup
备份策略:
xtrabackup:
全量+差异+binlog
全量+增量+binlog
mysqldump:
全量+binlog
//binlog用于时间点恢复
2、mysqldump:
逻辑备份工具:基于mysql客户端协议
数据库完全备份、表部分备份;
mysqldump对InnoDB支持:热备或温备;
对MyISAM支持:温备;
二次封装工具:
mydumper
phpMyAdmin
备份机制:
库:CREATE DATABASE
表:CREATE TABLE
数据:INSER TINTO
Usage:
mysqldump [OPTIONS] database [tables] # 备份单库,可以只备份其中的一部分表(部分备份),要手动创建数据库;
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] # 备份多库,不用创建数据库;
OR mysqldump [OPTIONS] --all-databases [OPTIONS] # 备份所有库;
MyISAM存储引擎:支持温备,备份时要锁定表;
-x, --lock-all-tables:锁定所有库的所有表,读锁,相当于温备;
-l, --lock-tables:锁定指定库所有表;
InnoDB存储引擎:支持温备和热备;
--single-transaction:创建一个事务,基于此快照执行备份;
其它选项:
-R, --routines:备份指定库的存储过程和存储函数;
--triggers:备份指定库的触发器;
-E, --events:
--master-data[=#]
1:记录为CHANGE MASTER TO语句,此语句不被注释;
2:记录为CHANGE MASTER TO语句,此语句被注释;
--flush-logs:锁定表完成后,即进行日志刷新操作;
完全备份:
clipboard2.png
恢复:#mysql < hidb-2017.sql
#mysql < binlog.sql
3、基于lvm2的备份:
前提:要求数据文件和事务日志位于同一个逻辑卷;
(1) 请求锁定所有表;
mysql> FLUSH TABLES WITH READ LOCK;
(2) 记录二进制文件事件位置;
mysql> FLUSH LOGS;
mysql> SHOW MASTER STATUS;
mysql -e 'SHOW MASTER STATUS;' >> /PATH/TO/SOME_POS_FILE
(3) 创建快照卷
lvcreate -L # -s -p r - SNAM-NAME /dev/VG-NAME/LV-NAME
(4) 释放锁
mysql> UNLOCK TABLES
(5) 挂载快照卷,并执行备份,备份完成后删除快照卷;
(6) 周期性备份二进制日志;
Percona:
InnoDB --> XtraDB (mariadb)
Innobackup --> Xtrabackup
Xtrabackup:
MyISAM:温备,不支持增量备份;
InnoDB:热备,增量;
物理备份,速率快、可靠;备份完成后自动校验备份结果集是否可用;还原速度快;
Usage: [innobackupex [--defaults-file=#] --backup | innobackupex [--defaults-file=#] --prepare] [OPTIONS]
The innobackupex tool is a Perl script that acts as a wrapper for the xtrabackup C program.
备份 --> 应用日志 --> 还原
应用日志:--apply-log
还原:--copy-back
完全备份:
完全+binlog(总结):
备份:innobackupex --user --password= --host= /PATH/TO/BACKUP_DIR
准备:innobackupex --apply-log /PATH/TO/BACKUP_DIR
恢复:innobackupex --copy-back
innodb_log_file_size可能要重新设定;
总结:完全+增量+binlog
备份:完全+增量+增量+...
完全+差异
准备:
innobackupex --apply-log --redo-only BASEDIR
innobackupex --apply-log --redo-only BASEDIR --incremental-dir=INCREMENTAL-DIR
恢复:
innobackupex --copy-back BASEDIR
备份单库:
--databases
总结:
mysqldump+binlog
lvm2+cp/tar+binlog
xtrabackup(innodb)+binlog
循环复制;
从服务器的版本号高于主服务器的版本号;
MariaDB [mydb]> SET GLOBAL rpl_semi_sync_master_enabled=ON;
`
网友评论