备份与恢复概述,冷备,热备

备份与恢复概述,冷备,热备

2023年7月30日发(作者:)

备份与恢复概述,冷备,热备对于DBA来说,最基本的⼯作就是数据库的备份与恢复,在意外情况下(如服务器宕机、磁盘损坏等)要保证数据不丢失,或者是最⼩程度地丢失。每个DBA应该每时每刻都关⼼⾃⼰所负责的数据库的备份情况。MySQL数据库提供的⼤多数⼯具(如mysqldump、ibbackup、replication)都能很好地完成备份的⼯作,当然也可以通过第三⽅的⼀些⼯具来完成,如xtrabackup、LVM快照备份等。DBA应该根据⾃⼰的业务要求设计出损失最⼩、对数据库影响最⼩的备份策略。备份与恢复概述根据备份的⽅法可以分为:1. Hot Backup(热备)2. Cold Backup(冷备)3. Warm Backup(温备)Hot Backup是指在数据库运⾏中直接备份,对正在运⾏的数据库没有任何影响。这种⽅式在MySQL官⽅⼿册中称为Online Backup(在线备份)。Cold Backup是指在数据库停⽌的情况下进⾏备份,这种备份最为简单,⼀般只需要拷贝相关的数据库物理⽂件即可。这种⽅式在MySQL官⽅⼿册中称为Offline Backup(离线备份)。Warm Backup备份同样是在数据库运⾏时进⾏,但是会对当前数据库的操作有所影响,例如加⼀个全局读锁以保证备份数据的⼀致性。如果按照备份后⽂件的内容,⼜可以分为:1. 逻辑备份2. 裸⽂件备份在MySQL数据库中,逻辑备份是指备份后的⽂件内容是可读的,通常是⽂本⽂件,内容⼀般是SQL语句,或者是表内的实际数据,如mysqldump和SELECT * INTO OUTFILE的⽅法。这类⽅法的好处是可以看到导出⽂件的内容,⼀般适⽤于数据库的升级、迁移等⼯作,但是恢复所需要的时间往往较长。裸⽂件备份是指拷贝数据库的物理⽂件,数据库既可以处于运⾏状态(如ibbackup、xtrabackup这类⼯具),也可以处于停⽌状态。这类备份的恢复时间往往较逻辑备份短很多。若按照备份数据库的内容来分,⼜可以分为:1. 完全备份2. 增量备份3. ⽇志备份完全备份是指对数据库进⾏⼀个完整的备份。增量备份是指在上次的完全备份基础上,对更新的数据进⾏备份。⽇志备份主要是指对MySQL数据库⼆进制⽇志的备份,通过对⼀个完全备份进⾏⼆进制⽇志的重做来完成数据库的point-in-time的恢复⼯作。MySQL数据库复制(Replication)的原理就是异步实时进⾏⼆进制⽇志重做。对于MySQL数据库来说,官⽅没有提供真正的增量备份的⽅法,⼤部分是通过⼆进制⽇志来实现的。这种⽅法与真正的增量备份相⽐,效率还是很低的。假设有⼀个100G的数据库,如果通过⼆进制⽇志来完成备份,可能同⼀个页需要多次执⾏SQL语句来完成重做的⼯作。但是对于真正的增量备份来说,只需要记录当前每个页最后的检查点的LSN。如果⼤于之前完全备份时的LSN,则备份该页,否则不⽤备份。这⼤⼤加快了备份的速度以及缩短了恢复的时间,同时这也是xtrabackup⼯具增量备份的原理。此外,还需要理解数据库备份的⼀致性,这要求在备份的时候数据在这⼀时间点上是⼀致的。举例来说,在⼀个⽹络游戏中有⼀个玩家购买了道具,这个事务的过程是:先扣除相应的⾦钱,然后往其装备表中插⼊道具,确保扣费和得到的道具是互相⼀致的。否则,在恢复时,可能出现⾦钱被扣除了,但是装备丢失的情况。对于InnoDB存储引擎来说,因为其⽀持MVCC(多版本控制)功能,因此实现备份⼀致⽐较容易。可以先开启⼀个事务,然后导出⼀组相关的表,最后提交。当然,事务隔离级别必须是REPEATABLE READ的,这样的做法就可以给你⼀个完美的⼀致性备份。然⽽,这个⽅法的前提是需要你正确地设计应⽤程序。上述购买道具的过程不可以分为两个事务来完成,如⼀个完成扣费,⼀个完成道具的购买。若备份发⽣在这两者之间,则会因为逻辑设计的问题导致备份出的数据依然是不⼀致的。对于mysqldump备份⼯具来说,可以通过添加-single-transaction选项来获得InnoDB存储引擎的⼀致性备份,这时的备份是在⼀个执⾏时间很长的事务中完成的。另外,对于InnoDB存储引擎的备份,要务必加上-single-transaction的选项(虽然是mysqldump的⼀个可选选项)。冷备对InnoDB存储引擎的冷备⾮常简单,只需要备份MySQL数据库的frm⽂件、共享表空间⽂件、独⽴表空间⽂件(*.ibd)、重做⽇志⽂件。另外,定期备份MySQL数据库的配置⽂件,这样有利于恢复操作。通常,DBA会写⼀个脚本来执⾏冷备的操作,DBA可能还会对备份完的数据库进⾏打包和压缩,这并不是⼀件难事。关键在于,不要遗漏原本需要备份的物理⽂件,如共享表空间和重做⽇志⽂件,少了这些⽂件数据库可能都⽆法启动。另外⼀种经常发⽣的情况是,由于磁盘空间已满⽽导致的备份失败,DBA可能习惯性地认为运⾏脚本的备份是没有问题的,少了检验的机制。在同⼀台机器上对数据库进⾏冷备是远远不够的,还需要将本地的备份放⼊⼀台远程服务器中,以确保不会因为本地数据库宕机⽽影响备份⽂件的使⽤。冷备的优点是:1. 备份简单,只要拷贝相关⽂件即可。2. 备份⽂件易于在不同操作系统、不同MySQL版本上进⾏恢复。3. 恢复相当简单,只需要把⽂件恢复到指定位置即可。4. 恢复速度快,不需要执⾏任何SQL语句,也不需要重建索引。冷备的缺点是:1. InnoDB存储引擎冷备的⽂件通常⽐逻辑⽂件⼤很多,因为表空间中存放着很多其他数据,如Undo段、插⼊缓冲等信息。2. 冷备并不总是可以轻易地跨平台。操作系统、MySQL的版本、⽂件⼤⼩写敏感和浮点数格式都会成为问题。热备ibbackupibbackup是InnoDB存储引擎官⽅提供的热备⼯具,可以同时备份MyISAM存储引擎表和InnoDB存储引擎表。InnoDB存储引擎表的备份⼯作原理如下:1. 记录备份开始时,InnoDB存储引擎重做⽇志⽂件检查点的LSN。2. 拷贝共享表空间⽂件以及独⽴表空间⽂件。3. 记录拷贝完表空间⽂件后,InnoDB存储引擎重做⽇志⽂件检查点的LSN。4. 拷贝在备份时产⽣的重做⽇志。对于事务型的数据库,如SQL Server数据库、Oracle数据库,热备的原理与上述⼤致相同。可以发现,在备份期间不会对数据库本⾝有任何影响,所做的操作只是拷贝数据库⽂件,因此任何对数据库的操作都是允许的,不会出现阻塞情况。因此,ibbackup的优点如下:1. 在线备份。不阻塞任何SQL语句。2. 备份性能好。备份的实质是复制数据库⽂件和重做⽇志⽂件。3. ⽀持压缩备份。通过选项,可以⽀持不同级别的压缩。4. 跨平台⽀持。ibbackup可以运⾏在Linux、Windows以及主流的Unix系统平台上。ibbackup对InnoDB存储引擎表的恢复过程如下:1. 恢复表空间⽂件。2. 应⽤重做⽇志⽂件恢复InnoDB存储引擎表。ibbackup提供了⼀种⾼性能的热备⽅式,是InnoDB存储引擎备份的⾸选⽅式。不过它是收费软件,好在Pecona公司给我们带来了开源、免费的XtraBackup热备⼯具,它可以实现ibbackup的所有功能,并且还扩展⽀持真正的增量备份功能。因此,更好的选择应该是使⽤XtraBackup来完成热备的⼯作。XtraBackupXtraBackup⽀持MySQL数据库5.0版和5.1版,同时也⽀持InnoDB Plugin版本新增的Barracuda页格式。XtraBackup在GPL v2开源协议下发布,官⽅⽹站地址是:https:///percona-xtrabackup。xtrabackup命令的使⽤⽅法如下:xtrabackup --backup|--prepare [OPTIONS]xtrabackup命令的可选参数如下所⽰:(The defaults options should be given as the first argument)--print-defaults Prints the program's argument list and exit.--no-defaults Don't read the default options from any file.--defaults-file=Read the default options from this file.--defaults-extra-file=Read this file after the global options files have been read.--target-dir=The destination directory for backups.--backup Make a backup of a mysql instance.--stats Calculate the statistic of the datadir(it is recommended you take mysqld offline).--prepare Prepare a backup so you can start mysql server with your restore.--export Create files to import to another database after it has been prepared.--print-param Print the parameters of mysqld that you will need for a for copyback.--use-memory=This value is used instead of buffer_pool_size.--suspend-at-end Creates a file called xtrabackup_suspended and waits until the user deletes that file at the end of the backup.--throttle=(use with--backup)Limits the IO operations(pairs of reads and writes) per second to the values set here.--log-stream outputs the contents of the xtrabackup_logfile to stdout.--incremental-lsn=(use with--backup)Copy pages newer than the specified LSN high:low.

##ATTENTION##:checkpoint lsn*must*be Careful!--incremental-basedir=(use with--backup)Copy pages newer than the existing backup at the specified directory.--incremental-dir=(use with--prepare) files and logfiles located in the specified directory.--tables=name Regular Expression list of table names to be backed up.--create-ib-logfile(NOT CURRENTLY IMPLEMENTED)will create ib_logfile* after a--prepare.###If you want to create ib_logfile*only re-execute this command using the same options.###--datadir=name Path to the database root.--tmpdir=name Path for temporary l paths may be specified as a colon(:)separated you specify multiple paths they are used round-robin.如果我们要做⼀个完全备份,可以执⾏如下命令:./xtrabackup --backup./xtrabackup Ver alpha-0.2 for 5.0.75 unknown-linux-gnu(x86_64)>>log scanned up to(0 1009910580)........................................................................................................................................................................................................................................................Copying./tpcc//home/kinoyasu/xtrabackup_work/mysql-5.0.75/innobase/xtrabackup/tmp2/tpcc/>>log scanned up to(0 1010561109)……doneCopying./tpcc//home/kinoyasu/xtrabackup_work/mysql-5.0.75/innobase/xtrabackup/tmp2/tpcc/……/home/kinoyasu/xtrabackup_work/mysql-5.0.75/innobase/xtrabackup/tmp2/tpcc/……done>>log scanned up to(0 1014592707)Stopping log copying thread..Transaction log of lsn(0 1009910580)to(0 1014592707)was ckup实现增量备份MySQL数据库本⾝提供的⼯具并不⽀持真正的增量备份,更准确地说,⼆进制⽇志的恢复应该是point-in-time的恢复⽽不是增量备份。XtraBackup⼯具⽀持对InnoDB存储引擎的增量备份,其⼯作原理如下:(1)⾸先完成⼀个完全备份,并记录下此时检查点的LSN。(2)在进⾏增量备份时,⽐较表空间中每个页的LSN是否⼤于上次备份时的LSN,如果是,则备份该页,同时记录当前检查点的LSN。因此XtraBackup的备份和恢复过程⼤致如下:(full backup)#./xtrabackup --backup --target -dir=/backup/base(incremental backup)#./xtrabackup --backup --target -dir=/backup/delta --incremental -basedir=/backup/base(prepare)#./xtrabackup --prepare --target -dir=/backup/base(apply incremental backup)#./xtrabackup --prepare --target -dir=/backup/base --incremental -dir=/backup/delta上述过程中,⾸先将全部⽂件备份到/backup/base⽬录下,增量备份产⽣的⽂件备份到/backup/delta。恢复过程中,⾸先指定完全备份的路径,然后将增量备份应⽤于该完全备份。以下显⽰了⼀个完整的增量备份过程:./xtrabackup --backup>>log scanned up to(0 378161500)The latest check point(for incremental):'0:377883685'<=====使⽤这个LSN>>log scanned up to(0 379294296)Stopping log copying thread..Transaction log of lsn(0 377883685)to(0 379294296)was copied.(must do--prepare before the each incremental backup)./xtrabackup --prepare./xtrabackup --backup --incremental=0:377883685incremental backup from 0:377883685 is enabled.>>log scanned up to(0 379708047)Copying./ibdata1to/home/kinoyasu/xtrabackup_work/mysql-5.0.75/innobase/xtrabackup/tmp_diff/……doneThe latest check point(for incremental):'0:379438233'<====下⼀个增量备份开始的LSN>>log scanned up to(0 380663549)Stopping log copying thread..Transaction log of lsn(0 379438233)to(0 380663549)was copied.

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1690655297a387686.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信