第八章 备份与恢复(学习笔记)

  1. 备份

  1.1 根据备份方法不一样能够划分为:mysql

  • 热备(Hot Backup)

  ibbackup是InnoDB存储引擎备份的首选方式,只不过是收费软件。其工做原理以下:sql

  1) 记录备份开始时,InnoDB存储引擎重作日志文件检查点的LSN数据库

  2) 复制共享表空间文件以及独立表空间文件服务器

  3) 记录复制完表空间文件后,InnoDB存储引擎重作日志文件检查点的LSN架构

  4) 复制在备份时产生的重作日志异步

  ibbackup对InnoDB存储引擎表的恢复步骤为:工具

  1) 恢复表空间文件性能

  2) 应用重作日志文件操作系统

  XtraBackup实现增量备份日志

  XtraBackup是一款开源的备份工具,支持对于InnoDB存储引擎的增量备份,工做原理以下:

  1) 完成一个全备,并记录下此时检查点的LSN

  2) 在进行增量备份时,比较表空间中每一个页的LSN是否大于上次备份的LSN,若是是则备份该页  

  • 冷备(Cold Backup)

  须要备份MySQL数据库的frm文件,共享表空间文件,独立表空间文件(*.ibd),重作日志文件。按期备份MySQL数据库的配置文件my.cnf,这样有利于恢复的操做。

  也须要作好远程异地备份,即容灾防范。

  优势:

  1. 备份简单,只须要复制相关文件便可

  2. 备份文件易于在不一样操做系统,不一样MySQL版本上进行恢复

  3. 恢复简单,只须要把文件恢复到指定位置便可

  4. 恢复速度快,不须要执行SQL语句,也不须要重建索引

  缺点:

  1. InnoDB存储引擎冷备的文件一般比逻辑文件大不少,由于表空间中存放着不少其余数据,如undo段,插入缓冲等信息

  2. 冷备不老是能够轻易跨平台。操做系统、MySQL版本、文件大小写敏感和浮点数格式都会成为问题

  • 温备(Warm Backup)

  备份一样在数据库运行中进行,可是会对当前数据库的操做有影响,如加一个全局读锁以保证备份数据的一致性

  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. 复制

  2.1 复制

  复制(replication)是MySQL数据库提供的一种高可用高性能的解决方案,通常用来创建大型的应用。工做原理分为三个步骤:

  1)主服务器(master)把数据更改记录到二进制日志(binlog)中。

  2)从服务器(slave)把主服务器的二进制日志复制到本身的中继日志(relay log)中。

  3)从服务器重作中继日志中的日志,把更改应用到本身的数据库中,以达到数据的最终一致性。

  

  2.2  快照+复制的备份架构

  复制除了能够做为备份,还有以下主要功能:

  • 数据分布   因为MySQL数据库提供的复制并不须要很大的带宽需求,所以能够在不一样的数据中心之间实现数据的复制
  • 读取的负载平衡   经过创建多个从服务器,可将读取平均地分布到这些从服务器中,而且减小了主服务器的压力。
  • 数据库备份  复制对备份颇有帮助,可是从服务器不是备份,不能彻底替代备份
  • 高可用性和故障转移  经过复制创建的从服务器有助于故障转移,减小故障的停机时间和恢复时间

  经过对从服务器上的数据库所在分区进行快照,能够避免误操做对复制的影响。当发生主服务器上的误操做时,只须要将从服务器上的快照进行恢复,而后再根据二进制日志进行point-in-time的恢复便可

  

相关文章
相关标签/搜索