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

一、数据库备份的目的

做灾难恢复:对损坏的数据进行恢复和还原

需求改变:因需求改变而需要把数据还原到改变以前

测试:测试新功能是否可用


二、备份需要考虑的问题

可以容忍丢失多长时间的数据;

恢复数据要在多长时间内完成;

恢复的时候是否需要持续提供服务;

恢复的对象,是整个库,多个表,还是单个库,单个表。


三、备份的类型

3.1、根据是否需要数据库离线

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

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

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

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

MyISAM

热备 ×

温备 √

冷备 √

InnoDB

热备 √

温备 √

冷备 √

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

3.2、根据备份数据或文件

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

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

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

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

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

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


四、备份和恢复的实现方式

a、利用select into outfile实现数据的备份与还原。

b、利用mysqldump工具对数据进行备份和还原

c、利用lvm快照实现几乎热备的数据备份与恢复

d、基于Xtrabackup做备份恢复。

优势:

①、快速可靠的进行完全备份

②、在备份的过程中不会影响到事务

③、支持数据流、网络传输、压缩,所以它可以有效的节约磁盘资源和网络带宽。

④、可以自动备份校验数据的可用性。

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

4.1、mysql按照备份恢复方式分为逻辑备份和物理备份

逻辑备份是备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现。

物理备份就是备份数据文件了,比较形象点就是cp下数据文件,但真正备份的时候自然不是的cp这么简单。

这2种备份各有优劣,一般来说,物理备份恢复速度比较快,占用空间比较大,逻辑备份速度比较慢,占用空间比较小。

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

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

4.2、是完全备份呢,还是部分备份?

物理备份一般就是通过tar,cp等命令直接打包复制数据库的数据文件达到备份的效果

逻辑备份一般就是通过特定工具从数据库中导出数据并另存备份(逻辑备份会丢失数据精度)


五、mysqldump备份工具总结

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

5.1、mysqldump简介

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

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

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

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

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

5.2、mysqldump优缺点

mysqldump的优点:

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

mysqldump的缺点:

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

5.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文件

Mysql数据库备份和恢复总结相关推荐

  1. java写的MySQL数据库备份和恢复代码:

    1.MySQL数据库备份和恢复,java代码实现:详情见下面: package com.spring.util; import java.io.BufferedReader; import java. ...

  2. javaweb实现mysql备份功能_java web 实现mysql 数据库备份、恢复

    如题,由于项目需要,研究并实现了java web的 mysql数据库的备份.下载.恢复功能,中间遇到一些问题,耗费了不少时间,下面让我一一道来: 背景介绍: window 7系统 mysql 5.7 ...

  3. MySQL数据库备份和恢复方案小结

    这两天在调研MySQL数据库的备份和恢复方案,备份对象是对大量Innodb表,或者加上少量的MyISAM表. InnoDB备份常见问题: 文件一致性:数据文件.缓存.日志文件必须保持严格一致.加锁的方 ...

  4. Linux下Mysql数据库备份和恢复全攻略

    [IT168 专稿]很多用户都有过丢失宝贵数据的经历,随着大量的数据被存入到MySQL数据库中,再加上错误地使用DROP DATABASE命令.系统崩溃或对表结构进行编辑等操作,都可能酿成灾难性的损失 ...

  5. mysql设置停止二进制文件的操作_window下使用二进制文件对mysql数据库备份及恢复(再现用户操作)...

    1,查看二进制日志文件是否启用 mysql>show variables like 'log_bin'; 如果未启用,则启用二进制文件(默认是关闭的 ) 2,在mysql的配置文件[mysqld ...

  6. mysql数据库备份和恢复

    命令备份:mysqldump   dump   泵   数据从数据库抽取  ---->硬盘中保存 xxx.sql mysqldump 用户名 和 密码  声明需要备份的数据库名称  databa ...

  7. mysql数据库备份及恢复命令mysqldump,source的用法

    还原一个数据库:mysql -h localhost -u root -p123456 www<c:/www.sql 备份一个数据库:mysqldump -h localhost -u root ...

  8. windows系统mysql5.7 重装以及mysql数据库备份和恢复

    mysql 服务由于改错配置无法启动,频繁出现"MySQL服务正在启动或停止中,请稍候片刻后再试一次"错误信息无法启动.看了网上很多修复方法,感觉都还是比较繁琐,重置也各种繁琐,索 ...

  9. mysql 恢复数据库 source_mysql数据库备份及恢复命令 mysqldump,source的用法 | 很文博客...

    mysql数据库备份及恢复命令 mysqldump,source的用法,需要的朋友可以参考下. 还原一个数据库:mysql -h localhost -u root -p123456 www d:\w ...

最新文章

  1. 一篇文章搞懂人脸识别的十大过程
  2. 尚硅谷spring和spring boot笔记_手机标准内存达12G,比笔记本电脑还高!可为何系统总能占一半?...
  3. 【SSM】第一个SpringMVC入门示例
  4. 9.Tornado下的一个简易Blog--2013-05-21
  5. android学习总结
  6. Android Studio Problems
  7. WCF与AJAX编程开发实践(1):AJAX基础概念和纯AJAX示例
  8. javaSE-基础篇-经典赋值:两变量值的交换
  9. 挑战练习14.8 删除crime 记录
  10. C#绘制条码CODE39和CODE39全码模式
  11. 初中节点法分析电路_初三物理电路图解题思路:电路简化原理
  12. 【高数】收敛关系:级数与部分和、级数与数列、数列与子数列、级数与子级数
  13. 往linux内核添加ch341,linux 4.1 usb驱动之usb_serial芯片ch341
  14. 用剪映将无字幕的英文视频翻译成中文字幕(附教程+软件)
  15. CRM系统的营销工具亮点
  16. MinIO: Console endpoint is listening on a dynamic port , please use --console-address
  17. 【转载】linux修改文件的所有者权限[root权限更改为用户权限]
  18. 传感器与检测技术基础 复习提纲 考试不挂科专用版
  19. 基层管理者项目管理二三事
  20. CVE-2021-1647 Windows Defender缓冲区溢出导致的任意代码执行漏洞复现

热门文章

  1. Android App 用Charles抓包
  2. (三)pandas开源课程学习笔记——探索性数据分析
  3. HTML table行距的改变方法
  4. windows环境安装seata
  5. 中小企业搭建混合云,服务器如何选?
  6. 文科生学Python,为了什么?
  7. Rundeck部署安装
  8. 蓝桥杯 数字三角形
  9. Have succeeded in doing 成功地做了
  10. Unity —— Vector3