备份的方案
完整/完全备份 full mysqldump

每次都将所有数据(不管自第一次备份以来有没有修改过),进行一次完整的复制

增量备份 incremental backup 每次备份都是基于上一次的时间 一天备份一次
差异备份 differential backup 从上一次完整备份开始,接下来的每一天都是从上一次完整备份开始
在公司用的最多的就是完整备份,增量备份

这三种方案,xtrabackup全部都支持。像binlog日志最适合做增量备份,因为可以在要一天结束之后开始下一天之前,先让它产生一个全新的日志文件,刷新一个全新的日志文件,开始第二天新的备份。

mysqldump里的-A就是完整备份,能不能用mysqldump做增量备份?

能做,不好做,假装有数据库,正在运行,昨天周一晚上24点已经把昨天的备份完了,不管你用什么方法,从今天凌晨0点到今天晚上24点,到24点的时候做备份这一天内的数据,很难做,不好定位时间,因为mysqldump备份的是表和库,还得去查一下,早上0点开始做了哪些操作,修改了哪个表,再去备份表里开始的位置,太难了,能做是可以,但是没有人做这种选择。

能不能用mysqldump做差异备份?

差异备份是从你上一次完整备份后的新数据,接下来的每一天都是从上一次完整备份开始,周一备份的是周一整天的,周二备份的是周一和周二的,周三备份的是周一周二周三的。但是它就是没备份周一之前的,要做完整备份它连周一之前的都备份上了,只备份周二的,拿mysqldump不好做,太难了。就周一周二的。

所以mysqldump不适合做差异备份和增量备份。它适合做完整备份。(表的备份,库的备份)

到了公司会做出选择,像mysqldump最爽,方便简单,缺点就是慢。

完整备份流程

首先创建备份目录: 在哪创建都行,

创建备份目录:

[root@k full]# mkdir -pv /xtrabackup/full

备份:

[root@k full]# innobackupex --user=root --password='Helloworld123!@' /xtrabackup/full

(innobackupex这个命令可以补全不需要提前做环境变量)/xtrabackup/full(备份的目录)

它在指定的目录下创建了一个目录。 ls查看多了一个目录,备份的文件就在那里。

一般情况下做备份的时候不关闭数据库,让数据库同时给客户端可以提供服务,只不过会影响客户端的访问,因为它在操作文件的同时,可能会把操作的表稍微锁一下,等拷完之后再把锁打开,但是恢复数据的时候肯定要把数据库先关掉。

什么情况下才会恢复一个完整的备份?

数据库已经不能用增量备份,差异备份恢复数据了,它坏的已经不能用了。现在有一台全新的数据库,全新的环境,只需要把数据恢复回去就行。

可以换台全新的服务器,把备份目录打个包拷过去再解压,再恢复。这样就不需要,停止数据库 ,清理环境这两步了。

完整备份恢复流程

1. 先停止数据库 systemctl stop mysqld

2. 清理环境 (清配置文件,数据目录,日志文件。)要想清理配置文件,最好做个备份,等恢复回来再拷贝过来

3. 重演回滚--> 恢复数据

4. 修改权限

5. 启动数据库

关闭数据库

# systemctl stop mysqld  停止数据库,如果报错关了防火墙再看

# rm -rf /var/lib/mysql/*   删除存储数据的目录,清库

# rm -rf /var/log/mysqld.log   删除日志文件

# rm -rf /var/log/mysql-slow/slow.log  删除慢查询日志

恢复之前的验证恢复

# innobackupex --apply-log /xtrabackup/full/2022-09-06_11-19-07// 就是把备份的东西全都记录一下,(模拟的不会真正的恢复数据)--apply-log +备份的目录

确认数据库目录

已经把测试做好了,感觉没什么问题,但我要把数据恢复到哪个目录下,配置文件下可以改这个目录,恢复之前需要确认配置文件内有数据库目录指定,不然xtrabackup不知道恢复到哪里

vim  /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

恢复数据

# innobackupex --copy-back /xtrabackup/full/2022-09-06_11-19-07/

copy-back后面跟目录

修改权限

# chown mysql.mysql /var/lib/mysql -R

这个文件是从别处拷过来的,文件的权限全部都是root所有,需要把所有者所有组都改成mysql。

启动数据库:  

# systemctl start mysqld

登进去mysql看看自己创建的库和mysql库还在不在,其他的没了换一个就行。

增量备份流程

原理:每次备份上一次备份到现在产生的新数据(不管和上一次备份隔了多长时间,都是增量)

准备测试库和表:假如今天是周一,

创建了一个新库,新库里面创建了一张新表,新表里添加了一些新的记录,产生了一些全新的数据。增量备份就是备份这些全新的数据。

假如周一结束了,我开始做备份,

先做一个完整备份:周一

innobackupex --user=root --password='(Helloworld123)' /xtrabackup

做完完整备份,cd到/xtrabackup,观察一下

增量备份:周二 —— 周六 让它产生一些新的数据,

到周二了,先让它产生一些新的数据,mysql连接进去

innobackupex --user=root --password='(Helloworld123)' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2022-09-06_11-43-33

incremental /xtrabackup(增量备份数据存储的位置)

incremental-basedir (基准目录)因为每一次增量备份是基于上一次完整备份,或者是增量备份,上一次还没有增量,上一次是完整备份,所以这里是上一次完整备份的目录。

现在是模拟的一整天,真的想模拟一整天应该改时间 9.7号下一次备份改到9.8  现在改不改没什么太大关系,有分钟有秒。现在再要做备份把上面那条命令改一改。基于上一次增量备份

备完之后,观察一下

第一次增量备份备完了,再插入新的数据,又开始产生新的数据,又过了一天,又要开始做增量备份,接下来的过程都是这,一直持续一周,持续到周六,周六做完那一天的增量备份之后,我又开始做完整备份,就是一个轮回。

如果现在再做增量备份,要把上一条命令改一下

基于上一次增量备份

接下来就一直重复。备份就一直持续下去,过了几天数据库坏了,得恢复数据

看想恢复哪一天的数据,比如前两天的数据坏了,先恢复倒数第二天再恢复倒数第一天的

如果前面的数据这几天的数据都挂了,要恢复最前面的再恢复倒数第二的,不能从最近的恢复

增量备份恢复流程

1. 停止数据库

2. 清理环境

3. 依次重演回滚redo log--> 恢复数据

4. 修改权限

5. 启动数据库

6. binlog恢复 (今天这一天还没过完,今天的增量备份还没有做,如果没启用binlog,那我从上一次增量备份结束到现在这几个小时的数据就丢了)所以平时就算用xtrabackup,还得把binlog启动起来。

增量备份每天的固定的时间点,24小时过完了,开始做增量备份,备份上面24个小时的,但是在24小时中间数据库坏了,中间12小时还没有做数据备份。这里就丢了,这里就是第六步binlog恢复,和上一期讲的是一样的,找到开始的位置从早上0点,到最后结束,恢复就完了。

清理环境

指定自己完整备份的目录

第一次增量和完整备份合到一起了。

改时间

假如还有第三次,第四次,每一次都要在这儿给它合一次,前面的步骤不变,前面永远都是我的第一次完整备份的目录。

恢复数据

# innobackupex --copy-back /xtrabackup/2022-09-06_11-43-33/

检查一下恢复没有

但是权限都是root

chown -R mysql.mysql /var/lib/mysql     -R 递归  这里面所有的文件所有的目录都修改

# systemctl start mysqld   启动服务

mysql去访问一下,最好去查一下表

 差异备份流程

增量备份和差异备份的区别:

增量备份每次备份都是基于上一次的结尾开始的,上一次结束的时间。差异备份每次都是从最后一次完整备份开始。

1、完整备份:周一

create database testdb;

use testdb;

create table test2(id int);

insert into test values(1);

select * from test;

创建了一个新库,新库里面创建了一张新表,新表里添加了一些新的记录,产生了一些全新的数据。做完整备份innobackupex --user=root --password=888 /xtrabackup

2.差异备份:周二 —— 周六

insert into testdb.test2 values(2);

# innobackupex --user=root --password=888 --incremental /xtrabackup --incremental-basedir=/xtrabackup/完全备份目录(周一) 第一次差异备份,指定一下备份到哪个地方去,基准目录每次都是完整备份的目录

insert into testdb.test2 values(3); 在每一次差异备份之前,需要先插入点新数据

# innobackupex --user=root --password=888 --incremental /xtrabackup --incremental-basedir=/xtrabackup/完全备份目录(周二)

insert into testdb.test values(4);

# innobackupex --user=root --password=888 --incremental /xtrabackup --incremental-basedir=/xtrabackup/完全备份目录(周三)

差异备份恢复流程

1. 停止数据库

2. 清理环境

3. 重演回滚redo log(周一,某次差异)--> 恢复数据

4. 修改权限

5. 启动数据库

6. binlog恢复

1.恢复全量的redo log

指定一下完备目录,先恢复完备目录

# innobackupex --apply-log --redo-only /xtrabackup/完全备份目录(周一)

2.恢复差异的redo log

恢复差异,第一个目录还是完备目录,第二个目录直接指定一个,恢复到哪一天,就指定哪一天的目录就完了。

# innobackupex --apply-log --redo-only /xtrabackup/完全备份目录(周一)--incremental-dir=/xtrabacku/

想恢复到哪里就指定哪个就行,不用有那么多次的恢复了,就两次恢复,第一次恢复完备,完备之后,想恢复到哪就指定一个目录就行。

其实像差异备份也是把指定的那一天前面到完整备份之前所有的东西和完整备份合在了一起。一样的原理。

3.复制数据文件(cp,rsync),修改权限

备份数据肯定是备份到远程机器或移动硬盘,哪天想恢复了,得把它拷回来(cp,rsync)但是得用这条指令innobackupex --copy-back /xtrabackup/给它恢复数据(copy-back)。

4.启动mysqld

改权限,start

5.通过binlog增量恢复

(今天这一天还没过完,今天的增量备份还没有做,如果没启用binlog,那我从上一次增量备份结束到现在这几个小时的数据就丢了)所以平时就算用xtrabackup,还得把binlog启动起来。

总之,这三种方式,都需要用binlog去恢复最后的小数据。

Mysql备份恢复(xtrabackup)相关推荐

  1. 刘子佼 mysql 下载_MySQL数据管理之备份恢复案例解析 23讲 Mysql备份恢复实战 视频教程...

    课程名称:MySQL数据管理之备份恢复案例解析 23讲 Mysql备份恢复实战课程简介: 课程独家解析MySQL 5.6最新特性,课程讲师刘子佼讲课风格幽默,善于与人沟通,善于组建和协调团队攻克技术难 ...

  2. 【数据库运维】MYSQL备份恢复管理(上)

    目录 MYSQL备份恢复管理 一,备份类型 二,逻辑备份优缺点 三,MySQL备份内容 四,MySQL备份工具 五,MySQL备份策略 1,策略一:直接拷贝数据库文件 案例:直接拷贝备份数据库comp ...

  3. MySQL备份恢复-mysqldump/xbk

    MySQL备份恢复 1.介绍 最后一根救命稻草,备份主要是用来恢复数据 2.DBA在备份恢复工作职责 2.1设计备份策略和恢复策略 1.备份策略 1)备份的时间 凌晨,根据公司的实际业务情况,一般选择 ...

  4. MySQL备份恢复练习

    MySQL备份恢复练习 素材 备份恢复要求 1. 备份数据库school到/backup目录 2. 备份数据库school为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库 3. ...

  5. Mysql 备份恢复看这一篇就够了

    Mysql 备份恢复 一.备份分类.备份策略 1.1 造成数据丢失的原因: 程序错误 人为操作错误 运算错误 磁盘故障 灾难(如火灾.地震)和盗窃 1.2 数据库备份的分类 1)物理备份:对数据库操作 ...

  6. mysql导入分卷_php实现mysql备份恢复分卷处理的方法_PHP

    本文实例讲述了php实现mysql备份恢复分卷处理的方法.分享给大家供大家参考.具体分析如下: 分卷处理就是把握们要处理的数据分成一个个小文件进行处理了,这里我来给大家介绍一个php mysql备份恢 ...

  7. Mysql备份工具xtrabackup 8 安装图解

    Mysql备份工具xtrabackup安装图解 声明 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理. 注: 当前操作系统CentOS 8.M ...

  8. 零基础带你学习MySQL—备份恢复数据库(三)

    零基础带你学习MySQL-备份恢复数据库(三) 一.备份数据库 二.恢复数据库 先删除数据库zs_db03 恢复数据库zs_db03 课堂练习 方法一:傻瓜式办法 直接Ctrlcv 方法二:命令行方法 ...

  9. Mysql备份恢复(mysqldump)

    Mysql备份恢复(mysqldump) 直接复制 -- 建新库 create database `caimei@20180517` default character set utf8 collat ...

  10. MySQL备份Percona Xtrabackup安装和卸载

    MySQL备份Percona Xtrabackup安装和卸载 Percona XtraBackup 安装介绍篇 XtraBackup介绍 XtraBackup是Percona公司的开源项目,用以实现类 ...

最新文章

  1. 三星招聘|计算机视觉、机器学习岗位研究员及实习生
  2. MySQL单机多实例-主主复制
  3. Qt的简单介绍和安装
  4. MIP、PWA、WebGL、HTTPS,来看Web生态的领先技术
  5. [NewLife.XCode]高级增删改
  6. matlab 城市间最短路径
  7. 东风小康为什么是dfsk_助力地摊经济瑞驰纯电动物流车和东风小康微型货车厚积薄发...
  8. python基础(12)之匿名函数lambda
  9. jQuery地图插件-jqvmap
  10. 获取spring里的bean
  11. cfree mysql_如何配置CFree才能开发MySql数据库应用 | 学步园
  12. iis运行html提示500错误,IIS7出现HTTP错误500.22的解决办法
  13. 记录PHP错误日志 display_errors与log_errors的区别
  14. 微信飞机大战小游戏制作分享(上集)含素材视频教程
  15. 用酷狗播放音乐时,会显示在msn的头像旁边
  16. 原型工具XSTAR与AXURE对比
  17. ipad上编译运行代码_是否可以在iPad上编写和运行PHP代码?
  18. linux 多核 双系统,Linux GRUB实现双系统引导教程
  19. 椭圆部分面积计算公式及微积分推导过程
  20. 360全景倒车影像怎么看_最近淘了一个360度全景倒车影像-4路行车记录仪监控录像,和大家分享一下...

热门文章

  1. 两年Java开发经验,线程面试题Java
  2. G723音频格式读入内存
  3. 100条模具设计经验,珍贵的资料!
  4. CMakeList使用总结
  5. 众安保险首推数据安全险 专治黑客盗取数据隐患
  6. 刷脸和指纹识别out啦,这些公司正在用静脉识别技术颠覆金融业
  7. java 使用抽象类解决长方形与圆求周长与面积的实现
  8. matlab中定义数组
  9. 2023-05-30-数据结构课程设计
  10. php 去除标签之间的空格,关于regex:php删除2个标签之间的空格