码迷,mamicode.com
首页 > 数据库 > 详细

MySQL数据库备份、恢复知识储备

时间:2015-04-14 20:18:56      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:mysql备份

目录

1、备份目的

2、备份类型

3、备份对象

4、备份工具

5、备份的一般操作流程

6、数据恢复的一般操作流程

7、备份工具

1、备份目的

备份的目的是为了数据还原和恢复数据,备份只是一种手段,还原和恢复才是目的。对备份的数据要做定期的恢复测试,已确保备份的可用性。

2、备份类型

备份类型可以从三个维度来说明,一是根据数据库是否需要离线来划分,二是根据备份数据的范围来划分,三是根据备份的是数据文件还是SQL语句文件来划分。


2.1、根据数据库是否需要离线来划分:

a)、冷备:cold backup,数据库服务关闭或读写请求均不允许的情况下,一般采取取冷备方式都是物理备份

b)、温备:warm backup,数据库的所有表被加读锁,禁止写请求,仅支持读请求,服务器不需要离线,但线上部份业务会受到影响

c)、热备:hot backup,备份的同时,业务不受到功能上的影响,只会在性能上会受到影响,是否支持热备与存储引擎也有关系,InnoDB可支持热备,MyISAM不支持热备,它只支持温备


2.2、根据备份的数据范围可以分为:

a)、完全备份:full backup,备份全部数据,可以是全部数据库,也可以指对单独的一个数据库进行完全备份

b)、增量备份:incremental backup,表示从上一次完全备份以来到现在已改变的数据,或表示从上一次增量备份到现在已改变的数据的备份。增量备份不能单独拿来做数据恢复操作,要与完全备份结合做数据恢复。

c)、差异备份:Differential Backup,表示从上一次完全备份后到现在已改变的数据备份,也是与完全备份结合做数据恢复


2.3、根据备份的是数据文件还是SQL语句文件,可以分为:

a)、物理备份:直接转储(冷copy)数据库的数据文件、配置文件、日志文件等,比较形象的说法就是直接拷贝数据文件

b)、逻辑备份:把表中的数据读取出来生成SQL脚本文件或数据库中的其他代码数据,在恢复时用备份的sql语句文件来实现数据库数据的重放,是一种对象级备份方案,所以逻辑备份可移植性比较高,但备份和恢复的效率比较低。

特性:

a)、逻辑备份的优点:备份出的数据是ASCII文本文件,文本里全是sql语句,可对备份的文件进行修改(比如存储引擎的修改),与存储引擎无关,而且可以跨平台、跨版本恢复,可通过网络备份和恢复,恢复简单。

b)、逻辑备份的缺点:mysql服务必须启动,备份和恢复mysqld服务进程都要参与,会额外消耗服务器CPU资源,备份结果是纯文本型的,所以数据库中表中是数值型的数据也要转换成文本型的,导致备份文件将占据过多的存储空间,但可采用压缩备份文件的方式来弥补,浮点类型的数值的精度可能会丢失,数据还原后,索引需要重新建立。

c)、物理备份的优点:不需要额外的备份工具,直接使用cp类似的复制工具即可,因是在文件级别上完成的备份,所以备份速度快,索引不需要重建

d)、物理备份的缺点:备份文件会比实际数据大,因为像InnoDB存储引擎的表空间默认时就是10M大小,但数据量是没有10M的,里面会有一些元数据和索引,并且mysql需要锁表或关闭服务后再进行备份

3、备份对象

备份可不是只是对数据库的数据目录下的各个数据库文件进行备份,还应该包括:配置文件,存储过程、存储函数、触发器,操作系统的针对数据库定制相关配置文件,与mysql复制相关的配置文件,二进制日志等。

4、备份工具

a)、mysqldump:

是一个单线程逻辑备份工具,对InnoDB表可以热备,对MyISAM表可温备,备份各恢复的速度较慢,可实现备份整个服务器的数据库,单个或部分数据库,单个或部分表,表中的某些行,存储过程、存储函数、触发器等,能自动记录备份时的二进制日志文件及相应的position。

b)、mydumper:

是一个多线程逻辑备份工具,可取代mysqldump工具

c)、ibbackup(开源版:xtrabackup):

是一个物理备份工具,支持InnoDB引擎热备份,MyISAM引擎温备,速度很快

d)、lvm-snapshot:

是一个物理备份工具,基于lvm快照的类似于热备工具,因为在建立快照时需要获取读锁,备份和恢复快

e)、SELECT INTO OUTFILE:

是一个在mysql接口上的逻辑备份工具,备份的是数据,不是sql语句,还原时用“LOAD DATA INFILE ‘‘ INTO TABLE tb_name”,一般适用于备份单表中的小量数据,速度较快

f)、mysqlhotcopy:是一个冷备工具,现在几乎已弃用。

5、备份的一般操作流程

a)、锁定需要备份的表

mysql> FLUSH TABLES WITH READ LOCK;  #请求对所有的表施加读锁,会影响部分线上业务

mysql> SHOW ENGINE  INNODB STATUS; #如果是INNODB引擎,应查看innodb引擎的一些状态来确认是否还有写请求

b)、使用备份工具进行备份操作

c)、mysql> UNLOCK TABLES;#备份好后要释放锁

6、数据恢复的一般操作流程

a)、让数据库离线,不再线上提供业务,若有必要关闭mysql进程

b)、记录服务的配置和文件权限

c)、复制冷备份的数据文件至数据目录

d)、按需改变文件权限

e)、尝试启动服务,应限制网络功能

f)、关闭二进制日志,让恢复操作不记录进二进制日志文件中

g)、装载逻辑备份

h)、检查和重放二进制日志

i)、确认数据还原正常完成,check tables检查表

j)、以完全权限重启服务器

7、备份工具

a)、mysqldump工具

-B,--databases db_name:指定备份的数据库,使用此选项会在备份的文件中自动生成“create database”语句,如果不用此选项在恢复数据库时要手动创建数据库

-x, --lock-all-tables :锁定所有表,对InnoDB引擎中的表也未必立刻生效,需要用“mysql> SHOW ENGINE  INNODB STATUS; ”来观察,所以如果库中的所有表都是InnoDB引擎并不建议使用此选项

-l, --lock-tables:备份单张表时使用此选项

--master-data[=#]:值有1、2,表示在备份的文件中会生成"CHANGE MASTER TO MASTER_LOG_FILE=‘binlog_name’ MASTER_LOG_POS=position”,只是值为2时,会把此语句注释,在使用mysqldump命令备份时建议加上此选项,可以在备份的文件中得知在备份时所使用的二进制日志文件及position点在哪里,便于使用二进制日志文件恢复数据的定位。

--single-transaction:此选项可实现热备InnoDB引擎的表,不需要“--lock-all-tables”来锁定所有表,为mysqldump命令创建一个大的事务,对所有表创建一个快照,然后才对这个快照进行备份

-A, --all-databases:备份所有库

-C, --compress:mysqldump在远程备份时压缩数据再进行传输

-E, --events:备份数据的同时备份事件高度器代码

-R, --routines:备份存储过程和存储函数

--opt:同时启用多个高级选项,请查看帮助信息

b)、基于LVM的几乎热备工具

前提:事务日志文件与数据文件必须在同一卷上,因为在做快照时是对一个卷做快照,要保证在做快照时事务日志与数据是在同一时刻的快照,这是为了保证数据的一致性。

在备份前调整“sync_binlog = 1”,此参数是当有数据变化时,sql语句是先写进“binlog_cache_size”规定大小的内存空间的,再由系统自动刷新到磁盘上,把此值设置为“1”时就是表示每一次语句写入binlog的内存空间时就直接刷新到磁盘,能保持数据的一至致性。

备份过程大致如下:

1、mysql> FLUSH TABLES WITH READ LOCK; #获取全局读锁,如果mysql不离线,则会影响部分业务

mysql> SHOW MASTER STATUS;#记录当前的二进制日志文件和position

mysql> FLUSH LOGS;

2、为数据所在的卷创建快照

]# lvcreate -L 100M -n mydata-snap -p r -s /dev/vg_name/lv_name   #快照大小请根据实际情况而定

3、mysql> UNLOCK TABLES;

4、备份数据

用cp、tar这样的类似工具直接转储快照里的数据即可。


为了简化备份的复杂过程,有人专门制作了一个工具,名叫mylvmback,官网:http://www.lenzg.net/mylvmbackup/

c)、xtrabackup

可对InnoDB表进行热备,对MyISAM表也只能是温备,此工具有以下特点:

1、备份可靠且快速;

2、备份过程不会打断正在执行的事务;

3、基于流控和压缩功能节约磁盘空间和带宽

4、还原速度快

xtrabackup在备份目录中创建的文件:

1、xtrabackup_checkpoints

记录备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息

2、xtrabackup_binlog_info

 记录mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置

3、xtrabackup_info

记录备份时用到的innobackupex、xtrabackup工具的版本、备份时当前使用的二进制日志文件名及事件点位置等信息

4、xtrabackup_logfile

这是一个非文本文件,里面记录的是在备份时innodb引擎中所管理的数据变化的事件、数据等,在恢复的准备阶段需要根据此文件把已提交的而没有同步到磁盘的事务做redo,而把没有提交的事务做undo。

根据xtrabackup的版本不同,在备份目录下创建的文件略有些差别。

percona-xtrabackup软件包的特性:

xtrabackup软件是由percona公司的"percona-xtrabackup"软件包提供的,此软件包其实是由两个软件组成,一个是innobackupex,另一个才是xtrabackup。innobackupex是由per脚本封装起来的一个per脚本,这个脚本对innodb表会自动去调用xtrabackup程序实现对innodb或xtradb的热备,而对于非innodb或xtradb表则只能实现温备。如果在备份的库中的表有innodb和myisam这样的混合场景,innobackupex会先对innodb表做热备,再锁定全表,再备份非innodb表(non-innodb表),在比较繁忙的MySQL中获取表锁的时间是不确定的,且阻塞了写请求,所以在不影响线上业务混合场景下不建议使用innobackupex作备份。


本文出自 “知识需要总结与记录” 博客,请务必保留此出处http://zhaochj.blog.51cto.com/368705/1632106

MySQL数据库备份、恢复知识储备

标签:mysql备份

原文地址:http://zhaochj.blog.51cto.com/368705/1632106

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!