1.1 根据备份方法不一样能够划分为:mysql
ibbackup是InnoDB存储引擎备份的首选方式,只不过是收费软件。其工做原理以下:sql
1) 记录备份开始时,InnoDB存储引擎重作日志文件检查点的LSN数据库
2) 复制共享表空间文件以及独立表空间文件服务器
3) 记录复制完表空间文件后,InnoDB存储引擎重作日志文件检查点的LSN架构
4) 复制在备份时产生的重作日志异步
ibbackup对InnoDB存储引擎表的恢复步骤为:工具
1) 恢复表空间文件性能
2) 应用重作日志文件操作系统
XtraBackup实现增量备份日志
XtraBackup是一款开源的备份工具,支持对于InnoDB存储引擎的增量备份,工做原理以下:
1) 完成一个全备,并记录下此时检查点的LSN
2) 在进行增量备份时,比较表空间中每一个页的LSN是否大于上次备份的LSN,若是是则备份该页
须要备份MySQL数据库的frm文件,共享表空间文件,独立表空间文件(*.ibd),重作日志文件。按期备份MySQL数据库的配置文件my.cnf,这样有利于恢复的操做。
也须要作好远程异地备份,即容灾防范。
优势:
1. 备份简单,只须要复制相关文件便可
2. 备份文件易于在不一样操做系统,不一样MySQL版本上进行恢复
3. 恢复简单,只须要把文件恢复到指定位置便可
4. 恢复速度快,不须要执行SQL语句,也不须要重建索引
缺点:
1. InnoDB存储引擎冷备的文件一般比逻辑文件大不少,由于表空间中存放着不少其余数据,如undo段,插入缓冲等信息
2. 冷备不老是能够轻易跨平台。操做系统、MySQL版本、文件大小写敏感和浮点数格式都会成为问题
备份一样在数据库运行中进行,可是会对当前数据库的操做有影响,如加一个全局读锁以保证备份数据的一致性
1.2 按照备份后文件的内容,能够分为:
逻辑备份是指备份出来的文件内容是可读的,通常是文本文件。内容通常是由一条条SQL语句,或者表内实际数据组成。优势是能够观察导出文件的内容,通常适用于数据库的升级、迁移等工做。缺点是恢复所须要的时间每每较长。
1. mysqldump备份工具用来完成转存(dump)、数据库备份及不一样数据库之间的移植,如从MySQL低版本数据库升级到MySQL高版本数据库,又或者从MySQL数据库移植到Oracle、Microsoft SQL Server数据库等。mysqldump语法以下:
mysqldump [arguments] >file_name
例如: mysqldump --all-databases > dump.sql / mysqldump --databases db1 db2 db3 > dump.sql / mysqldump --single-transaction(保证备份的一致性,仅对InnoDB存储引擎有效) --where='b>2' test a > a.sql (完成一张表的导出)
逻辑备份的恢复语句:
mysql -uroot -p <test_backup.sql
注: mysqldump不能导出视图,故而用mysqldump备份完数据库后,还须要导出视图的定义,或者备份视图定义的frm文件,并在恢复时进行导入,以保证mysqldump数据库的彻底恢复
2. SELECT....INTO OUTFILE
该语句主要用于导出一张表中的数据。语法以下:
SELECT [column 1], [column 2] ...
INTO
OUTFILE 'file_name'
[{FIELDS | COLUMNS}
[TERMINATED BY 'string' ] //表示每一个列的分隔符
[ [OPTIONALLY] ENCLOSED BY 'char' ] //表示字符串包含哪些字符
[ ESCAPED BY 'char'] // 转义符
]
[ LINES
[ STARTING BY 'string'] // 每行开始的字符
[ TERMINATED BY 'string' ] 每行的结束符
]
FROM TABLE WHERE....
没有指定任何FIELDS和LINES选项的默认设置以下:
FIELDS TERMINATED BY '\t' ENCLOSED BY ' ' ESCAPED '\\'
LINES TERMINATED BY '\n' STARTING BY ' '
对SELECT INTO OUTFILE 导出的数据进行恢复使用以下语句:
LOAD DATA INTO TABLE a IGNORE1 LINES INFILE '/home/mysql/a.txt/' (其余设置与导出相似)
复制数据库的物理文件,既能够在数据库运行中复制(如ibbackup、xtrabackup这类工具),也能够在数据库中止运行时直接进行数据文件复制
1.3 按照备份数据库的内容来分,能够分为:
对数据库进行完整的备份
在上次彻底备份的基础上,对更改的数据进行备份。(MySQL数据库没有实现基于LSN的增量备份功能,其经过二进制日志实现该功能,效率较低)
对MySQL数据库二进制日志的备份,经过对一个彻底备份进行二进制日志的重作(replay)来完成数据库的point-in-time的恢复工做。MySQL数据库复制(replication)的原理就是异步实时的将二进制日志重作传送并应用到从(slave/standby)数据库。推荐的二进制日志的服务器配置应该是:
[mysqld]
log-bin = mysql-bin
sync-binlog = 1
innodb_support_xa = 1
还原binlog.000001, 可使用以下命令:
mysqlbinlog binlog.000001 | mysql -uroot -p test
1.4 快照备份
MySQL数据库自己并不支持快照功能,所以快照备份是指经过文件系统支持的快照功能对数据库进行备份。备份的前提是将全部数据库文件放在同一文件分区中,而后对该分区进行快照操做。支持快照功能的文件系统有GNU/Linux的逻辑管理器(Logical Volume Manager, LVM)。下图为LVM工做原理:
若干个磁盘分区链接为一个整块的卷组(Volume Group),造成一个存储池。管理员能够在卷组上任意建立逻辑卷,并进一步在逻辑卷上建立文件系统。
·LVM使用了写时复制(copy-on-write)技术来建立快照。当建立一个快照时,仅复制原始卷中数据的元数据(meta data),并不会有数据的物理操做,所以快照的建立过程是很是快的。
当快照建立完成,原始卷上有写操做时,快照会跟踪原始卷块的改变,将要改变的数据在改变以前复制到快照预留的空间里,即写时复制。对于快照的读取操做,若是读取的数据块是建立快照后没有修改过的,那么会将读操做直接重定向到原始卷上,若是要读取的是已经修改过的块,则将读取保存在快照中该块在原始卷上改变以前的数据。采用写时复制机制保证了读取快照时获得的数据与快照建立时一致。
2.1 复制
复制(replication)是MySQL数据库提供的一种高可用高性能的解决方案,通常用来创建大型的应用。工做原理分为三个步骤:
1)主服务器(master)把数据更改记录到二进制日志(binlog)中。
2)从服务器(slave)把主服务器的二进制日志复制到本身的中继日志(relay log)中。
3)从服务器重作中继日志中的日志,把更改应用到本身的数据库中,以达到数据的最终一致性。
2.2 快照+复制的备份架构
复制除了能够做为备份,还有以下主要功能:
经过对从服务器上的数据库所在分区进行快照,能够避免误操做对复制的影响。当发生主服务器上的误操做时,只须要将从服务器上的快照进行恢复,而后再根据二进制日志进行point-in-time的恢复便可