数据库对企业来说最重要的莫过于其中的数据,所以做好数据库的备份是一个不可或缺的工作。数据库及时备份可以帮助我们在数据库出现异常宕机时及时的使用备份数据进行恢复工作,将因为数据库宕机产生的影响降低到最小。所以,本篇文章主要数据库数据备份与恢复进行介绍。由于MyISAM存储引擎中备份数据是将表保存到单独的文件所以比较简单,所以这里我主要针对InnoDB存储引擎介绍备份与恢复机制。

全量备份与增量备份的区别

全量备份:

每次备份都进行全量备份,所以如果数据量大的情况下,进行全量备份会消耗较多的时间且对数据库压力比较大,但是由于全量备份每次都是最新的备份,所以恢复数据的时候效率更快。

增量备份:

只备份每天增量的日志,所以备份时效率更高对数据库压力也较小,但是恢复回复数据时就需要从全量备份日志加上每天的增量日志去进行恢复数据,所以恢复数据效率比较低。

Mysql数据备份大致分为2类:物理备份与逻辑备份。本篇文章我们先看看物理备份。

物理备份

物理备份分为热备份和冷备份。

冷备份

冷备份是最简单的备份方式,其实就是在备份数据时停掉Mysql服务,然后将data目录下的数据文件拷贝到备份地址进行存储。当Mysql出现宕机时,将备份文件拷贝到data目录替换即可完成数据恢复。但是一般情况下不使用冷备份的方式,因为生产环境下一般都有业务在跑,所以不可能每次备份都停止Mysql服务去进行备份工作。

热备份

快照备份

物理备份一般还有一种方式就是热备份,热备份相比于冷备份的好处在哪呢?热备份可以在Mysql服务开启的情况下执行备份操作,只是在热备份时会添加只读这类型的限制。热备份第一种介绍的备份方式就是快照备份。快照备份其实就是将所有的数据文件放置在同一个分区,然后对这个分区进行快照备份,但是快照备份只能存储在本地磁盘,如果本地磁盘出现故障,则可能出现快照备份数据的丢失。正是由于可能存在磁盘损坏导致数据丢失的情况下,所以生产环境下一般也不会使用热备份去备份数据。

xtrabackup备份

热备份另一种方式就是xtrabackup工具备份。xtrabackup工具2.3版本以下无法备份MyISAM存储引擎,它可以备份5.1到5.7之间版本的InnoDB存储引擎的数据。xtrabackup工具是基于InnoDB存储引擎的crash-recovery功能,先复制物理文件,再根据log进行恢复,保证数据一致性。接下来我们可以一起看看xtrabackup工具如何进行备份工作。

  • 使用wget下载xtrabackup工具并使用yum命令安装:

  • 使用xtrabackup备份,命令为:

  • xtrabackup --backup --user=root --password='123' --target-dir=/backups/**

可以看到,全量备份完成会显示当前备份的lsn号,下次进行增量备份就只会备份lsn大于此页的数据。我们可以查看下我们刚才全量备份的数据:

可以发现目录刚好和我们的数据库一一对应,每个文件夹中实际上就是对应数据库的备份数据。我们可以注意到根目录下还有几个文件,接下来我们来看下这几个文件的具体用途:

  • ibdata1:共享表空间文件,创建数据库时如果开启innodb_file_per_table参数,才可以使用xtrabackup工具备份单个数据库,否则默认都是全部数据库都进行备份。

  • backup-my.cnf:此文件存储一些my.cnf的有关于备份的配置信息。

  • xtrabackup_binlog_info:这个文件是用来记录备份开始时二进制文件的位置。

  • xtrabackup_checkpoints:这个文件记录备份的一些基本信息:比如备份开始和结束的lsn号,是全量备份还是增量备份等信息。

  • xtrabackup_info:这个文件记录备份的概要信息。

  • xtrabackup_logfile:备份的日志。

  1. 将经过backup的数据进行prepare得到完整可用的数据,使用命令:
  • xtrabackup --prepare --use-memory=100M --target-dir=/backups

这里对命令几个参数做下解释:
--use-memory:该参数不带则默认prepare操作占用100M内存,如果数据量大我们可以将use-memory指定更大的内存加快prepare工作。

--target-dir:备份文件所在路径,我是放在/backups/。

  1. 恢复数据,恢复数据必须保证mysql中data目录不能存在任何数据,否则会报错。恢复数据实际上就是将备份数据拷贝到Mysql的data目录下,恢复数据使用--copy-back参数。使用命令:
  • xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backups/

这里对命令几个参数做下解释:

--datadir:--datadir有两个方法进行配置:可以在my.cnf文件中指定,如果my.cnf文件没有指定该参数则恢复文件时必须指定--datadir参数。
--target-dir:备份文件所在路径,我是放在/backups/。

接下来演示下如何进行数据恢复:
停止数据库服务并且清掉data目录下所有数据:
systemctl stop mysqld.service && rm -rf /var/lib/mysql/*

恢复数据:

  • xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backups/

最后,重启数据库:

  • systemctl start mysqld.service

到这里备份数据就成功进行恢复到数据库中了。当然更常用的备份方式其实是逻辑备份,使用Mysql自带mysqldump工具进行备份操作,关于逻辑备份的知识将在下一篇进行讲解。

欢迎关注公众号:程序猿周先森。

欢迎关注公众号:程序猿周先森。文章原创于微信公众号,本平台不定时更新。

Mysql备份与恢复(1)---物理备份的更多相关文章

  1. Mysql备份与恢复(2)---逻辑备份

    数据库及时备份可以帮助我们在数据库出现异常宕机时及时的使用备份数据进行恢复工作,将因为数据库宕机产生的影响降低到最小.上一篇针对使用xtrabackup工具进行物理备份和数据恢复做了一个详细讲解,本篇 ...

  2. Data Base mysql备份与恢复

    mysql  备份与恢复 为什么要备份: 由于系统使用到了MySQL 数 据库,所以每天的工作,就设计到了MySQL数据库的备份问题.但如果每天手工来做MySQL数据库的定时备份,工作量不说,时间还不 ...

  3. MYSQL的备份与恢复--物理备份xrabackup

    目录 1.数据库完整备份与恢复 (1)环境准备 (2)完全备份恢复流程 2.数据库增量备份与恢复 (1)增量和差异概述 (2)增量备份和恢复 3.数据库差异备份与恢复 4.简单命令进行物理备份 5.实 ...

  4. mysql 开发进阶篇系列 48 物理备份与恢复(xtrabackup 的增量备份与恢复,以及备份总结)

    一.增量备份概述 xtrabackup  和innobackupex  二个工具都支持增量备份,这意味着能复制自上次备份以来更改的数据.可以在每个完整备份之间执行许多增量备份,因此,您可以设置一个备份 ...

  5. MySQL的备份与恢复理解与备份策略

    MySQL的备份主要分为逻辑备份和物理备份 逻辑备份 在MySQL中逻辑备份的最大优点是对各种存储引擎都可以用同样的方法来备份.而物理备份则不同,不同的存储引擎有着不同的备份方法.Mysql中的逻辑备 ...

  6. (4.16)mysql备份还原——物理备份之XtraBackup实践

    关键词:XtraBackup实践,物理备份,xtrabackup备份,innobackupex备份 [1]如何使用? [3]系列:innobackupex --help |more [4]系列:xtr ...

  7. Mysql不锁表备份之Xtrabackup的备份与恢复

    一.Xtrabackup介绍 MySQL冷备.热备.mysqldump都无法实现对数据库进行增量备份.如果数据量较大我们每天进行完整备份不仅耗时且影响性能.而Percona-Xtrabackup就是为 ...

  8. 使用 xtrabackup 进行MySQL数据库物理备份

    0. xtrabackup的功能 能实现的功能: 非阻塞备份innodb等事务引擎数据库. 备份myisam表会阻塞(需要锁). 支持全备.增量备份.压缩备份. 快速增量备份(xtradb,原理类似于 ...

  9. mysql之使用xtrabackup进行物理备份、恢复、在线克隆从库、在线重做主从

    注:图片来自<深入浅出MySQL 数据库开发 优化与管理维护 第2版> 物理备份和恢复 1.冷备份:停掉mysql再备份,一般很少用,因为很多应用不允许长时间停机,停机备份的可以直接CP数 ...

随机推荐

  1. 20190527-JavaScriptの打怪升级旅行 { 语句 [ 声明 ,变量 ] }

    写在前面的乱七八糟:时间总是轻易地溜走,不留一丝念想,近一个月,倒是过得有点丧,从今天开始起,已经开始接触后台了,而JavaScript也只是大致有了个分类框架,那些细枝末节还有的补,任重道远,天将降 ...

  2. 随机线性网络编码的C语言实现,实现可靠传输:原理(1)

    线性方程组,大家都不陌生吧.来一组 A11 *X1 + A12 *X2 + A13 *X3 + A14 *X4 =Q1 A21 *X1 + A22 *X2 + A23 *X3 + A24 *X4 =Q ...

  3. UA

    我们可以通过userAgent来判断,比如检测某些关键字,例如:AppleWebKit*****Mobile或AppleWebKit,需要注意的是有些浏览器的userAgent中并不包含AppleWe ...

  4. Vue 循环为选中的li列表添加效果

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Vu ...

  5. springboot中各个版本的redis配置问题

    今天在springboot中使用数据库,springboot版本为2.0.2.RELEASE,通过pom引入jar包,配置文件application.properties中的redis配置文件报错,提 ...

  6. H3C 静态路由实现路由备份和负载分担

  7. PhpStorm terminal无法输入命令的解决方法

    下面小编就为大家带来一篇PhpStorm terminal无法输入命令的解决方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧   在使用PhpStorm时,点击下面的 ...

  8. 配置DNS代理

  9. 机器学习——HMM & CRF

    整理自: https://blog.csdn.net/woaidapaopao/article/details/77806273?locationnum=9&fps=1 HMM CRF HMM ...

  10. 一次接口压力测试qps极低原因分析及解决过程

    一次接口压力测试qps极低原因分析及解决过程 9-2日在做内部的性能测试相关培训时,发现注册接口压力测试qps极低(20左右),这个性能指标远不能达到上线标准 ,经过一系列调试,最后定位 98%的时间 ...