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

  1. 备份

  1.1 根据备份方法不同可以划分为:

  • 热备(Hot Backup)

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

  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的恢复即可

  

   

  

posted @ 2021-08-09 16:41  慕仙白  阅读(383)  评论(0)    收藏  举报