Mysql数据库备份和恢复总结

前言:数据库备份是我们服务端开发经常遇到的问题。为了用户体验,我们要尽量减少服务器备份时的损失。所以备份时间尽量选在半夜,而且要尽量减少备份所用的时间。

一、数据库备份的目的
做灾难恢复:对损坏的数据进行恢复和还原
需求改变:因需求改变而需要把数据还原到改变以前
测试:测试新功能是否可用

二、备份需要考虑的问题
可以容忍丢失多长时间的数据;
恢复数据要在多长时间内完;
恢复的时候是否需要持续提供服务;
恢复的对象,是整个库,多个表,还是单个库,单个表。

三、备份的类型
1、根据是否需要数据库离线

冷备份(cold backup):指的是当数据库进行备份时, 数据库不能进行读写操作, 即数据库要下线;(需要关mysql服务)

温备份(warm backup):指的是当数据库进行备份时, 数据库的读操作可以执行, 但是不能执行写操作

热备份(hot backup):指的是当数据库进行备份时, 数据库的读写操作均不是受影响

MySQL中进行不同方式的备份还要考虑存储引擎是否支持:

    MyISAM

 热备 ×

 温备 √

 冷备 √

    InnoDB

 热备 √

 温备 √

 冷备 √

注:
a、这种类型的备份,取决于业务的需求,而不是备份工具
b、MyISAM不支持热备,InnoDB支持热备,但是需要专门的工具

2、根据备份数据或文件
物理备份:直接备份数据文件
优点:备份和恢复操作都比较简单,能够跨mysql的版本,恢复速度快,属于文件系统级别的
建议:不要假设备份一定可用,要测试mysql>check tables;检测表是否可用
逻辑备份: 备份sql语句
优点:恢复简单、备份的结果为ASCII文件,可以编辑与存储引擎无关可以通过网络备份和恢复
缺点:备份或恢复都需要mysql服务器进程参与备份结果占据更多的空间,浮点数可能会丢失精度 还原之后,缩影需要重建

3、根据要备份的数据集合的范围

(1)完全备份:每次对数据进行完整的备份。可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多的时间和空间,所以,做一次完全备份的周期要长些。

(2)差异备份:备份那些自从上次完全备份之后被修改过的文件,只备份数据库部分的内容。它比最初的完全备份小,因为只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。

(3)增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。

建议的恢复策略:
完全+增量+二进制日志
完全+差异+二进制日志

4、备份和恢复的实现

a、利用select into outfile实现数据的备份与还原。
b、利用mysqldump工具对数据进行备份和还原
c、利用lvm快照实现几乎热备的数据备份与恢复
d、基于Xtrabackup做备份恢复。
优势:
①、快速可靠的进行完全备份
②、在备份的过程中不会影响到事务
③、支持数据流、网络传输、压缩,所以它可以有效的节约磁盘资源和网络带宽。
④、可以自动备份校验数据的可用性。

总结:我们在考虑完数据在备份时, 数据库的运行状态之后。还需要考虑对于MySQL数据库中数据的备份方式。

mysql按照备份恢复方式分为逻辑备份和物理备份:
 逻辑备份是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现。
物理备份就是备份数据文件了,比较形象点就是cp下数据文件,但真正备份的时候自然不是的cp这么简单。
这2种备份各有优劣,一般来说,物理备份恢复速度比较快,占用空间比较大,逻辑备份速度比较慢,占用空间比较小。

所以, 为了在数据丢失之后能够恢复数据, 我们就需要定期的备份数据, 备份数据的策略要根据不同的应用场景进行定制, 大致有几个参考数值, 我们可以根据这些数值从而定制符合特定环境中的数据备份策略。

恢复数据需要多长时间? 当然是希望越快越好。

是完全备份呢?还是部分备份。

物理备份一般就是通过tar,cp等命令直接打包复制数据库的数据文件达到备份的效果
逻辑备份一般就是通过特定工具从数据库中导出数据并另存备份(逻辑备份会丢失数据精度)

二、mysqldump备份工具总结

工作中比较常用的备份工具就是mysqldump和xtrabackup。

1、mysqldump简介

mysqldump是mysql自带的逻辑备份工具。

它的备份原理是,通过协议连接到mysql数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert语句,当我们需要还原这些数据时,只要执行这些insert语句,即可将对应的数据还原。

a、mysqldump的备份过程属于逻辑备份,备份速度、恢复速度与物理备份工具相比较慢,而且mysqldump备份的过程是串行化的,不会并行的进行备份,如果想要并行备份,可以使用mydumper,但是此处我们不考虑这些,只考虑mysqldump,当数据量较大时,一般不会使用mysqldump进行备份,因为效率较低。

b、mysqldump对innodb存储引擎支持热备,innodb支持事务,我们可以基于事务通过mysqldump对数据库进行热备。

c、mysqldump对myisam存储引擎只支持温备,通过mysqldump对使用myisam存储引擎的表进行备份时,最多只能实现温备,因为在备份时会对备份的表请求锁,当备份完成后,锁会被释放。

2、mysqldump优缺点

mysqldump的优点:

可以直接使用文本处理工具处理对应的备份数据,因为备份数据已经被mysqldump转换为了对应的insert语句,所以,我们可以借助文件系统中的文本处理工具对备份数据进行直接处理。

mysqldump的缺点:

当数据为浮点类型时,会出现精度丢失

3、初识mysqldump

mysqldump是一个客户端工具,所以当mysqldump连接到数据库时,也会读取mysql数据库的配置文件,加载跟客户端相关的配置。

Linux下:

(1)导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径)

如果备份数据库时mysqldump使用了-B参数,那么就无需创建数据库了,因为备份时备份的数据库里已经包含了创建数据库的命令。

a、导出数据和表结构:
mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql
#/usr/local/mysql/bin/   mysqldump -uroot -p abc > abc.sql
敲回车后会提示输入密码

b、只导出表结构
mysqldump -u用户名 -p密码 -d 数据库名 > 数据库名.sql
#/usr/local/mysql/bin/   mysqldump -uroot -p -d abc > abc.sql

注:/usr/local/mysql/bin/  --->  mysql的data目录

(2)Linux导入数据库
a、首先建空数据库
mysql>create database abc;

b、导入数据库
(1)选择数据库
mysql>use abc;
(2)设置数据库编码
mysql>set names utf8;
(3)导入数据(选择要导入的数据库备份文件,进行导入就可以了)
mysql>source /home/abc/abc.sql;

参考链接:

mysql导入导出sql文件

猜你喜欢

转载自blog.csdn.net/CSDN2497242041/article/details/106894631