1.1 备份的缘由
衡量备份恢复有两个重要的指标:
恢复点目标(RPO)和恢复时间目标(RTO)
,
前者重点关注能恢复到什么程度,然后者则重点关注恢复须要多长时间。
1.1.1 备份的目录
作灾难恢复:对损坏的数据进行恢复和还原
需求改变:因需求改变而须要把数据还原到改变之前
测试:测试新功能是否可用
1.1.2 备份中须要考虑的问题
能够容忍丢失多长时间的数据;
恢复数据要在多长时间内完;
恢复的时候是否须要持续提供服务;
恢复的对象,是整个库,多个表,仍是单个库,单个表。
1.1.3 备份的类型
热备份:
这些动态备份在读取或修改数据的过程当中进行,不多中断或者不中断传输或处理数据的功能。
使用热备份时,系统仍可供读取和修改数据的操做访问,
所谓热备份是在不影响MySQL对外服务的状况下,进行备份。。
冷备份:
备份期间用户不能访问数据时进行,所以没法
读取或修改数据
。。
温备份:
备份期间可读取数据,可是,其不足之处在于没法在进行备份时修改
,这可能使这种类型的备份不适用于某些应用程序。在备份过程当中没法修改数据可能产生性能问题。
1.2 备份的方式
1.2.1 经常使用的备份方式
物理备份
(数据文件的二进制副本)
全量备份概念
全量数据就是数据库中全部的数据
(或某一个库的所有数据);
全量备份就是把数据库中全部的数据进行备份。
mysqldump会取得一个时刻的一致性数据.
增量备份(刷新二进制日志)
增量数据就是指上一次全量备份数据以后到下一次全备以前数据库所更新的数据
对于mysqldump,binlog就是增量数据.
彻底备份:
优势:可以基于上一次的彻底备份快速恢复数据,恢复窗口小。
缺点:所占用的存储空间大,每次备份耗时长,备份窗口大。
累积增量式备份:--差别备份
优势:相对彻底备份来讲每次备份能够节约一个彻底备份的存储空间,备份窗口较小,恢复窗口较小。
缺点:恢复时必须依赖上一次彻底备份和本次的累积增量式备份才能完整恢复数据,恢复时间较差别增量式备份较短。
差别增量式备份:----增量备份
优势:可以最大限度地节省存储空间,备份窗口小。
缺点:数据恢复时必须依赖上一次彻底备份和每一次的差别增量式备份才能对数据进行完整恢复,恢复时数据重构较慢,恢复时间较长。
1.2.2 备份工具的介绍
一、mysqldump: mysql原生自带很好用的逻辑备份工具
二、mysqlbinlog: 实现binlog备份的原生态命令
三、xtrabackup: precona公司开发的性能很高的物理备份工具
1.3 mysqldump备份介绍
1.3.1 经常使用的备份参数
参数
|
参数说明
|
-A
|
备份全库,有建库建表语句
|
-B
|
备某一个数据库下的全部表,会有建库语句
[root@db01 ~]# mysqldump -uroot -p123 -B db1 > /backup/db1.sql
|
-R, --routines
|
备份存储过程和函数数据
|
--triggers
|
备份触发器数据
|
--master-data={1|2}
|
告诉你备份后时刻的
binlog
位置
若是等于
1
,则将其打印为
CHANGE MASTER
命令
;
若是等于
2
,那么该命令将以注释符号为前缀。0没有CHANGE MASTER参数
|
--single-transaction
|
对
innodb
引擎进行热备,也就是
快照备份
|
-F, --flush-logs
|
flush logs在备份时自动刷新binlog且每一个库会生成新一个binlog文件(不怎么经常使用)
|
-x, --lock-all-tables
|
锁定全部数据库的全部表。这是经过在整个转储期间采用全局读锁来实现的。
|
-l, --lock-tables
|
锁定全部表以供读取
|
-d
|
仅表结构
|
-t
|
仅数据
|
--compact
|
减小无用数据输出
(
调试
)
|
-E 在备份时,同时备份EVENT,若是没有会自动忽略
一个完整的备份语句:
innodb
引擎的备份命令以下:
mysqldump -uroot -p -A -R --triggers --master-data=
2
--single-transaction |
gzip
>/opt/all_$(
date
+%F).sql.gz
适合多引擎混合(例如:
myisam
与
innodb
混合)的备份命令以下:
在关于GTID模式的备份:
在主从架构的数据库,一般相关导入操做只须要在master(主库)端进行便可,在mysqldump不加此参数时sql文件中会出现以下两名,
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;
禁掉了session级别的sql_log_bin,因此在目标端导入sql时,并不会产生对应的bin log日志,
因此该表及其数据就不会被同步到slave端,构建主从gtid时不要加此参数。
mysqldump -uroot -p -R -e --triggers --master-data=2 --single-transaction --set-gtid-purged=OFF world country >/tmp/countryyes.sql
|
1.3.2 -A 参数
备份全库,备份语句
mysqldump
-
uroot
-
p123
-
A
>
/
backup
/
full
.sql
1.3.3 -B 参数
备某一个数据库下的全部表,且存在建库语句
增长建库(create)及“use库”的语句,能够直接接多个库名,
同时备份多个库* -B 库1 库2
mysqldump
-
uroot
-
p123
-
B world
>
/
backup
/
worldb.sql
不加-B备份数据库时,只是备份数据库下的全部表,不会建立数据库
只能
备份单独的数据库
(通常用于备份单表时使用)
mysqldump
-
uroot
-
p123 world
>
/
backup
/
world.sql
备份单表
mysqldump
-
uroot
-
p123 world city
>
/
backup
/
world_city.sql
对于单表备份的粒度,再恢复数据库数据时速度最快。
备份多个表
mysqldump 库1 表1 表2 表3
>
库1.sql mysqldump 库2 表1 表2 表3
>
库2.sql
1.3.4 --master-data={1|2}参数
告诉你备份后时刻的binlog位置
2为注释 1为非注释
,要执行的(主从复制) 此命令会锁表,须要配合
--single-transaction快照使用
[root@db02 logs]
# sed
-
n
'22p'
/
opt
/
t.sql CHANGE MASTER
TO
MASTER_LOG_FILE
=
'clsn-bin.000005'
, MASTER_LOG_POS
=
344
;
[root@db02 logs]
# mysqldump
-
B
--master-data=2 clsn >/opt/t.sql
1.3.5 压缩备份
压缩备份命令:
mysqldump
-
B
--master-data=2 clsn|gzip >/opt/t.sql.gz
解压:
zcat t.sql.gz
>
t1.sql
gzip
-
d t.sql.gz #删压缩包 gunzip alL_2017
-
12
-
22
.sql.gz
zcat t.sql.gz >/tmp/linshi.sql