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 ...
随机推荐
- Vulnhub:ReconForce-01.1靶机
kali:192.168.111.111 靶机:192.168.111.200 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --script=http-enum 192.168. ...
- 了解ASP(二)
变量 ASP中的变量有普通变量,Session变量,Application变量. 变量的生存期 在子程序外声明的变量可被 ASP 文件中的任何脚本访问和修改. 在子程序中声明的变量只有当子程序每次执行 ...
- 在Debian11上安装Openresty服务(Nginx+Lua)
OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态 We ...
- gitlab-CICD共享runner基本配置
gitlab-CICD共享runner基本配置 使用docker部署runner 多个项目使用共享runner 部署机器与runner不在同一台服务器上(使用ssh部署) 部署runner 部署镜像 ...
- Java使用Calendar获取月最大天数
Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar ...
- TypeScript - 属性的修饰符
class Person { /** * TS 可以再属性前增加属性的修饰符 * public 修饰的属性可以再任意位置访问(修改)默认值 * private 私有属性,私有属性只能在类内部进行访问和 ...
- C# 调用Web Api通用方法
1.通用方法 public class GetDataByWebApi { /// <summary> /// 通过web api获取数据的方法 /// </summary> ...
- Java 复习篇2---jdk
jdk 文件: bin 该路径下存放了各种工具命令, 其中重要的有javac 和Java conf: 改路径下存放了相关配置文件 include: 该路径下存放了一些平台特定的头文件 jmods; 该 ...
- CTreeView和CTreeCtrl的使用方法(转)
(一)树控制的主要功能 树控制和视(Tree Control&View)主要用来显示具有一定层次结构的数据项,如资源管理器中的磁盘目录等,以供用户在其中进行各种选择.树控制中的每个数据项包括数 ...
- 关于elementui 验证问题 验证某个值大于另外一个值
elementui ui表单验证区间 <el-form ref="ruleForm" :model="ruleForm" :rules="rul ...