MySQL数据库备份与恢复 - 山楂树之恋v1
MySQL数据库备份与恢复
MySQL数据库备份与恢复
1、备份方式
- 逻辑备份(文本表示:SQL 语句)
- 物理备份(数据文件的二进制副本)
- 基于快照的备份
- 基于复制的备份
- 增量备份(刷新二进制日志)
2、备份类型
2.1 热备份
这些动态备份在读取或修改数据的过程中进行,很少中断或者不中断传输或处理数据的功能。使用热备份时,系统仍可供读取和修改数据的操作访问。
2.2冷备份
这些备份在用户不能访问数据时进行,因此无法读取或修改数据。这些脱机备份会阻止执行任何使用数据的活动。这些类型的备份不会干扰正常运行的系统的性能。但是,对于某些应用程序,会无法接受必须在一段较长的时间里锁定或完全阻止用户访问数据。
2.3温备份
这些备份在读取数据时进行,但在多数情况下,在进行备份时不能修改数据本身。这种中途备份类型的优点是不必完全锁定最终用户。但是,其不足之处在于无法在进行备份时修改数据集,这可能使这种类型的备份不适用于某些应用程序。在备份过程中无法修改数据可能产生性能问题。
3、物理备份
物理备份由存储数据库内容的目录和文件的原始副本组成。这种类型的备份适用于需要在发生问题时快速恢复的大型重要数据库。
3.1物理备份的特点
- 备份由数据库目录和文件的精确副本组成。通常这是全部或部分MySQL数据目录的副本。
- 物理备份方法比逻辑更快,因为它们只涉及文件复制而无需转换。
- 输出比逻辑备份更紧凑。
- 由于备份速度和紧凑性对繁忙,重要的数据库非常重要,MySQL企业备份产品可以执行物理备份。份的特点:
- 备份和恢复从整个数据目录级别到单个文件级别的粒度范围。这可能会也可能不会提供表级粒度,具体取决于存储引擎。例如, InnoDB表可以分别放在一个单独的文件中,或与其他InnoDB表共享文件存储 ; 每个 MyISAM表格唯一对应一组文件。
- 除数据库外,备份还可以包含任何相关文件,如日志或配置文件。
- 来自MEMORY表的数据很难以这种方式备份,因为它们的内容不存储在磁盘上。(MySQL企业备份产品具有可以MEMORY在备份过程中从表中检索数据的功能。)
- 备份只能移植到具有相同或相似硬件特性的其他机器。
- 备份可以在MySQL服务器不运行时执行。如果服务器正在运行,则需要执行适当的锁定,以便服务器在备份期间不更改数据库内容。MySQL Enterprise Backup会自动为需要它的表执行此锁定。
- 物理备份工具包括 mysqlbackup MySQL企业备份的 InnoDB或任何其他桌,文件系统级的命令(如CP, SCP,焦油, rsync的),或mysqlhotcopy的 对MyISAM表。
- 为了恢复:
- MySQL企业备份还原InnoDB 和其他备份的表。
- ndb_restore恢复 NDB表格。
- 可以使用文件系统命令 将文件系统级别或使用mysqlhotcopy复制的文件 复制回原来的位置。
4、逻辑备份
逻辑备份保存表示为逻辑数据库结构(CREATE DATABASE, CREATE TABLE语句)和内容(INSERT语句或分隔文本文件)的信息。这种类型的备份适用于可能编辑数据值或表结构的较小数据量,或者在不同的计算机体系结构上重新创建数据。
4.1逻辑备份的特点
- 备份是通过查询MySQL服务器来获得数据库结构和内容信息。
- 备份比物理方法慢,因为服务器必须访问数据库信息并将其转换为逻辑格式。如果输出写入客户端,服务器也必须将其发送到备份程序。
- 输出大于物理备份,特别是以文本格式保存时。
- 在服务器级别(所有数据库),数据库级别(特定数据库中的所有表)或表级别都可以使用备份和还原粒度。无论存储引擎如何,情况都是如此。
- 备份不包括日志或配置文件,或其他不属于数据库的与数据库相关的文件。
- 以逻辑格式存储的备份与机器无关并且非常便携。
- 逻辑备份是在MySQL服务器运行的情况下执行的。服务器没有脱机。
- 逻辑备份工具包括mysqldump 程序和SELECT … INTO OUTFILE语句。这些适用于任何存储引擎,甚至MEMORY。
- 要恢复逻辑备份,可以使用mysql客户端处理SQL格式的转储文件。要加载分隔文本文件,请使用 LOAD DATA INFILE语句或 mysqlimport客户端。
5、备份工具
1.mysqldump
- mysql原生自带很好用的逻辑备份工具
2.mysqlbinlog
- 实现binlog备份的原生态命令
3.xtrabackup
- precona公司开发的性能很高的物理备份工具
5.1mysqldump介绍
5.1.1语法
1 2 3 |
|
5.1.2参数
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
5.2使用
5.2.1 全库备份
1 2 3 |
|
5.2.2 备份多个表
1 2 3 4 |
|
5.2.3 分库备份:for循环
1 2 3 4 5 6 7 8 |
|
- 例子:每天晚上0点备份数据库
1 2 3 4 5 6 |
|
5.2.4 指定备份的位置
1 2 3 |
|
5.2.5 锁表备份
- 锁表:适合所有引擎(myisam,innodb)
1 2 3 |
|
- 基于事务引擎:不用锁表就可以获得一致性的备份.
- 生产中99% 使用innodb事务引擎.
- ACID四大特性中的隔离性
5.2.6 压缩备份:
1 2 3 4 |
|
5.2.7 innodb引擎的备份命令如下:
1 2 3 |
|
5.2.8 扩展
- 例子1:全库中全表的备份语句拼接
1 |
|
- 例子2:所有数据库备份的语句拼接
1 2 |
|
6、使用Mysqldump备份进行恢复实践
- 备份innodb引擎数据库oldboy并压缩:
1 |
|
- 人为删除oldboy数据库:
1 2 |
|
- 恢复数据库:
1 2 3 4 |
|
- 验证数据:
1 |
|
7、Mysqldump+Mysqlbinlog企业级增量备份恢复实战
-
背景环境:
-
正在运行的网站系统,mysql数据库,数据量25G,日业务增量10-15M。
-
备份方式:
-
每天23:00点,计划任务调用mysqldump执行全备脚本
-
故障时间点:
-
上午10点,误删除了一个表
如何恢复?
-
思路
-
1.使用测试库,恢复全备 使用source
-
2.恢复此表从23:00到10点之间的binlog
-
2.1截取23:00到10点这段binlog在测试库恢复
-
2.2导出删除表
-
3.将删除的表进行恢复 到生产库
-
注意
-
在生产库环境中,出现这种误操作,数据损坏,那么尽量避免对数据库进行进一步“伤害“了,iptables 3306端口关闭掉 ,skip-network mysql自带的放置网络连接的方法,但是需要加入配置文件重启实例,等到恢复完成,再放开连接。
8、mysqldump企业级备份策略设计与实践
- 全量备份概念
-
全量数据就是数据库中所有的数据(或某一个库的全部数据);
-
全量备份就是把数据库中所有的数据进行备份。
-
mysqldump会取得一个时刻的一致性数据.
-
- 增量备份
-
增量数据就是指上一次全量备份数据之后到下一次全备之前数据库所更新的数据
-
对于mysqldump,binlog就是增量数据.
-
- 设计备份策略
-
设计备份脚本和计划任务
-
定期的恢复演练
-
9、MySQL物理备份工具xtrabackup
9.1安装
1 2 3 4 |
|
9.2备份命令
1 2 |
|
10、MySQL物理备份工具xtrabackup案例实战
1、全备备份
1 2 3 4 |
|
2、恢复数据前的准备(合并xtabackup_log_file和备份的物理文件)
1 |
|
3、停库
1 2 |
|
4、破坏数据
1 2 |
|
5、恢复
1 2 3 4 5 6 |
|
6、启动
1 2 3 4 |
|
11、Xtrabackup备份
11.1 介绍
1、特点
物理备份工具,在同级数据量基础上,都要比逻辑备份性能高特别是在数据量比较大的时候,体现的更价明显
2、备份方式
- 拷贝数据文件
- 拷贝数据页
3、xtrabackup 参数说明(xtrabackup –help )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
11.2 备份原理(innodb)
1、对于innodb表,可以实现热备
-
(1)在数据还有修改操作的时刻,直接将数据文件中的数据页备份,此时备份走的数据对于当前mysql来讲是不一致的
-
(2)将备份过程中的redo和undo一并备走
-
(3)为了恢复的时候,只要将保证备份出来的数据页LSN能和redo的LSN匹配,那么数据就是一致的。需要做redo和undo的应用。(查看有没有commit标记,有可以直接写入数据,没有可以回滚数据达成一致性)
2、对于myisam表,实现自动锁表拷贝文件。
可以直接锁表,然后就不能做任何修改了,实现了备份
3、增量备份
(1)起点问题
-
基于上一次备份进行增量
-
redo默认情况下是一组两个文件并且有固定大小。是一种轮询使用方式,不是永久的,有可能随时被覆盖。
(2)备份的是什么
-
1、可以使用binlog作为增量
-
2、自带增量备份,基于上次备份后变化的数据页,还要在备份过程中的redo和undo的变化
(3)怎么备份
1 2 3 4 5 |
|
(4)怎么恢复
1 2 3 4 5 |
|
(5)备份策略
1 2 3 4 5 6 7 8 9 |
|
12、Xtrabackup企业级增量备份实战
背景:
某大型网站,mysql数据库,数据量500G,每日更新量100M-200M
备份策略:
xtrabackup,每周六1:00进行全备,周一到周五及周日1:00进行增量备份。
故障场景:
周三下午2点出现数据库意外删除表操作。
如何恢复?
-
思路:
-
1.断开所有应用?
-
2.检查备份是否存在
-
3.怎么快速、安全恢复
具体流程
-
1、准备上周六全备,并–apply-log —redo-only
-
2、合并增量,周日
案例模拟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|
问题
恢复窗口要多长时间?——预计3个小时
数据很大,但是只是误删除了一张表,那么就只需要把这个表恢复了就可以了。
1 2 3 4 5 6 |
|