1数据库备份类型是根据数据库的大小进行备份。可以备份整个数据库,包括用户表、系统表、索引、视图、存储过程等所有数据库对象。但是比较费时间和空间,所以一般建议每周做一次完整备份。1.2事务日志备份事务日志是一个单独的文件,记录了数据库的变化。备份时,只需要复制自上次备份以来对数据库所做的更改,因此花费的时间非常少。为了数据库的稳健性,建议每小时甚至更频繁地备份事务日志。1.3差异备份又称增量备份。这是另一种只备份部分数据库的方法,它不使用事务日志,而是使用整个数据库的新映像。它比原始完整备份小,因为它仅包含自上次完整备份以来发生更改的数据库。它具有快速存储和恢复的优点。建议每天做一次差异备份。1.4文件备份一个数据库可以由硬盘上的许多文件组成。如果数据库很大,不能连夜备份,可以使用文件备份,每晚备份一部分数据库。由于数据库通常不会大到必须使用多个文件存储的程度,因此这种备份类型并不常见。根据数据库的状态,可以分为三种:1.冷备份,此时数据库处于关闭状态,可以更好的保证数据库的完整性。2、热备份,数据库在运行中,这种方式依赖于数据库的[1]日志文件进行备份。3、逻辑备份,利用软件从数据库中提取数据,并将结果写入文件。#p#2备份工具介绍mysql按照备份和恢复方式分为逻辑备份和物理备份。逻辑备份就是备份sql语句。恢复时,执行备份的sql语句,实现数据库数据的再现。物理备份就是备份数据文件。比较形象的一点就是cp下的数据文件,但是实际备份自然不像cp那么简单。这两种类型的备份各有优缺点。一般来说,物理备份恢复速度较快,占用空间大,而逻辑备份速度较慢,占用空间小。官方地址:http://dev.mysql.com/doc/refman/5.6/en/backup-and-recovery.html2.1mysqldump工具mysqldump是mysql自带的备份工具,目录在bin目录下:/usr/local/mysql/bin/mysqldump支持基于innodb的热备份。不过由于是逻辑备份,速度不是很快,适用于备份数据比较少的场景。mysqldump全量备份+二进制日志可以实现时间点恢复。对于myisam存储引擎的表,只能使用warmbackup。这时候要防止数据写入,所以先加读锁。这时候也可以进入数据库手动加读锁,但是这样比较麻烦。可以在mysqldump工具中直接有个加锁选项,就是--lock-all-tables,比如mysqldump--databasestest--lock-all-tables--flush-logs>/tmp/backup_test_`date+%F-%H-%M`.sql。如果是单表备份,在库名test后面加上表名即可。对于innodb存储引擎表,可以在不锁定数据库的情况下进行热备份。添加一个选项来执行热备份,--single-transaction,例如:mysqldump--databasestest--single-transaction--flush-logs--master-data=2>/tmp/backup_test_`date+%F-%H-%M`.sql。PS:注意,恢复的时候记得关闭二进制日志:mysql>setsql_log_bin=0;因为这是基于逻辑备份的方式,SQL的执行会插入数据并记录到二进制日志中,因为这件事是恢复的,所以插入的二进制日志基本没有意义,可以关闭以缩短恢复时间.2.2基于LVM快照的备份在物理备份中,有一种基于文件系统(LVM快照)的物理备份,也可以直接用tar等命令打包备份整个数据库目录,但这些只能是备份。存储引擎的备份也不同。MyISAM自动备份到表级别,而InnoDB如果不启用独立表空间,只能备份整个数据库。下面介绍使用LVM的快照功能进行备份。为了安全,先对数据库mysql>FLUSHTABLESWITHREADLOCK加读锁,刷新二进制日志,方便时间点恢复mysql>FLUSHLOGS,然后创建快照卷lvcreate–L1G–s–ndata-snap–p–r/dev/myvg/mydata***进入数据库解除读锁UNLOCKTABLES挂载备份快照卷mount–r/dev/myvg/data-snap/mnt/snap然后执行/mnt/下的文件snap打包备份还原时,关闭mysqld,然后备份binarylog并恢复原备份文件,再通过binarylog还原到出错的时间点(不要忘记临时关闭binarylog)通过binarylog恢复时间点)2010年2012-2012年,亚马逊云环境部署了mysql数据库。他们提供了LVM快照,非常方便快捷。使用lvm快照,亚马逊10G网络下恢复极快。2.3Tar包备份0,准备从数据库进行第一次数据备份,暂时锁定所有表,打开窗口1mysql>flushtableswithreadlock;QueryOK,0rowsaffected(0.00sec)mysql>showmasterstatus;+++++|File|Position|Binlog_Do_DB|Binlog_Ignore_DB||mysql-bin.000003|194554|||1rowinset(0.00sec)PS:这个窗口不能退出,一直保持到tar包结束。--重新打开一个shell窗口,到数据文件目录tar包打开窗口2[root@myfstv_21_11data]#tar-zcvfmysqla1.tar.gzmysqlatar-zcvfmysqla1.tar.gzmysqla压缩完成,切换到窗口1,执行解锁命令mysql>unlocktables;QueryOK,0rowsaffected(0.00sec)mysql>copytar包到另一台mysql库服务器,覆盖数据目录,然后重启mysql数据库服务。2.4percona提供的xtrabackup工具,支持innodb的物理热备份,支持全量备份,增量备份,速度非常快,支持innodb存储导致的不同数据库之间的数据迁移,支持复制模式的slave备份和恢复,为了让xtrabackup支持更多的功能扩展,可以设置一个独立的表空间,开启innodb_file_per_table功能。启用后可以支持单表备份。支持大容量数据在线热备份和恢复时,备份和恢复速度更快。xtrabackup可以实现全量备份、增量备份和部分备份。xtrabackup备份原理xtraBackup是基于InnoDB的crash-recovery功能。它将复制innodb的数据文件。由于表未加锁,复制的数据不一致。恢复时,使用crash-recovery使数据保持一致。InnoDB维护着一个重做日志,也称为事务日志、事务日志,它包含了对innodb数据的所有更改。InnoDB在启动的时候,首先会检查数据文件和事务日志,会做两步:在xtraBackup备份的时候,在不锁表的情况下,一页一页的复制InnoDB的数据。同时,XtraBackup还有一个线程监控事务日志,一旦日志发生变化,就把变化的日志页复制走。为什么急着抄走?由于事务日志文件的大小有限,写满后会从头开始写入,所以新数据可能会覆盖旧数据。在准备过程中,XtraBackup使用复制的事务日志对备份的innodb数据文件执行崩溃恢复。
