MySQL的备份和恢复越来越高了,数据库在信息系统中扮演着非常重要的角色。尤其是一些对数据可靠性要求高的行业,如果发生数据丢失,损失会非常严重。因此,我们绝对有必要为数据库指定一个详细的数据库备份和灾难恢复策略。文档概要:1.数据库备份的一些概念1.数据丢失的原因程序错误、人为错误、操作错误、磁盘故障、灾难(火灾、地震)和盗窃等2.数据备份的类型1)从物理和逻辑角度分类物理备份可分为:冷备份(离线备份):在数据库关闭时进行备份操作热备份(在线备份):在数据库运行时进行备份操作,这种备份方式依赖于数据库日志温文件备份:备份操作在数据库锁定表(不可写但可读)时执行。所谓物理备份就是对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。这种类型的备份非常适合在出现问题时需要快速恢复的大型关键数据库。逻辑备份是数据库逻辑组件(如表和其他数据库对象)的备份。这种类型的备份用于编辑数据值或表结构的小数据量,或在不同的机器架构上重新创建数据。2)从数据库备份策略来看,备份策略可以分为:全量备份:每次对数据进行完整备份,即备份整个数据库、数据库结构和文件结构,并节省备份时的时间完成数据库是差异备份和增量备份的基础。全量备份的备份和恢复操作非常简单方便,但是数据重复很多,会占用很多磁盘空间,备份时间也很长。差异备份:备份自上次完全备份以来修改过的所有文件。备份时间节点是从上次全量备份开始的,备份数据量会越来越大。恢复数据时,只需要恢复上一次的全量备份和最近一次的差异备份。增量备份:只备份自上次完全备份或增量备份后修改过的文件。以上次全量备份或上次增量备份时间为时间点,只备份其间的数据变化,因此备份的数据量小,占用空间小,备份速度快.但是在恢复的时候,需要把上次全量备份到上次增量备份的所有增量备份都恢复。如果中间的备份数据损坏,数据就会丢失。如图:三、常用的备份方式1)需要在数据库关闭时进行物理冷备份,这样可以更好的保证数据库的完整性。一般用于非核心业务,这种业务一般允许终端。物理冷备份的特点是速度快,恢复操作简单。通常通过直接打包数据库文件夹来实现(如:/usr/local/mysql/data)2)专用备份工具mysqldump或mysqlhotcopymysqldump是客户端常用的逻辑备份程序,可以生成一组对象执行以重现原始数据库对象定义和表数据的SQL语句。它可以将一个数据库转储到多个MySQL数据库,备份它们或将它们传输到远程SQL服务器。Mysqldump更通用,因为它可以备份各种表。Mysqlhotcopy是最初由TimBunce编写和贡献的Perl脚本。Mysqlhotcopy仅用于备份MyISAM和ARCHIVE表。只能在UNIX或者linux上运行,因为使用范围很小,这里就不赘述了。3)启用二进制日志增量备份MySQL支持增量备份,增量备份必须启用二进制日志。二进制日志文件为用户提供恢复执行备份点后所做的数据库更改所需的信息。如果进行增量备份,则需要刷新二进制日志。4)通过第三方工具备份PerconaXtraBackup是一款免费的MySQL热备份软件,支持Innodb和XtraDB在线热备份,也支持MySQL表备份,但是MyISAM表的备份必须在表锁的情况下进行。由于内容太多,这里就不一一详解了。有兴趣的可以参考软件的详细介绍了解一下。二、MySQL的全量备份与恢复1.物理冷备份与恢复物理冷备份一般采用tar命令直接打包数据库文件夹,备份前需要关闭mysql服务。1)备份数据库创建/backup目录作为备份数据存放路径,使用tar创建备份文件。整个数据库文件夹备份是完整备份。如下图所示:2)恢复数据库模拟故障,将/usr/local/mysql/data移动到/bak目录下。如下图所示:从备份文件中恢复数据。如下图所示:2.mysqldump备份与恢复通过mysqldump命令,可以将指定的库、表或所有库导出为SQL脚本,方便该命令在不同版本的MySQL服务器上使用。例如,当需要升级MySQL服务器时,可以先使用mysqldump命令导出原来的数据库信息,然后直接导入到升级后的MySQL服务器中。1)备份数据库使用mysqldump命令导出数据时,默认直接在终端显示。如果要保存到文件中,需要结合shell的“>”重定向输出操作。命令格式如下:常用选项:-u:指定用户名;-p:指定密码例:将mysql库中的user表导出为mysql-user.sql,将整个auth库导出为auth。该库导出为all-data.sql文件。如下图所示:2)查看备份文件。mysqldump工具导出的SQL脚本是一个文本文件,其中“/*...*/”部分或者以“--”开头的行为注释信息使用grep、less、cat等文本工具可以查看脚本内容。如下图所示(见auth.sql文件中的内容):3)恢复数据库,使用mysqldump命令导出的SQL备份脚本,恢复时通过mysql命令导入。命令格式为:“mysql[选项][库名][表名]备份路径/备份文件名”。当备份文件只包含表的备份,不包含创建库的语句时,执行导入操作时必须指定库名,目标库必须存在。示例:将备份文件mysql-user.sql中的表导入测试库。如下图所示:如果备份文件中已经包含了完整的库信息,那么在导入操作时就不需要再指定库名了。如下图所示:三、MySQL的增量备份与恢复1、增量备份概述1)增量恢复不同于全量备份的特点。增量备份没有重复数据,备份量不大,时间短;但是它的恢复比较麻烦,需要上次的全量备份和全量备份之后的所有增量备份才能恢复,而且所有的增量备份都要一个一个的逆向恢复。MySQL不提供直接增量备份的方法。可以使用MySQL提供的二进制日志(binarylogs)间接实现增量备份。2)MySQL二进制日志备份的意义二进制日志保存了所有更新或可能更新数据库的操作。二进制日志在MySQL服务器启动后开始记录,并在文件达到二进制日志设置的最大值或接收到flushlogs命令后重新创建一个新的日志文件,生成一系列二进制文件,并将这些日志保存在安全的地方placeintime可以完成一段时间的增量备份。使用max_binlog_size配置项设置二进制日志文件的最大值。如果二进制文件的大小超过max_binlog_size,它会自动创建一个新的二进制文件。要对MySQL进行增量备份,首先要开启二进制日志功能。MySQL的二进制日志功能有多种开启方式。最常用的方法是在MySQL配置文件的mysql项下添加“log-bin=/filepath/”。文件名”前缀,如log-bin=/usr/local/mysql/mysql-bin,然后重启MySQL服务,就可以查看指定路径下的二进制日志文件(如下图)。默认情况下,二进制日志文件扩展名是一个六位数字,比如mysql-bin.000001。2.增量恢复在维护数据库的时候,可能会因为各种原因导致数据丢失,比如:认为SQL语句被破坏,系统故障发生在下一次全量备份之前,数据库主从架构的master数据库数据失效等。因此,常用的增量恢复方式有三种:一般恢复、基于位置的恢复、时间点恢复1)一般恢复:恢复所有备份的二进制日志内容命令格式:"mysqlbinlog[--no-defaults]Incrementalbackupfile|mysql-uusername-p"2)Location-basedrecovery:数据库管理员在操作数据库时可能同时有错误和正确的操作,location-basedrecovery可以更准确命令格式:Format1:恢复数据到指定位置"mysqlbinlog--stop-position='operationid'binarylog|mysql-uusername-ppassword"格式二:从指定位置恢复"mysqlbinlog--start-position='operationid'binarylog|mysql-uusername-ppassword"3)时间点恢复:数据恢复是通过发生错误时跳过某个时间点来实现的,时间点恢复分为三种情况A.恢复命令格式从o开始f日志到某个时间点:"mysqlbinlog[--no-defaults]--stop-datetime='year-month-dayhour:minute:second'binarylog|mysql-u用户名-p密码"B.从某个时间点到日志结束的恢复命令格式:"mysqlbinlog[--no-defaults]--start-datetime='年-月-日时:minute:second'二进制日志|mysql-uusername-ppassword"C.从某时间点恢复到某时间点的命令格式:"mysqlbinlog[--no-defaults]--start-datetime='年-月-日时:分:seconds'--stop-datetime='year-month-dayhour:minute:second'二进制日志|mysql-uusername-ppassword》增量恢复的操作可能会笼统的总结到这里,需要通过一个案例来理解,在下篇文档中,我会总结一个关于增量备份和恢复的案例,让我们一起仔细看看。
