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 ...
随机推荐
- js - 解决微信环境下,ios软键盘收起后页面空白
思路:1.判断是否在微信中 2.判断是否在ios中 3.表单元素焦点将页面滚回到顶部 是否是微信环境 isWx() { let ua = navigator.u ...
- org.elasticsearch.ElasticsearchException: not all primary shards of [.geoip_databases] index are active解决办法
解决办法 在配置elasticsearch.yml中加上 ingest.geoip.downloader.enabled: false
- VMwareSDN环境配置之git安装
------------恢复内容开始------------ null ------------恢复内容结束------------
- vscode 中用git命令合并分支
操作:主分支master的代码合并到当前分支wz 操作之前,两个分支的内容都要拉取最新的代码 命令为 git pull origin master git pull origin wz 或者vs内直接 ...
- VUE学习-优化组件
组件(优化) 动态组件 keep-alive 当在这些组件之间切换的时候,你有时会想保持这些组件的状态,以避免反复重渲染导致的性能问题. 有时我们更希望那些标签的组件实例能够被在它们第一次被创建的时候 ...
- go对数组对象排序
1.根据时间对数组对象排序 package main import ( "fmt" "time" "github.com/ah ...
- git 的提交与合并
1,创建远程仓库 不论是用命令行还是码云之类的都可以 2,git clone url 这是将远程仓库库提交到本地 3, git checkout -b dev 创建dev分支并切换到dev ...
- Linux系统Shell脚本第一章:Shell脚本基础及时间同步
目录 一.Shell脚本基础 1.Shell作用 2.什么是Shell脚本及处理逻辑 3.shell脚本基本格式 4. shell脚本执行方式 5.实操演示 二.Shell脚本中的变量 1.变量的作用 ...
- 【SSO单点系列】(7):CAS4.0 二级域名
CAS4.0 二级域名 一.描述 当cas成功登录后如果访问同一域名下的资源是 被当作同一应用下资源不需要再次请求登录,但是如果二级域名不同会 被当作不同应用在访问 需要请求CAS 在请求时会把TGC ...
- Linux中启动Docker容器报错:Error response from daemon: driver failed programming external connectivity
在启动Docker的容器时,会出现报错:Error response from daemon: driver failed programming external connectivity on e ...