Linux上docker部署Mysql备份与恢复

news2025/1/9 15:06:28

Linux上Mysql备份与恢复

1.完全备份

完整备份是将所选的全部数据都备份起来,将备份文件生成一个镜像,再保存到其他的硬盘分区中。

1.1 完全备份一个或多个完整的库

ps: 博主mysql是用docker部署的,这时候需要进入docker容器进行操作。

docker exec -it hjt-mysql /bin/bash

先去/opt目录下 新建 mysqlData

mkdir mysqlData

进入容器后,进入 /var/lib/mysql目录。这是我们存储数据的地方

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kKmGOzfV-1670290326434)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123100925199.png)]

先备份一个库,执行命令。

mysqldump -u root -p数据库密码 --databases hjt-data > /opt/mysqlData/hjt-data.sql

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PP97nx5X-1670290326435)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123101309480.png)]

这时候sql文件就生成了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NBjUh8hZ-1670290326436)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123101342258.png)]

如果是要备份整个数据库,执行的命令是

mysqldump -u root -p数据库密码 --all databases > /opt/mysqlData/hjt-data.sql

查看备份文件

cat /opt/mysqlData/hjt-data.sql

1.2 完全备份恢复

先把hjt-data数据库删除

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YuRjpkaI-1670290326436)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123102550927.png)]

先新建数据库 hjt-data

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NrmtMsfi-1670290326437)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123103029409.png)]

然后执行命令

mysql -uroot -p hjt-data </opt/mysqlData/hjt-data.sql

输入mysql密码后

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QZVZ73E4-1670290326437)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123103114177.png)]

可见数据已经恢复

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r9oJCxjG-1670290326437)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123103139369.png)]

2.增量备份+完全备份

增量备份是一种智能备份方式,只备份有变化的部分,也就是在上一次备份之后,将新增的或有变化的数据备份起来,每一次增量备份都是和上一次备份(可以是完整备份、差异备份或增量备份)相对比。比如周一进行了一次完整备份,周三进行了一次增量备份,那么周三这次增量备份会将周一完整备份之后有变化的数据备份起来,若周五又进行了一次增量备份,那么这一次将会备份周三增量备份之后有变化的数据。

首先需要开启二进制日志功能
vim /etc/my.cnf

[mysqld]
log-bin=mysql-bin
binlog_format = MIXED				指定二进制日志(binlog)的记录格式为 MIXED
server-id = 1

③ 二进制日志的格式
A) binlog_format 在mysql5.7默认是row, 不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨

例如:update a < 10 的数据,statement模式会记录这一条sql,而row模式的话,会记录a=1,a=2到a=9所有的记录的更改

B) STATEMENT模式 每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题

C) MIXED模式 以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。

2.1 可对每周进行完全备份

下面是完全备份备份库的

mysqldump -u root -p  hjt-data > /opt/mysqlData/hjt-data_$(date +%F).sql

如果是备份某个库中的某张表

在这里插入图片描述

mysqldump -u root -p  hjt-data sys_file  > /opt/mysqlData/hjt-data_sys_file$(date +%F).sql

2.2 每天进行增量备份

生成新的二进制日志文件(例如 mysql-bin.000002)

插入新数据,以模拟数据的增加或变更

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-umwNu4Fe-1670290326438)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123111612658.png)]

再次生成新的二进制日志文件

mysqladmin -u root -p flush-logs

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wSDz8vFQ-1670290326439)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123111930880.png)]

查看二进制日志

mysqlbinlog --no-defaults --base64-output=decode-rows -v /var/lib/mysql/mysql-binlog.000001

如果想看到我们写入的sql语句格式,则需要设置 binlog_rows_query_log_events = 1

--start-position 可以通过偏移量进行查询

--start-datetime 通过开始时间来查询

--stop-datetime 通过结束时间查询

mysqlbinlog  --base64-output=decode-rows -v /var/lib/mysql/mysql-binlog.000001 --start-datetime='2022-11-23 09:18:22'

2.3 MySQL增量恢复

一般恢复

首先我们先创建一张表test

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J75P6zxM-1670290326439)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123140447318.png)]

然后执行sql命令 ,生成二进制日志。

mysqladmin -u root -p flush-logs

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AFGqbmhN-1670290326439)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123140618993.png)]

这时候我们把test表删除

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v44lQPrz-1670290326440)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123140642511.png)]

然后再执行一下命令,进行增量恢复。

mysqlbinlog --no-defaults  /var/lib/mysql/mysql-binlog.000002  | mysql -u root -p

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LlgzMcLQ-1670290326440)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123140710990.png)]

这是test表就恢复了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yxyo85OR-1670290326440)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221123140737665.png)]

3.定时任务完成备份

docker容器内安装crontab

进入容器,执行命令

apt update

#安装 cron
apt install -y cron

安装成功后,执行

touch /var/log/cron.log

# 更改时区

rm -rf /etc/localtime

ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

cron && tail -f /var/log/cron.log

然后执行命令 ,会报一下错误

crontab -e

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3LqCDjxu-1670290326440)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221124092346475.png)]

这个报错是因为你docker容器没有安装vi命令

解决方案:

apt-get update 

apt-get install vim

在宿主机新建mysqlData.sh脚本,并把复制到容器内部

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h2kNIvNQ-1670290326441)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221124111525506.png)]

脚本内容如下:

#!/bin/bash
echo '开始执行mysql备份操作'
mysqldump -u root -p970628hjt.  hjt-data > /opt/mysqlData/hjt-data_$(date +%F).sql
echo 'mysql备份完成'

执行命令

docker cp  /mydata/sh/mysqlData.sh hjt-mysql:/sh/ 

再执行命令 crontab -e ,然后输入

* * * * * /sh/mysqlData.sh > /opt/log/mysql.log 2>&1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2XSc5H1t-1670290326441)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221124095554711.png)]

查看定时任务列表

crontab -l

查看生成好的sql文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ARU8JEgM-1670290326441)(Linux%E4%B8%8AMysql%E5%A4%87%E4%BB%BD%E4%BA%8E%E6%81%A2%E5%A4%8D.assets/image-20221124112116657.png)]

因为我宿主机映射容器/var/lib/mysql/是这个目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/65213.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

太极限了,JDK的这个BUG都能被我踩到!

之前遇到个文件监听变更的问题&#xff0c;刚好这周末有空研究了一番&#xff0c;整理出来分享给大家。 从一次故障说起 我们还是从故障说起&#xff0c;这样更加贴近实际&#xff0c;也能让大家更快速理解背景。 有一个下发配置的服务&#xff0c;这个配置服务的实现有点特…

详解设计模式:访问者模式

访问者模式&#xff08;Visitor Pattern&#xff09;&#xff0c;是在 GoF 23 种设计模式中定义了的行为型模式。据《大话设计模式》中说算是最复杂也是最难以理解的一种模式了。 访问者模式 是一种将数据操作与数据结构分离的设计模式&#xff0c;它可以算是 23 中设计模式中最…

NewStar CTF Week3Misc 4-5Web

目录 <1> Week-3 Misc (1) Whats HTTP (2) qsdzs girlfriend 3 (3) WebShell&#xff01; (4) 混沌的图像 <1> Week-4 Web (1) So Baby RCE(%0A进行rce rev|sort读取flag) (2) UnserializeThree(%0d换行rce) <2> week5-web (1) Give me your photo…

step-by-step 配置 gtest 在 vscode 测试 c/c++(Ubuntu 环境下示范)

1. 去把 gtest 装好 详见&#xff1a;CSND-PangCoder-[Ubuntu]GTest安装和测试-https://blog.csdn.net/qq_36251561/article/details/85319547 2. 在 VS Code 打上这几个插件 印象里打上 C TestMate 下面的就会自动装了…如果没有就手动装一下 3. 编写测试脚本 第一步那…

【Pytorch】第 1 章 :强化学习和 PyTorch 入门

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

Java并发常见面试题(三)

并发编程三大特性 原子性 一次操作或者多次操作&#xff0c;要么所有的操作都得到执行并且不受任何因素的干扰而中断&#xff0c;要么都不会执行。 在 Java 中&#xff0c;可以借助synchronized 、各种 Lock 以及各种原子类实现原子性。synchronized 和各种 Lock 可以保证任…

【吴恩达机器学习笔记】十三、异常检测

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为学习吴恩达机器学习视频的同学提供的随堂笔记。 &#x1f4da;专栏简介&#xff1a;在这个专栏&#xff0c;我将整理吴恩达机器学习视频的所有内容的笔记&…

[附源码]计算机毕业设计人事系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Contest2850 - 【在线编程平台】2022年计算机类数据结构作业12.20221201-1206

问题 A: 二叉排序树 - 文本输出 题目描述 给定一个序列&#xff0c;使用该序列生成二叉排序树&#xff08;也叫二叉搜索树&#xff0c;BST&#xff09;&#xff0c;然后以本题规定方法输出该二叉排序树。 例&#xff1a; 给定一个序列&#xff1a;43 25 29 67 17 88 54 47 35…

用R语言制作交互式图表和地图

可以直接从R / RStudio制作在线交互式图表和地图。 去年&#xff0c;我们为一位客户进行了短暂的咨询工作&#xff0c;他正在构建一个主要基于在线交互式图表的分析应用程序。 配置 启动RStudio&#xff0c;创建一个新的RScript&#xff0c;然后将工作目录设置为下载的数据文…

git merge origin master和git merge master的区别(个人理解)

先说结论 git merge origin master 意思是当前的分支,进行合并,合并二个分支分别是远程分支master在本地的副本和本地分支的master git merge master 当前分支于本地所处的master分支进行合并 还有就是 git merge origin master是把origin merge 到 master 上的说法是错误的…

小侃设计模式(十五)-命令模式

1.概述 命令模式&#xff08;Command Pattern&#xff09;是将一个请求封装为一个对象&#xff0c;从而让你使用不同的请求把客户端参数化&#xff0c;对请求排队或者记录请求日志&#xff0c;可以提供命令的撤销和恢复功能。它是行为型模式的一种&#xff0c;能够有效降低系统…

【华为上机真题 2022】流水线

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

ES6:ES6 的内置对象扩展

Array 的扩展方法 扩展运算符&#xff08;展开语法&#xff09; 扩展运算符可以将数组或者对象转为用逗号分隔的参数序列。 let ary [1, 2, 3];...ary // 1, 2, 3console.log(...ary); // 1 2 3console.log(1, 2, 3)为什么没有逗号&#xff0c;这个是因为被当做console…

毕业设计-机器视觉的疲劳驾驶检测系统-python-opencv

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

买家的诉求决定你的产品卖点

产品卖点的核心是消费者的诉求&#xff0c;也就是消费者为什么对某个产品有需求。 为什么要用广角镜头&#xff1f;可能要拍比较大、比较宏伟的环境。 为什么要用微距&#xff1f;可能要去拍一些细节场景。 …… 很多时候跟客户对不上&#xff0c;是因为不知道客户具体要做…

挨个排列原子!美国科学家打造出全新量子试验台

11月29日&#xff0c;美国科学家建立了一个原子级精度的测试平台&#xff0c;能以全新的方式操纵电子&#xff0c;在量子计算中有着巨大潜力。电子是微观粒子&#xff0c;可以在材料和设备之间携带电量和信息。它们通常可视为离散的小球&#xff0c;在电路中或原子周围移动。虽…

Git下载安装及环境配置,解决安装包下载慢问题(详细版)

Git是我们平时开发都要用到的项目管理工具&#xff0c;虽然有网页版的Git网站&#xff0c;但是在本地安装Git后&#xff0c;可以直接使用命令语句来进行项目的上传与克隆。还是非常方便的。 今天就来介绍下Git的下载。 git下载安装一、下载二、安装git三种操作界面的简介三、设…

不同应用选择荧光染料 -CY7 ALK脂溶性Sulfo-Cyanine7 alkyne 结构式应用

不同应用选择荧光染料-多肽、蛋白、抗体标记、活体成像 荧光标记技术是指运用荧光染料与待研究对象结合&#xff0c;利用它的荧光特性&#xff0c;提供待研究对象相关信息。荧光标记具有操作简便、高稳定性、高灵敏度等优势&#xff0c;使荧光染料在生命科学研究中应用&#xf…

软件测试之对于测试的反思及思考

1.针对一个页面&#xff0c;从页面的完整性(包括字段、输入框、功能点)出发 2.对于分页&#xff0c;考虑未在首页的时候的测试&#xff0c;末页的情况。 3.对条件的查询来说&#xff0c;要针对于单个输入框的测试、交叉输入框的测试 4.对于删除、修改等&#xff0c;要考虑你…