MySQL完全备份与恢复
随着自动化办公与电子商务的不断扩展,企业对于信息系统的依赖性越来越重要,而数据库在信息系统中担任着非常重要的角色。尤其一些对数据库可靠性要求非常高的行业,例如银行,证券,电信等,如果发生意外宕机或数据丢失,其损失是非常重要的。为此数据库管理员必须针对具体的业务要求定制详细的数据库备份与灾难恢复的策略,并通过模拟故障对每种可能的情况进行严格的测试。而保障数据的可靠性。
一、数据备份的重要性
备份的主要目的是灾难恢复,备份还可以测试应用,回滚数据修改,查询历史数据,审计等。我们将从生产运维的角度了解备份恢复的分类与方法。在企业中数据的价值至关重要,数据保障了企业的业务的运行,因此数据的安全性及可靠性是运维的重中之重,任何数据的丢失都有可能会对企业产生严重的后果。造成数据丢失的原因如下:
程序错误
人为错误
运算失败
磁盘故障
灾难(如火灾、地震)和盗窃
二、数据库备份的类型
2.1、 从物理与逻辑的角度
备份可以分为物理备份和逻辑备份。
物理备份:对数据库操作系统的物理文件(如数据文件、日志文件等)的备份。物理备份又可分为脱机备份(冷备份)和联机备份(热备份)。这种类型的备份适用于出现问题时需要快速恢复的大型重要数据库。
1、冷备份:是在关闭数据库的时候进行的
2、热备份:数据库处于运行状态,这种备份方法依赖于数据库的日志文件
3、 温备份:数据库锁定表格(不可写入但可读)的状态下进行的
逻辑备份:对数据库逻辑组件(如表等数据库对象)的备份,表示为逻辑数据库结构create database、createtable等语句)和内容(insert 语句或分割文本文件)的信息。这种类型的备份适用于可以编辑数据值或表结构较小的数据量,或者在不同机器体系结构上重新创建数据。
2.2从数据库的备份策略角度
备份可分为完全备份、差异备份和增量备份。
完全备份:每次对数据进行完整的备份,即对整个数据库的备份、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础。
优点:备份与恢复操作简单方便.
缺点:数据存在大量的重复;占用大量的空间;备份与恢复时间长。
差异备份:备份那些自从上次完全备份之后被修改过的所有文件,备份的时间起点是从上次完整备份起,备份数据量会越来越大。恢复数据时,只需恢复上次的完全备份与最近的一次差异备份。
增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。以上次完整备份或上次的增量备份的时间为时间点,仅备份这之间的数据变化,因而备份的数据量小,占用空间小,备份速度快。但恢复时,需要从上一次的完整备份起到最后一次增量备份依次恢复,如中间某次的备份数据损坏,将导致数据的丢失。
2.3 常见的备份方法(备份工具的介绍)
MySQL 数据库的备份可以采用很多种方式,如直接打包数据库文件(物理冷备份),专用备份工具(mysqldump),二进制日志增量备份,第三方工具备份等。
1)物理备份。
物理冷备份时需要在数据库处于关闭状态下,能够较好的保证数据库的完整性。物理冷备份以用于非核心业务,这类业务都允许中断,物理冷备份的特点就是速度快,恢复时也是最为简单的,通过直接打包数据库文件夹/usr/local/mysql/data)来实现备份。
2)专用备份工具 mysqldump 或 mysqlhotcopy
mysqldump_和 mysqlhotcopy都可以做备份。mysqldump是客户端常用逻辑备份程序,能够产生一组被执行以再现原始数据库对象定义和表数据的SQL语句。它可以转储一个到多个MySQL数据库,其进行备份或传输到远程SQL服务器。mysqL更为通用,因为它可以备份各种表。mysqlhotcopy仅适用于某些存储引擎。mysqlhotcopy是由 Tim Bunce最初编写和贡献的Perl脚本。mysqlhotcopy仅用于备份MylSAM和ARCHIVE表。只能运行在 Unix 或 Linux操作系统上。
3)通过启用二进制日志(binary logs->binlog)进行增量备份
MySQL支持增量备份,进行增量备份时必须启用二进制日志。二进制日志文件为用户提供复制。对执行备份点后进行的数据库更改所需的信息进行备份。如果进行增量备份(包含上次完全备份或增量备份以来发生的数据修改),需要刷新二进制日志。二进制日志中会记录MySQL运行过程中用户执行过的对数据产生变更的语句。
4)通过第三方工具备份
Percona XtraBackup 是一个免费的 MySQL热备份软件,支持在线备份 Innodb和XtraDB,也可以支持MySQL 表备份,不过MyISAM 表的备份要在表锁的情况进行。
Percona XtraBackup主要的工具:xtrabackup、innobackupex、xbstream。
xtrabackup:是一个编译了的二进制文件,只能备份Innodb/Xtradb数据文件。
innobackupex:是一个封装了 xtrabackup_的 Perl 脚本,除了可以备份Innodb/Xtradb之外,还可以备份MyISAM。
MySQL的日志种类:
错误日志(只有这个是默认开启的)
二进制日志
中继日志
查询日志(一般不会开,在做调试时会开)
慢查询日志(SQL性能优化)
事务日志
xtrabackup工具可以单独使用,但推荐使用innobackupx来进行备份,因为其本身已经包含了xtrabackup的所有功能。
xtrabackup 是基于Innodb的灾难恢复功能进行设计的,备份工具复制Innodb的数据文件,但是由于不锁表,这样复制出来的数据将不一致,!nnodb维护了一个重要日志,包含Innodb数据的所有改动情况。在xtrabackup 备份 Innodb的数据同时,xtrabackup还有另外一个线程用来监控重做日志,一旦日志发生变化,就把发生变化的日志数据复制走。这样就可利用重做日志做灾难恢复了。
以上是备份过程,如果我们需要恢复数据,则在准备阶段,xtrabackup就需要使用之前复制的重做日志对备份出来的!nnodb数据文件进行灾难恢复,此阶段完成之后,数据库就可以进行重建还原了。
Percona Xtrabackup 对MyISAM 的复制是按顺序进行的,先锁定表,然后复制,再解锁表。
思考类问题:
公司数据库的总数据量多大?
每天的增长量多大?
备份的策略?
备份数据量?
备份的时长?