innodb存储引擎学习–备份

备份的分类

可以根据不同的类型来划分备份的方法。根据备份的方法不同可以将备份分为:
❑Hot Backup(热备) 指数据库运行中直接备份,对正在运行的数据库操作没有任何的影响
❑Cold Backup(冷备)备份操作是在数据库停止的情况下,这种备份最为简单,一般只需要复制相关的数据库物理文件即可
❑Warm Backup(温备) 在数据库运行中进行的,但是会对当前数据库的操作有所影响,如加一个全局读锁以保证备份数据的一致性

按照备份后文件的内容,备份又可以分为:
❑逻辑备份 逻辑备份是指备份出的文件内容是可读的,一般是文本文件。内容一般是由一条条SQL语句,或者是表内实际数据组成。如mysqldump和SELECT*INTO OUTFILE的方法。
❑裸文件备份 裸文件备份是指复制数据库的物理文件,既可以是在数据库运行中的复制(如ibbackup、xtrabackup这类工具),也可以是在数据库停止运行时直接的数据文件复制。这类备份的恢复时间往往较逻辑备份短很多。

若按照备份数据库的内容来分,备份又可以分为:
❑完全备份
❑增量备份
❑日志备份 (bin log)

热备

ibbackup是InnoDB存储引擎官方提供的热备工具,可以同时备份MyISAM存储引擎和InnoDB存储引擎表。对于InnoDB存储引擎表其备份工作原理如下:
1)记录备份开始时,InnoDB存储引擎重做日志文件检查点的LSN。
2)复制共享表空间文件以及独立表空间文件。
3)记录复制完表空间文件后,InnoDB存储引擎重做日志文件检查点的LSN。
4)复制在备份时产生的重做日志。

可以发现,在备份期间不会对数据库本身有任何影响,所做的操作只是复制数据库文件,因此任何对数据库的操作都是允许的,不会阻塞任何操作。故ibbackup的优点如下:
❑在线备份,不阻塞任何的SQL语句。

❑备份性能好,备份的实质是复制数据库文件和重做日志文件。
❑支持压缩备份,通过选项,可以支持不同级别的压缩。
❑跨平台支持,ibbackup可以运行在Linux、Windows以及主流的UNIX系统平台上。
ibbackup对InnoDB存储引擎表的恢复步骤为:
❑恢复表空间文件。
❑应用重做日志文件。
ibbackup提供了一种高性能的热备方式,是InnoDB存储引擎备份的首选方式。不过它是收费软件,并非免费的软件。

Percona公司给用户带来了开源、免费的XtraBackup热备工具,它实现所有ibbackup的功能,并且扩展支持了真正的增量备份功能。因此,更好的选择是使用XtraBackup来完成热备的工作。支持MySQL5.0以上的版本
MySQL数据库本身提供的工具并不支持真正的增量备份,更准确地说,二进制日志的恢复应该是point-in-time的恢复而不是增量备份。而XtraBackup工具支持对于InnoDB存储引擎的增量备份,其工作原理如下:

1)首选完成一个全备,并记录下此时检查点的LSN。
2)在进行增量备份时,比较表空间中每个页的LSN是否大于上次备份时的LSN,如果是,则备份该页,同时记录当前检查点的LSN。

冷备

对于InnoDB存储引擎的冷备非常简单,只需要备份MySQL数据库的frm文件,共享表空间文件,独立表空间文件(*.ibd),重做日志文件。另外建议定期备份MySQL数据库的配置文件my.cnf,这样有利于恢复的操作。

冷备的优点是:
❑备份简单,只要复制相关文件即可。
❑备份文件易于在不同操作系统,不同MySQL版本上进行恢复。
❑恢复相当简单,只需要把文件恢复到指定位置即可。
❑恢复速度快,不需要执行任何SQL语句,也不需要重建索引。

冷备的缺点是:
❑InnoDB存储引擎冷备的文件通常比逻辑文件大很多,因为表空间中存放着很多其他的数据,如undo段,插入缓冲等信息。
❑冷备也不总是可以轻易地跨平台。操作系统、MySQL的版本、文件大小写敏感和浮点数格式都会成为问题

逻辑备份

  1. mysqldump
    mysqldump的语法如下:shell>mysqldump[arguments]>fle_name
    如果想要备份所有的数据库,可以使用–all-databases选项:shell>mysqldump–all-databases>dump.sql
    如果想要备份指定的数据库,可以使用–databases选项:shell>mysqldump–databases db1 db2 db3>dump.sql

  2. SELECT…INTO OUTFILE
    SELECT…INTO语句也是一种逻辑备份的方法,更准确地说是导出一张表中的数据。SELECT…INTO的语法如下:
    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…

复制的工作原理

复制(replication)是MySQL数据库提供的一种高可用高性能的解决方案,一般用来建立大型的应用。总体来说,replication的工作原理分为以下3个步骤:
1)主服务器(master)把数据更改记录到二进制日志(binlog)中。
2)从服务器(slave)把主服务器的二进制日志复制到自己的中继日志(relay log)中。
3)从服务器重做中继日志中的日志,把更改应用到自己的数据库上,以达到数据的最终一致性。

复制的工作原理并不复杂,其实就是一个完全备份加上二进制日志备份的还原。

从服务器有2个线程,一个是I/O线程,负责读取主服务器的二进制日志,并将其保存为中继日志;另一个是SQL线程,复制执行中继日志。
innodb存储引擎学习–备份_第1张图片
innodb存储引擎学习–备份_第2张图片

你可能感兴趣的:(数据库,mysql)