8.1 备份与恢复概述 350
按备份的方法分:
- HOT BACKUP(热备):在数据库运行时备份,对正在运行的数据库的操作没有影响。
备份工具:ibbackup、XtraBackup - COLD BACKUP(冷备):在数据库停止时备份。
- WARM BACKUP(温备)在数据库运行时备份,对正在运行的数据库的操作有影响。
按备份后文件的内容分:
- 逻辑备份:内容一般是SQL语句或是表内实际数据。缺点是备份时间比较长。
- 裸文件备份:指复制数据库的物理文件,这类备份的恢复时间往往较逻辑备份短很多。
若按照备份数据库的内容来分,备份又可以分为:
- 完全备份:指对数据库进行一个完整的备份。
- 增量备份:增量备份是指在上次完全备份的基础上,对于更改的数据进行备份。
- 日志备份:日志备份主要是指对MySQL数据库二进制日志的备份
8.2 冷备 352
关闭数据库,拷贝frm文件、共享表空间文件、独立表空间文件、重做日志文件,还有推荐备份数据库配置文件:my.cnf。
冷备份的优点:备份简单;备份文件易于在不同操作系统、不同mysql版本上进行恢复;恢复简单;恢复速度快。
冷备份的缺点:占用空间大
8.3 逻辑备份 353
8.3.1 mysqldump 353
mysqldump最常用的逻辑备份工具。以下列举几个比较重要的参数:
–single-transaction 在备份开始前使用start transaction以此保证备份的一致性,需要保证没有其他DDL语句,针对innodb有效。
–lock-tables -l 在备份中依次锁住架构下所有的表,保证备份的一致性,一般用于MyISAM备份。
–lock-all-tables -x 在备份过程中,对所有架构中的所有表上锁。
–add-drop-database : 在 CREATE DATABASE 之前先运行 DROP DATABASE。
–master-data[=value] 当值为1时,转储文件中有change master语句,如果值为2,change master语句是被注释的,此参数会忽略–lock-tables.如果没有使用–single-transaction则会自动使用–lock-all-tables。
–events (-E) 备份事件调度器。
–routines (-R) 备份存储过程和函数。
–triggers 备份触发器。
–hex-blob:将BINARY、VARBINARY、BLOG和BIT列类型备份为十六进制的格式。
–tab=path(-T path) :产生TAB分割的数据文件。对于每张表mysqldump会创建一个包含create table的table_name.SQL和一个包含数据的tbl_name.txt,可以使用参数改变默认的分割符和换行符。
–where= ’ where_ condition’ (-w ’ where condition’): 导出给定条件的数据。如.导出b架构下的表a,并且表a的数据大于2
8.3.2 SELECT…INTO OUTFILE 360
Select … into语句也是一种逻辑备份的方法,或者更准确地说是到处一张表中的数据。
也有一些参数和选项,具体看书。
8.3.3 逻辑备份的恢复 362
Mysqldump的恢复操作比较简单,因为备份文件就是导出的SQL语句,一般只需要执行这个文件就可以了。通过mysqldump可以恢复存储过程,触发器,事件,数据,但是不能导出视图。视图还需要额外导出。
8.3.4 LOAD DATA INFILE 362
若通过mysqldump –tab或SELECT INTO OUTFILE导出的数据需要恢复时,可以通过LOAD DATA INFILE命令进行导入。
8.3.5 mysqlimport 364
mysqlimport是MySQL数据库提供的一个命令行程序,从本质上来说,是LOAD DATA INFILE的命令接口,而且大多数的选项都和LOAD DATA INFILE语法相同。区别是:mysqlimport可以并发导入多个文件,而不是并发导入一个文件。
8.4 二进制日志备份与恢复 366
二进制日志非常关键,用户可以通过它完成point-in-time的恢复工作。开启二进制文件后还需要进行一些参数的设置。
可以通过使用mysqlbinlog来恢复二进制日志,具体的命令格式见书。
8.5 热备 367
8.5.1 ibbackup 367
ibbackup是InnoDB存储引擎官方提供的热备工具,可以同时备份MyISAM存储引擎和InnoDB存储引擎表。
对于InnoDB存储引擎表其备份工作原理如下:
1)记录备份开始时,InnoDB存储引擎重做日志文件检查点的LSN.
2)复制共享表空间文件以及独立表空间文件。
3)记录复制完表空间文件后,InnoDB 存储引擎重做日志文件检查点的LSN。
4)复制在备份时产生的重做日志。
ibbackup的优点如下:1.在线备份,不阻塞任何的SQL语句。2.备份性能好3.支持压缩备份4.跨平台支持,
ibbackup对InnoDB存储引擎表的恢复步骤为:
1)恢复表空间文件。
2)应用重做日志文件。
8.5.2 XtraBackup 368
在ibbackup基础上实现了增量备份。
备份原理与ibbackup类似。
8.5.3 XtraBackup实现增量备份 370
XtraBackup实现增量备份的基本工作原理:
- 首先完成一个完全备份,并记录下此时检查点的LSN;
- 在进行增量备份时,比较表空间的每个页的LSN是否大于上次备份时的LSN,如果是则备份该页,同时记录当前检查点的LSN。
8.6 快照备份 372
MySQL数据库本身并不支持快照功能,因此快照备份是指通过文件系统支持的快照功能对数据库进行备份。
以Linux中的LVM举例:
LVM是LINUX系统下对磁盘分区进行管理的一种机制。LVM在硬盘和分区之,上建立一个逻辑层,来提高磁盘分区管理的灵活性:将若干个磁盘分区连接为一个整块的卷组(VolumeGroup),然后在卷组上可以随意创建逻辑卷( Logical Volumes),并进一步在逻辑卷上创建文件系统。
LVM使用了写时复制(Copy-on-write) 技术来创建快照。创建快照时,仅复制元数据(metadata),不会有数据的物理操作,当快照创建完成,原始卷上有写操作时,快照会跟踪原始卷块的改变,将要改变的数据在改变之前复制到快照预留的空间里。
8.7 复制 376
8.7.1 复制的工作原理 376
replication的工作原理分为以下3个步骤:
- 主服务器把数据更新记录写道binlog。
- 从服务器把主服务器的二进制日志拷贝到自己的中继日志中。
- 从服务器重做做中继日志中的时间,把更新应用到自己服务器上。
原理如下图所示:
8.7.2 快照+复制的备份架构 380
仅采用主从的复制架构,如果主服务器执行了误操作,这时从服务器也会跟着运行,因此无法恢复了。
所以引入了快照+复制的备份架构,架构图如下所示:
原理:当发生主服务器上的误操作时,只需要将从服务器上的快照进行恢复,然后再根据二进制日志进行point-in-time的恢复即可。
8.8 小结 382
本章中介绍了不同的备份类型,并介绍了MySQL数据库常用的–些备份方式。同时主要介绍了对于InnoDB存储引擎表的备份。不管是mysqldump还是xtrabackup工具,都可以对InnoDB存储引擎表进行很好的在线热备工作。最后,介绍了复制,通过快照和复制技术的结合,可以保证用户得到一个异步实时的在线MySQL备份解决方案。