docker 部署的mariadb数据库备份还原方案
docker部署下的mariadb数据库备份还原方案
背景:在使用docker部署的mariadb时,我们会将容器内的数据卷挂载到宿主机上,做简单的备份,容器在正常运行和停止的情况下,能快速创建mariadb的镜像,加载之前挂载的数据卷,但有时候mariadb容器可能会崩溃,导致挂载出来的数据卷可能会损坏,且难以修复,这就需要我们经常对mariadb中的数据做定期备份操作,避免出现一些突发情况导致数据库数据丢失问题。
一、方案设计
逻辑备份VS物理备份
逻辑备份:由恢复数据所需的SQL语句组成,例如CREATE DATABASE、CREATE TABLE和INSERT。
物理备份:物理备份是通过复制单个数据文件或目录来执行的。
主要区别如下:
逻辑备份更灵活,因为数据可以在其他硬件配置、MariaDB版本甚至另一个DBMS上恢复,而物理备份不能在显著不同的硬件、不同的DBMS,甚至可能是不同的MariaDB版本上导入。
逻辑备份可以在数据库和表级别执行,而物理数据库是目录和文件级别。在MyISAM和InnoDB存储引擎中,每个表都有一个等价的文件集。在MariaDB 5.5之前的版本中,默认情况下,很多InnoDB表都存储在同一个文件中,在这种情况下,不可能通过表进行备份。参见innodb_file_per_table)。
逻辑备份的大小比同等的物理备份大。
与同等的物理备份相比,逻辑备份在备份和恢复方面需要更多的时间。
注意:日志文件和配置文件不是逻辑备份的一部分
结论:
1、选择逻辑备份
2、备份周期一天两次 中午12点30一次, 晚上0点30分一次 ,通过shell脚本定时执行
大致流程如下:

具体的备份还原脚本如下:
备份操作:
1、创建脚本
# 脚本路径
vim /usr/local/application/docker/scs-projects/mariadb_backup.sh
# 日志路径
touch /usr/local/application/docker/scs-projects/mariadb_backup.log
脚本内容如下
#!/bin/bash
echo "------------------------开始对mariadb进行备份 开始时间是`date '+%Y-%m-%d %H:%M:%S'`------------------------"
# 密码注意切换
docker exec -i mariadb sh -c 'exec mysqldump -uroot -p"$MARIADB_ROOT_PASSWORD" --all-databases ' > /usr/local/application/mariadb/backup/all-databases.sql
tar -zcvf /usr/local/application/mariadb/backup/$(date "+%Y_%m_%d_%H_%M_%S").tar.gz /usr/local/application/mariadb/backup/all-databases.sql
# 删除超过一个月的备份文件
find /usr/local/application/mariadb/backup/ -mtime +31 -type f -name "*" -exec rm -rf {} \;
echo "------------------------mariadb进行备份结束 结束时间是`date '+%Y-%m-%d %H:%M:%S'`------------------------"
赋予脚本可执行权限
chmod +x /usr/local/application/docker/scs-projects/mariadb_backup.sh
2、将脚本加入定时任务
crontab -e
内容如下:
30 12 * * * sh /usr/local/application/docker/scs-projects/mariadb_backup.sh >> /usr/local/application/docker/scs-projects/mariadb_backup.log
30 0 * * * sh /usr/local/application/docker/scs-projects/mariadb_backup.sh >> /usr/local/application/docker/scs-projects/mariadb_backup.log
还原操作
# 进入压缩文件所在路径
# 解压
tar zxvf 文件名
# 还原即可
docker exec -i mariadb1 sh -c 'exec mysql -uroot -p"$MARIADB_ROOT_PASSWORD"' < all-databases.sql
docker 部署的mariadb数据库备份还原方案的更多相关文章
- 数据库备份还原——mysqlbackup与mysqldump对比测试
1 环境描述 1.1 硬件环境 服务器类型:华为RH5885 IP: 10.148.128.100 内存: 64G 物理CPU个数:4 CPU核数:8 逻辑CPU个数:64 Int ...
- MySQL数据库备份还原(基于binlog的增量备份)
MySQL数据库备份还原(基于binlog的增量备份) 一.简介 1.增量备份 增量备份 是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味 ...
- MSSQL2008数据库备份还原和数据恢复
原文:MSSQL2008数据库备份还原和数据恢复 序言 一直想写一篇关于数据库备份与恢复的文章,但基于能力的有限对数据库认知的有限怕不足以准确的表达,最后思考很久还是决定把自己的一些理解写出来供大 ...
- SQL server数据库备份还原问题备忘(亲测有效)
问题一:SQL server数据库备份还原方法 http://www.cnblogs.com/zgqys1980/archive/2012/07/04/2576382.html 问题二:无法执行 BA ...
- 第二百九十节,MySQL数据库-MySQL命令行导出导入数据库,数据库备份还原
MySQL命令行导出导入数据库,数据库备份还原 MySQL命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program ...
- 查询清除SQL Server数据库备份还原历史记录
曾经遇到过一个用户MSDB数据库非常大,让我帮忙查查是什么原因.使用sp_spaceused找出了所有表的数据大小,发现问题是SQL Server备份和还原历史表数据太大.用户经常会做日志备份,但是从 ...
- [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)
/// <summary>/// 通过调用MSSQL的SQLDMO.DLL文件来实现备份数据库/// 1.首先在在项目中引用SQLDMO.DLL文件./// 2.在引用中的SQLDMO.D ...
- C#中数据库备份还原 精简
C#中数据库备份还原 使用前要导入SQLDMO.dll(在com组件中导入Microsoft SQLDMO Object Library即可) /// /// DbOper类,主要应用SQLD ...
- Oracle数据库备份还原笔记
Oracle数据库备份还原笔记 通过查阅资料知道Oracle备份还原的方式有三种.分别的是导出/导入.热备份和冷备份.导出/导入是一种逻辑备份.而热备份和冷备份是物理备份.[参考资料(https:// ...
- SQL Server数据库备份&还原
一.备份 1.登录数据库 2.找到要还原的数据库 右键-任务-备份-添加(路径只写一个,刚开始二个总是报错)-确定 二.还原数据库 这个之间报错了二次 1.报错1:备份集中的数据库与现有数据库“XXX ...
随机推荐
- mysql存储过程游标中途自动退出
1.当在游标循环过程中select的结果集如果为空,就会触发游标continue handler for not found 提前将done置为1,导致提前退出游标. 2.游标循环中出现 select ...
- QtQuick与Qml介绍
文章纲要: 1.QtQuick是什么 2.qml与QtQuick关系 一.QtQuick是什么 "quick--快速创建应用程序" "quick--Qt User Int ...
- nvm安装及使用(windon/mac)
有必要说一下nvm,因为大家做前端对node都很熟悉吧.前端的很多项目中都依赖node,还有可能每个项目依赖的node版本不一样,这样我们就上了nvm. nvm 是node Version Manag ...
- 《CSOL大灾变》Mobile开发进度记录——扔掉与拾取武器的逻辑
在武器系统的开发过程中,涉及到武器的丢弃逻辑.由于场景是复制场景,而自己写碰撞测试和抛物线以及重力下落来模拟扔掉一把武器,并且要防止武器扔到墙里.如果自己实现这些逻辑,那么会占用渲染线程的时间开销,即 ...
- 题解[CF1628F]A_Random_Code_Problem
题意 给定一个数组 \(a\),进行 \(k\) 次操作.第 \(i\) 操作等概率随机 \(a\) 中一个元素 \(a_x\),将这个元素的值加入答案,并使其减去 \(a_x\bmod i\) .问 ...
- Spring 常见注解及其作用
1.@ConfigurationProperties 可以非常方便的把资源文件中的内容绑定到对象上 绑定单一属性值,绑定整个对象属性 2.@Value("${app.n ...
- shell语法5-判断语句、循环语句、函数
一.判断语句 if-then形式类似于C/C++中的if-else语句. 1.单层if命令格式:if conditionthen 语句1 语句2 ...fi 2.单层if-else命 ...
- (已解决)为什么最新版本(v4.3.1)的bootstrap不能使用center-block?
最新版本4.3.1已经用mx-auto替换center-block,如果仍然想要使用,可以引用3.3.7版本的,https://cdn.staticfile.org/twitter-bootstrap ...
- KingbaseES V8R3集群运维案例之---cluster.log ERROR: md5 authentication failed
案例说明: 在KingbaseES V8R3集群的cluster.log日志中,经常会出现"ERROR: md5 authentication failed:DETAIL: password ...
- 用 go 实现多线程下载器
本篇文章我们用Go实现一个简单的多线程下载器. 1.多线程下载原理 通过判断下载文件链接返回头信息中的 Accept-Ranges 字段,如果为 bytes 则表示支持断点续传. 然后在请求头中设置 ...