Linux上docker部署Mysql备份与恢复

news/2024/11/29 2:43:37/

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/localtimeln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtimecron && 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.ppmy.cn/news/1970.html

相关文章

【LeetCode每日一题】——141.环形链表

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【题目进阶】九【时间频度】十【代码实现】十一【提交结果】一【题目类别】 链表 二【题目难度】 简单 三【题目编号】 141.环形链表 四【题目描述】 给…

西北工业大学算法实验机试复习

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

深入学习Android

我通过阅读邓凡平前辈的《深入理解Android》&#xff0c;为了加深学习作此学习笔记。虽然是邓老师2011著的书&#xff0c;但其中的安卓框架还是可以学习的。另老师的csdn地址在&#xff1a;阿拉神农的博客_CSDN博客-Android开发系列,深入理解Android,移动万态领域博主tips:阅读…

python简单实现网络爬虫

前言 在这一篇博客中&#xff0c;我会用python来实现一个简单的网络爬虫。简单的爬取一下一些音乐网站、小说网站的标题、关键字还有摘要&#xff01;所以这个爬虫并不是万能爬&#xff0c;只针对符合特定规则的网站使用。&#xff08;只使用于爬标题、关键字和摘要的&#xff…

【OpenCV学习】第5课:图像模糊(均值滤波,高斯滤波)

参考文章链接:https://blog.csdn.net/qq_30460949/article/details/121990114 仅自学做笔记用,后续有错误会更改 理论 1.Smooth/blur是图像处理中最简单和常用的操作之一 2.使用该操作的原因之一就是为了给图像预处理的时候减低噪声 3.使用Smooth/Blur操作其背后是数学的卷积…

小红书和达人合作步骤是什么?对接达人合作流程分享

现在小红书作为不错的内容分享媒体&#xff0c;小红书内容分享的核心便是达人。许多商家也想知道该如何与达人合作。今天&#xff0c;就来和大家一起分享一下这个问题&#xff0c;带领大家了解并解析小红书和达人合作步骤是什么?并给大家解析一下期间有哪些注意事项。 其实商家…

使用setuptools构建python包

python包分发方式 源码包分发&#xff1a; 源码包安装过程是先解压&#xff0c;再编译。最后才安装&#xff0c;所以其是跨平台的&#xff0c;由于每次安装都需要进行编译&#xff0c;相对于二进制包安装方式来说安装速度较慢。 解压——编译——安装 源码包本质上是一个压缩…

LINUX下看门狗的使用

0、基本原理 使能看门狗&#xff0c;并配置看门狗&#xff0c;周期性的给看门狗设备写入数据即为喂狗。 1、使能硬看门狗 内核和设备树使能看门狗&#xff0c;具体的需要参考对应的cpu文档对看门狗的描述。 2、应用程序喂狗 参考应用程序源码如下&#xff1a; #include &…