Linux上docker部署Mysql备份与恢复
创始人
2024-03-20 23:24:31

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 

输入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/是这个目录

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...