Mysql备份与恢复(1)---物理备份
数据库对企业来说最重要的莫过于其中的数据,所以做好数据库的备份是一个不可或缺的工作。数据库及时备份可以帮助我们在数据库出现异常宕机时及时的使用备份数据进行恢复工作,将因为数据库宕机产生的影响降低到最小。所以,本篇文章主要数据库数据备份与恢复进行介绍。由于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:备份的日志。
- 将经过backup的数据进行prepare得到完整可用的数据,使用命令:
- xtrabackup --prepare --use-memory=100M --target-dir=/backups

这里对命令几个参数做下解释:
--use-memory:该参数不带则默认prepare操作占用100M内存,如果数据量大我们可以将use-memory指定更大的内存加快prepare工作。
--target-dir:备份文件所在路径,我是放在/backups/。
- 恢复数据,恢复数据必须保证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)---物理备份的更多相关文章
- Mysql备份与恢复(2)---逻辑备份
数据库及时备份可以帮助我们在数据库出现异常宕机时及时的使用备份数据进行恢复工作,将因为数据库宕机产生的影响降低到最小.上一篇针对使用xtrabackup工具进行物理备份和数据恢复做了一个详细讲解,本篇 ...
- Data Base mysql备份与恢复
mysql 备份与恢复 为什么要备份: 由于系统使用到了MySQL 数 据库,所以每天的工作,就设计到了MySQL数据库的备份问题.但如果每天手工来做MySQL数据库的定时备份,工作量不说,时间还不 ...
- MYSQL的备份与恢复--物理备份xrabackup
目录 1.数据库完整备份与恢复 (1)环境准备 (2)完全备份恢复流程 2.数据库增量备份与恢复 (1)增量和差异概述 (2)增量备份和恢复 3.数据库差异备份与恢复 4.简单命令进行物理备份 5.实 ...
- mysql 开发进阶篇系列 48 物理备份与恢复(xtrabackup 的增量备份与恢复,以及备份总结)
一.增量备份概述 xtrabackup 和innobackupex 二个工具都支持增量备份,这意味着能复制自上次备份以来更改的数据.可以在每个完整备份之间执行许多增量备份,因此,您可以设置一个备份 ...
- MySQL的备份与恢复理解与备份策略
MySQL的备份主要分为逻辑备份和物理备份 逻辑备份 在MySQL中逻辑备份的最大优点是对各种存储引擎都可以用同样的方法来备份.而物理备份则不同,不同的存储引擎有着不同的备份方法.Mysql中的逻辑备 ...
- (4.16)mysql备份还原——物理备份之XtraBackup实践
关键词:XtraBackup实践,物理备份,xtrabackup备份,innobackupex备份 [1]如何使用? [3]系列:innobackupex --help |more [4]系列:xtr ...
- Mysql不锁表备份之Xtrabackup的备份与恢复
一.Xtrabackup介绍 MySQL冷备.热备.mysqldump都无法实现对数据库进行增量备份.如果数据量较大我们每天进行完整备份不仅耗时且影响性能.而Percona-Xtrabackup就是为 ...
- 使用 xtrabackup 进行MySQL数据库物理备份
0. xtrabackup的功能 能实现的功能: 非阻塞备份innodb等事务引擎数据库. 备份myisam表会阻塞(需要锁). 支持全备.增量备份.压缩备份. 快速增量备份(xtradb,原理类似于 ...
- mysql之使用xtrabackup进行物理备份、恢复、在线克隆从库、在线重做主从
注:图片来自<深入浅出MySQL 数据库开发 优化与管理维护 第2版> 物理备份和恢复 1.冷备份:停掉mysql再备份,一般很少用,因为很多应用不允许长时间停机,停机备份的可以直接CP数 ...
随机推荐
- MaxCompute 预付费标准版VS套餐版
MaxCompute 于5月7日正式售卖预付费(包年包月)套餐资源,主打存储密集型套餐,一共三个套餐: 存储密集型160套餐 存储密集型320套餐 存储密集型600套餐 本文主要给大家介绍预付标准版和 ...
- C# Brush Color String 互相转换
using System.Windows.Media; //String转换成Color Color color = (Color)ColorConverter.ConvertFromString(s ...
- Keras框架下的保存模型和加载模型
在Keras框架下训练深度学习模型时,一般思路是在训练环境下训练出模型,然后拿训练好的模型(即保存模型相应信息的文件)到生产环境下去部署.在训练过程中我们可能会遇到以下情况: 需要运行很长时间的程序在 ...
- spring boot activiti 整合
1.pom.xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti- ...
- Python--day27--复习
例1:
- 简单的Spring Batch示例
使用Spring Batch做为批处理框架,可以完成常规的数据量不是特别大的离线计算. 现在写一个简单的入门版示例. 这里默认大家已经掌握了Spring Batch的基本知识,示例只是为了快速上手实践 ...
- java分配内存空间
分配内存空间 数组名=new 数据类型[数组长度]: new关键字用来实现为数组或对象分配内存 (堆内存) 数组具有固定的长度.获取数组的长度: 数组名.length 定义数组+分配内存空间 数据类型 ...
- java 多线程安全问题的解决方法
三种方法: 同步代码块: synchronized(obj) { //obj表示同步监视器,是同一个同步对象 /**..... TODO SOMETHING */ } 同步方法 格式: 在方法上加 ...
- 【u224】传送机
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 刷完牙洗完脸,黄黄同学就要上课去了.可是黄黄同学每次去上课时总喜欢把校园里面的每条路都走一遍,当然,黄 ...
- printk函数 打印设备编号
偶尔地, 当从一个驱动打印消息, 你会想打印与感兴趣的硬件相关联的设备号. 打印主次 编号不是特别难, 但是, 为一致性考虑, 内核提供了一些实用的宏定义( 在 <linux/kdev_t.h& ...