今天给大家带来的是关于数据库备份与恢复的教程,当我们手贱或者不知道什么原因导致数据库的崩溃,甚至删除数据库时怎么办,总不能跑路吧?所以我们做好日常的备份和相关的灾后重建很有必要。

那么备份都有什么方式,方法呢?一,文件备份,就是很笨的把所有的文件的都一一拷贝到我们准备好的各种存储设备上,但是此种方法缺乏时效性,需要冷备,就是把服务停掉,慢慢拷,而且只能作用与少量数据备份,太多的话装不下,功能性贼弱,二,逻辑备份,重数据库中导出数据而另进行的备份,优点是编辑器简单,恢复简单,缺点是备份是数据较大时,备份较慢,所以我们推出了完全备份和差异备份还有增量备份,完全备份顾名思义就是把数据库完全备份下来,不过我们可以把它和差异备份和增量备份相结合,差异备份就是备份的数据是上一次全备份之后新增加的和修改过的数据,增量备份就是备份的数据是上一次备份后增加的和修改过的数据,有的小伙伴就蒙圈了,这是什么鬼?那么给你一张图就能很好的体现出三种方式备份的区别。

总的来说我们的完全备份和增量备份,是和楼梯结构差不多,一级一级的去备份,当我们恢复的时候,当然也是一级一级的去恢复,而差异备份则不然,它和完全备份结合时,是相对于全备份而言的,当有一天数据丢失时,直接使用全备份和前一天的备份就能很快找到我们的数据。

今天我们就先来实验一下完全备份+增量备份。

完全备份我们使用的是mysqldump工具,增量备份我们使用的是二进制日志方式实现,那么具体怎么操作呢?

实验环境:centos7虚拟机一台,安装完成mysql

第一步:准备备份目录,更改所属人,所属组

mkdir /backup

chown mysql:mysql /backup/

第二步:准备备份数据库及表

mysql

create database qiangge;

use qiangge;

create tabel zao(id int not null,name char(20));

第三步:进行完整备份

mysqldump --all-databases --lock-all-tables --flush-log --master-data=2 >/backup/`date +%F-%T`-all.sql

# --all-databases:全部的数据库

# --lock-all-tables:锁全部表(为了保持数据一致性)

# --flush-log:刷新二进制文件从内存写入硬盘

# --master-data=2:导出的语句chage master to被注释

第四步:向表中插入数据

mysql

use qiangge;

insert into zao values (01,'jerry'),(02,'tom'),(03,'dog'),(04,'cat');

第五步:进行增量备份,备份称二进制日志

vim /etc/my.cnf

[mysqld]

log-bin=bl

systemctl restart mariadb

mysqlbinlog --start-position=NUM1 --stop-position=NUM2 /var/lib/mysql/bl.000002 > /backup/`date +%F-%T`-bl.sql

#NMU1,NUM2都是查看bl.000002,具体的方法是mysqlbinlog bl.000002,如果bl.000002没有,那就找一下bl.000001,at NUM1开头,中间夹着SQL语句,COMMIT/*!*/;结尾的一段,上面有end_log_pos NUM2。

第六步:继续插入数据,在没有备份的情况下删除数据库,模拟误操作

mysql

use qiangge;

insert into zao values (06,'mile fly'),(07,'usaf');

drop database qiangge;

第七步:数据恢复,由于最后我们没有备份就删除了数据库,所以我们首先需要保护最后的二进制日志,查看删除操作之前的position值:mysqlbinlog 二进制文件。

第八步:将最后操作的二进制日志备份

mysqlbinlog --start-position=NUM3 --stop-position=NMU4 二进制日志 >/backup/`date +%F-%T`-bl2.sql

第九步:导入之前备份的数据库

mysql

mysql

mysql

第十步:查看数据库的恢复

mysql

select * from qiangge.zao;

完成。我们可以查看到我们成功的完成了数据库的恢复。

然后,我们第二个实验的方法是基于一个小工具xtrabackup,它有更简单的命令和备份速度快,还原快,备份可靠,节省磁盘的等等一大堆优点,还可以自动实现备份检验。

首先,我们先要安装一个包,yum源就可以

yum install percona-xtrabackup

然后新建一个目录专门存储备份数据

mkdir /backup

1 完全备份

innobackupex --user=root /backup/

2 添加数据

mysql

create database qiangge;

use qiangge;

create table six(id int,name char(20));

insert into six values (1,'haha'),(2,'hehe');

3 增量备份

innobackupex --incremental /backup/ --incremental-basedir=/backup/2017-11-16_23-55-11/

4 删除数据库

mysql

drop database qiangge;

5 数据恢复前准备

为什么要准备呢?因为因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态,所以已提交的事务要重放,合并到完全备份上,没提交事务的要回滚.

innobackupex --apply-log --redo-only /backup/2017-11-16_23-55-11

innobackupex --apply-log --redo-only /backup/2017-11-16_23-55-11 --incremental-dir=/backup/2017-11-16_23-57-12

#一定要用绝对路径,此处为坑,笔者当时切到该目录下,可以补全,以为可以使用相对路径,结果排了半下午的错

6 恢复阶段,数据恢复

innobackupex --copy-back /backup/2017-11-16_23-55-11

此时它会提醒我们/var/lib/mysql是非空的,这是为什么呢?因为该目录下的是数据库数据,它会直接把所有的数据恢复到该目录,我们直接删除此目录。

rm -rf /var/lib/mysql/*

再次执行该命令,发现还有问题,我们更改一下目录的所有人,所属组

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

systemctl restart mysql

然后成功,进入瞅一眼,数据库完全ok的啦!

最后我们要再来一个lvm2快照和binlog的结合,就是逻辑卷快照和二进制日志结合使用的数据备份和恢复。

1 首先添加一块硬盘,作为逻辑卷

2 添加物理卷

pvcreate /dev/sdb1

3 添加卷组

vgcreate myvg /dev/sdb1

4 添加逻辑卷

lvcreate -n mydata -L 5G myvg

5 格式化逻辑卷

mkfs.ext4 /dev/mapper/myvg-mydata

6 挂载逻辑卷

mount /dev/mapper/myvg-mydata /lvm_data

7 修改mysql配置文件,使得数据文件在逻辑卷上 datadir=/lvm_data

8 重启mariadb服务

9 创建数据库,进行操作

mysql

create database qiangge;

use qiangge;

create table six(id int,name char(20));

insert into six values (1,'six'),(2,'sixsix');

10 锁定表

mysql

flush tables read lock;

11 创建快照卷

lvcreate -L 1G -n mydata-snap -p r -s /dev/mapper/myvgmydata

12 解锁所有表

mysql

unlock tables;

13 挂载快照卷

mount /dev/myvg/mydata-snap /lvm_snap/

14 打包物理备份

tar cvf /tmp/mysqlback.tar ./*

15 卸载snap

umount /lvm_snap/

16 删除snap

lvremove myvg mydata-snap

17 删除数据库

rm -rf /lvm_data/*

18 解压恢复数据库

tar -xvf /tmp/mysqlback.tar ./

19 验证数据是否恢复

上面的三种方式可以应付日常管理备份恢复了,那么具体他们的区别是什么呢?笔者总结了一下

linux数据库都备份什么,Linux运维学习之数据库备份与恢复相关推荐

  1. linux系统运维费用,一般Linux运维学习的费用是多少?Linux学习

    随着IT 互联网技术的发展,Linux逐渐成为中高端服务器的主要操作系统,并且目前地位不可替代.Linux运维工程师是一位"复合型人才",他集成了网络.系统.数据库.开发和安全等工 ...

  2. linux学习项目,[ Linux运维学习 ] 路径及实战项目合集

    我们知道运维工程师(Operations)最基本的职责就是负责服务的稳定性并确保整个服务的高可用性,同时不断优化系统架构.提升部署效率.优化资源利用率,确保服务可以7*24H不间断地为用户提供服务. ...

  3. Linux操作系统——Linux可视化管理-webmin 和 bt 运维工具

    文章目录 25 Linux 可视化管理-webmin 和 bt 运维工具 25.1 webmin 25.1.1 基本介绍 25.1.2 安装webmin&配置 25.1.3 简单使用演示 25 ...

  4. 兄弟连Linux运维学习笔记

    最新经典linux运维兄弟连Linux运维学习笔记... --------------- 全程1.5倍播放.加油我一定可以学完Linux ---------------------- Unix与Lin ...

  5. Linux 可视化管理-webmin 和 bt 运维工具

    Linux 可视化管理-webmin 和 bt 运维工具 webmin Webmin 是功能强大的基于 Web 的 Unix/linux 系统管理工具.管理员通过浏览器访问 Webmin 的各种管理功 ...

  6. Linux运维学习路线图

    关注"尚硅谷"微信公众号,输入"Linux"获取Linux全运维学习资料 一.Linux基础知识 Linux简介与安装 Linux常用命令 Vim编辑器 Lin ...

  7. 阿里云官方学习课程推荐-Linux运维学习路线 从事云计算运维相关工作必备技能

    阿里云官方学习课程推荐-Linux运维学习路线 从事云计算运维相关工作必备技能 目前越来越多的企业需要依赖于IT技术发布产品与服务,尤其是电子商务最为明显,它凸显了IT技术在现代企业中的重要性.当企业 ...

  8. MySQL数据库性能优化及自动化运维实践教程!DBA日常工作

    MySQL数据库性能优化及自动化运维实践教程!本文作者将站在更加全面的角度分享他在这一年多 DBA 工作中的经验,希望可以给大家带来启发和帮助. DBA 的日常工作 我觉得 DBA 真的很忙,我们来看 ...

  9. 运维工程师高级运维中级运维初级运维学习路线技能图谱

    传统的认知是,运维场景中网络技能很重要.实际上,网络技能分物理网络和虚拟网络,而虚拟网络其实更多的是Linux技能层面的支撑.Linux作为一款非常稳定和安全的操作系统,更适合在服务器上使用.对于运维 ...

最新文章

  1. Java(第十五章)
  2. C和指针之动态内存分配堆、栈、全局区(静态区)、常量区对比总结学习笔记
  3. 物联网应用领域-物联网智能安全始于产品开发
  4. linux shell 清空文件,查看文件,写入文件
  5. Java描述设计模式(20):命令模式
  6. 【新用户专享】腾讯云发车,360元三年1核2G云服务器
  7. maven设置socks代理
  8. python入门之函数调用第三关-Python 基础3 函数function
  9. InnoTek VirtualBox – 很有潜力的OS模拟器
  10. 服务器 硬盘灯,硬盘灯一直亮,手把手教你电脑硬盘指示灯一直亮怎么办
  11. U盘文件夹被病毒隐藏了
  12. 【MMD动作下载】随心所欲mercy(Kimagure Mercy)
  13. JAVA计算机毕业设计中药分类管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  14. Windows蓝屏自动修复无法修复你的电脑
  15. 超强媒体阵容护航,第一届区块链技术及应用峰会(BTA)·中国引爆开年狂潮
  16. 迷失在Blog(ZZ)
  17. 爬虫实战-爬取豆瓣读书书籍信息
  18. 终于有人把数据治理的元数据、主数据等概念讲明白了
  19. Ubuntu服务器鼠标卡死
  20. 随机变量的定义分类和各种主要概率密度分布介绍

热门文章

  1. LeetCode-动态规划基础题-746. 使用最小花费爬楼梯
  2. 使用KNN对MNIST数据集进行实验
  3. Python编程基础:第三十八节 问答游戏Quiz Game
  4. 【问底】严澜:数据挖掘入门——分词
  5. 在Mybatis-spring上基于注解的数据源实现方案
  6. myqltransactionRollbackexception deadlock found when trying to get lock
  7. 百度工程师深度好文, 横评3大企业级区块链技术平台
  8. 你在数据预处理上花费的时间,是否比机器学习还要多?
  9. 马云:我看到很多人去学MBA 但回来时都变蠢了
  10. 逻辑回归模型(Logistic Regression, LR)基础 - 文赛平