docker部署下的mariadb数据库备份还原方案

背景:在使用docker部署的mariadb时,我们会将容器内的数据卷挂载到宿主机上,做简单的备份,容器在正常运行和停止的情况下,能快速创建mariadb的镜像,加载之前挂载的数据卷,但有时候mariadb容器可能会崩溃,导致挂载出来的数据卷可能会损坏,且难以修复,这就需要我们经常对mariadb中的数据做定期备份操作,避免出现一些突发情况导致数据库数据丢失问题。

一、方案设计

逻辑备份VS物理备份

逻辑备份:由恢复数据所需的SQL语句组成,例如CREATE DATABASE、CREATE TABLE和INSERT。

物理备份:物理备份是通过复制单个数据文件或目录来执行的。

主要区别如下:

  1. 逻辑备份更灵活,因为数据可以在其他硬件配置、MariaDB版本甚至另一个DBMS上恢复,而物理备份不能在显著不同的硬件、不同的DBMS,甚至可能是不同的MariaDB版本上导入。

  2. 逻辑备份可以在数据库和表级别执行,而物理数据库是目录和文件级别。在MyISAM和InnoDB存储引擎中,每个表都有一个等价的文件集。在MariaDB 5.5之前的版本中,默认情况下,很多InnoDB表都存储在同一个文件中,在这种情况下,不可能通过表进行备份。参见innodb_file_per_table)。

  3. 逻辑备份的大小比同等的物理备份大。

  4. 与同等的物理备份相比,逻辑备份在备份和恢复方面需要更多的时间。

注意:日志文件和配置文件不是逻辑备份的一部分

结论

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数据库备份还原方案的更多相关文章

  1. 数据库备份还原——mysqlbackup与mysqldump对比测试

    1      环境描述 1.1      硬件环境 服务器类型:华为RH5885 IP: 10.148.128.100 内存: 64G 物理CPU个数:4 CPU核数:8 逻辑CPU个数:64 Int ...

  2. MySQL数据库备份还原(基于binlog的增量备份)

    MySQL数据库备份还原(基于binlog的增量备份) 一.简介 1.增量备份      增量备份 是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味 ...

  3. MSSQL2008数据库备份还原和数据恢复

    原文:MSSQL2008数据库备份还原和数据恢复   序言 一直想写一篇关于数据库备份与恢复的文章,但基于能力的有限对数据库认知的有限怕不足以准确的表达,最后思考很久还是决定把自己的一些理解写出来供大 ...

  4. SQL server数据库备份还原问题备忘(亲测有效)

    问题一:SQL server数据库备份还原方法 http://www.cnblogs.com/zgqys1980/archive/2012/07/04/2576382.html 问题二:无法执行 BA ...

  5. 第二百九十节,MySQL数据库-MySQL命令行导出导入数据库,数据库备份还原

    MySQL命令行导出导入数据库,数据库备份还原 MySQL命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program ...

  6. 查询清除SQL Server数据库备份还原历史记录

    曾经遇到过一个用户MSDB数据库非常大,让我帮忙查查是什么原因.使用sp_spaceused找出了所有表的数据大小,发现问题是SQL Server备份和还原历史表数据太大.用户经常会做日志备份,但是从 ...

  7. [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)

    /// <summary>/// 通过调用MSSQL的SQLDMO.DLL文件来实现备份数据库/// 1.首先在在项目中引用SQLDMO.DLL文件./// 2.在引用中的SQLDMO.D ...

  8. C#中数据库备份还原 精简

    C#中数据库备份还原 使用前要导入SQLDMO.dll(在com组件中导入Microsoft SQLDMO Object Library即可) ///     /// DbOper类,主要应用SQLD ...

  9. Oracle数据库备份还原笔记

    Oracle数据库备份还原笔记 通过查阅资料知道Oracle备份还原的方式有三种.分别的是导出/导入.热备份和冷备份.导出/导入是一种逻辑备份.而热备份和冷备份是物理备份.[参考资料(https:// ...

  10. SQL Server数据库备份&还原

    一.备份 1.登录数据库 2.找到要还原的数据库 右键-任务-备份-添加(路径只写一个,刚开始二个总是报错)-确定 二.还原数据库 这个之间报错了二次 1.报错1:备份集中的数据库与现有数据库“XXX ...

随机推荐

  1. mysql explain 查看sql语句执行计划概述

    mysql explain 查看sql语句执行计划概述 id:选择标识符select_type:表示查询的类型.table:输出结果集的表partitions:匹配的分区type:表示表的连接类型po ...

  2. Day 23 23.2.1:微信公众平台案例

    微信公众平台案例 注意:接下来将的内容,请忽视具体网站,重点专注逆向的分析思路! 接下来就是爬什么网站,什么数据,什么形式都统统不重要!重点是分析思路 微信公众平台案例 url:https://mp. ...

  3. 不需要鼠标交互的UI去掉RaycastTarget

    UI事件会在EventSystem在Update的Process触发.UGUI会遍历屏幕中所有RaycastTarget是true的UI,接着就会发射线,并且排序找到玩家最先触发的那个UI,在抛出事件 ...

  4. Unity 使整个UnityUI变成彩色的BUG

    最近接手了一个两年前的老项目,在这个项目里碰到一个BUG ,每次运行到这个场景的时候,整个Unity 的所有UI包括Unity界面都会变成彩色. 后来发现是因为物体丢失,代码修改Image里的图片颜色 ...

  5. 068_Apex&Page中的ReadOnly 使用方式

    一.page页面遇到需要检索大量数据的处理方式需要时会用Readonly 通常,对单个Visualforce页面请求的查询可能无法检索超过50,000行. 在Read only模式下,此限制将放宽允许 ...

  6. MobaXterm汉化版教程

    MobaXterm中文版是一款非常好用的远程连接.远程控制软件,它堪称全能终端神器,支持非常多的远程协议 ,如SSH,Telnet,Rsh,Xdmc,RDP,VNC,FTP,SFTP,串口(Seria ...

  7. SSLCipherCheck_v1.4.2

    Usage: sslciphercheck.exe -h <Host> -p <Port> -u <URL> -c <CSV File> -i < ...

  8. ubantu下的java的发布

    1.先检查是否安装过 java version 2.卸载的命令 sudo apt-get remove openjdk* 3.创建存放jdk的目录 sudo mkdir /usr/lib/jvm 4. ...

  9. 深入理解JVM 学习笔记2

    Java内存区域 在执行java程序的过程中JVM会把它管理的内存划分为多个不同的数据区域. 根据<Java 虚拟机规范 SE7版>的规定,Java 虚拟机所管理的内存将会包括以下几个运行 ...

  10. git远程分支回退到某个版本

    1.找到要回退的版本号(右击项目--> Git --> Show History -->选中要回退的版本-->Copy Revision Number): 2.打开idea的T ...