【docker】之linux写shell脚本备份线上数据库(备份为dump文件)

news2025/6/22 12:06:04

目录

  • 1. SH文件
    • 1.1 SH文件示例
    • 1.2 文件解释
    • 1.3 .sh文件执行
  • 2. 备份线上数据库的.sh文件
    • 2.1 文件命令解析
  • 3. 命令执行
  • 4. 线下dump文件的恢复与备份

环境:linux
容器:docker

1. SH文件

SH文件通常指的是 Shell 脚本文件,文件后缀名为.sh,其中包含一系列要由操作系统的命令解释器执行的命令。
也就是说,我们可以使用shell命令一次性执行.sh文件里面的所有命令(方便、避免重复做事)

1.1 SH文件示例

在 Shell 脚本文件中,可以通过直接编写命令来执行特定的操作。

#!/bin/bash

# 这是一个简单的 Shell脚本 ;echo命令通常是用来打印的
echo "Hello, World!"

# 使用变量
name="John"
echo "Welcome, $name!"

执行这个.sh脚本,控制台(终端)就会输出

Hello, World!
Welcome,John!

1.2 文件解释

#!/bin/bash:指定了用于执行脚本的解释器,这里是 Bash。
echo "Hello, World!":打印 “Hello, World!” 到终端。
name="John":定义了一个变量 name,并赋值为 “John”。
echo "Welcome, $name!":使用变量输出 “Welcome, John!”。

1.3 .sh文件执行

假如我们把上面编辑好的.sh文件进行保存,命名为test.sh
执行命令一般基本上都使用:

bash test.sh
# 或者
sh test.sh

2. 备份线上数据库的.sh文件

#!/bin/bash
#开始进行数据库备份
echo "开始进行数据库备份!"

#备份数据库1
echo "备份数据库1"
docker exec -i postgres14_1 /bin/bash -c 
'pg_dump -h 127.0.0.1 -p 5432 -U postgres -Fc -f /var/lib/postgresql/pgdumpFile/xxx_`date +%Y%m%d%H%M%S`.dump test1'


#备份数据库2
echo "备份数据库2"
docker exec -i postgres14_2 /bin/bash -c 
'pg_dump -h 127.0.0.1 -p 5432 -U postgres -Fc -f /var/lib/postgresql/pgdumpFile/xxx_`date +%Y%m%d%H%M%S`.dump test2'
echo "备份数据库成功!"

2.1 文件命令解析

docker exec -i postgres14_1 /bin/bash -c 
'pg_dump -h 127.0.0.1 -p 5432 -U postgres -Fc -f /var/lib/postgresql/pgdumpFile/xxx_`date +%Y%m%d%H%M%S`.dump test1'
  • echo命令用来打印

  • docker exec命令,用于在正在运行的 Docker 容器中执行一个命令(若当前doker容器未在运行,须使用其他命令使其处于运行状态)

    • 运行容器:docker run -d --name mycontainer image_name
    • 这里,mycontainer是你给容器起的名字,image_name是你要使用的Docker镜像的名字。
  • -i: 交互模式选项,允许你与在容器内部运行的命令进行交互。尽管在这个 pg_dump 命令的上下文中可能不是必需的,因为 pg_dump 通常不需要交互输入,但它可能是为了确保任何需要的输入(尽管在这个场景中不太可能)都能正确传递。

  • postgres14_1: 这是你想要执行命令的容器的名称,也就是当前数据库所在数据库服务的容器名。

  • /bin/bash -c: 使用 Bash shell 来执行后面的命令字符串。-c 选项允许你传递一个字符串给 Bash 作为要执行的命令。

 'pg_dump -h 127.0.0.1 -p 5432 -U postgres -Fc -f /var/lib/postgresql/pgdumpFile/xxx_`date +%Y%m%d%H%M%S`.dump test1'
  • 这是实际要在容器内部执行的 pg_dump 命令。
    • pg_dump: PostgreSQL 的备份工具。
    • h 127.0.0.1: 指定 PostgreSQL 数据库服务器的地址,这里指向容器内部的本地地址。
    • p 5432: 指定 PostgreSQL 数据库服务器的端口号。
    • U postgres: 使用 postgres 用户来连接数据库。
    • Fc: 创建一个自包含格式的备份。
    • f /var/lib/postgresql/pgdumpFile/xxx_date +%Y%m%d%H%M%S.dump: 指定备份文件的输出路径和名称。
      • 这里使用了命令替换(反引号中的 date +%Y%m%d%H%M%S),它会执行 date 命令并获取当前的日期和时间(格式为年月日时分秒),然后将这个日期和时间字符串插入到文件名中,从而生成一个带有时间戳的备份文件名。
      • 其中/var/lib/postgresql/pgdumpFile是映射路径 .sh要在docker-compose.yml文件里面当前映射路径对应的实际路径中,否则则会报错:找不到当前路径
    • test1: 这是你想要备份的数据库的名称。(一个数据库服务下可能有多个数据库,所以要写具体备份的数据库)

综上所述,这个命令的作用是:在 postgres14_1 容器中,使用 pg_dump 工具备份名为 test1的 PostgreSQL 数据库,并将备份文件保存在 /var/lib/postgresql/pgdumpFile路径映射的绝对路径中,数据库备份名为xxx_YYYYMMDDHHMMSS.dump ,其中 YYYYMMDDHHMMSS 是当前日期和时间的字符串表示。这样做的好处是每次备份都会生成一个具有唯一时间戳的文件名,从而避免文件名冲突,并使得可以轻易识别备份的创建时间。

3. 命令执行

假如我们保存该shell脚本为pgsqldump.sh的文件

我们使用cd命令进入该SH文件所在的绝对目录下使用命令:

bash pgsqldump.sh

输出以下结果:

开始进行数据库备份!
备份数据库1
备份数据库2
备份数据库成功

然后再去保存dump文件的地方去看是否有备份文件已存在:如下
在这里插入图片描述

4. 线下dump文件的恢复与备份

【PostgreSql】本地备份为dump文件与恢复数据库(单表or整个数据库)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1584724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot统一功能处理(一)

本篇主要介绍Spring Boot的统一功能处理中的拦截器。 目录 一、拦截器的基本使用 二、拦截器实操 三、浅尝源码 初始化DispatcherServerlet 处理请求(doDispatch) 四、适配器模式 一、拦截器的基本使用 在一般的学校或者社区门口,通常会安排几个…

【C++学习】C++11新特性(第一节)

文章目录 ♫一.文章前言♫二.C11新特性♫一.统一的列表初始化♫二.std::initializer_list♫三.声明♫四.decltype关键字♫五.nullptr♫六.新增加容器---静态数组array、forward_list以及unordered系列♫6.1unordered_map与unoredered_set♫6.2array♫6.3 forward_list&#xff…

Leetcode算法训练日记 | day18

一、找树左下角的值 1.题目 Leetcode:第 513 题 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null,5,6,null,null,7] 输出:…

nandgame中的Memory(内存操作):栈、堆、静态区

Push Memory Push Memory 将内存中的值push到栈内堆栈顶部的值是一个内存地址。从堆栈中弹出地址。获取内存地址的当前内容,并将其推送到堆栈上。POP_A //堆栈顶部的值是一个内存地址。从堆栈中弹出地址。 D *A //获取内存地址的当前内容 PUSH_D //将其推送到…

JVM性能调优——运行时参数

文章目录 1、JVM参数选项类型1.1、标准参数选项1.2、非标准参数选项1.3、非稳定参数选项 2、添加JVM参数的方式3、常用JVM参数选项4、通过Java代码获取JVM参数5、小结 熟悉JVM参数对于系统调优是非常重要的。比如一个高流量的延迟的电子交易平台,它要求的响应时间都…

ROS机器人未知环境自主探索功能包explore_lite最全源码详细解析(五)

本系列文章主要针对ROS机器人常使用的未知环境自主探索功能包explore_lite展开全源码的详细解析,并进行概括总结。 本系列文章共包含六篇文章,前五篇文章主要介绍explore_lite功能包中 explore.cpp、costmap_tools.h、frontier_search.cpp、costmap_clie…

MySQL:关于数据库的一些练习题

文章目录 前面的内容已经把数据库的一些必要知识已经储备好了,因此下面就对于这些语句进行一些练习: 批量插入数据 insert into actor values (1, PENELOPE, GUINESS, 2006-02-15 12:34:33), (2, NICK, WAHLBERG, 2006-02-15 12:34:33);SQL202 找出所有…

C/S医学检验LIS实验室信息管理系统源码 医院LIS源码

LIS系统即实验室信息管理系统。LIS系统能实现临床检验信息化,检验科信息管理自动化。其主要功能是将检验科的实验仪器传出的检验数据经数据分析后,自动生成打印报告,通过网络存储在数据库中,使医生能够通过医生工作站方便、及时地…

一起学习python——基础篇(14)

今天讲一下python的json解析方式。 上一篇文章讲述了将传参数据转换为json格式的数据传给后台,如果后端返回的json格式数据,我们该如何解析呢? 例子一:简单的json数据格式 如果后端返回的json数据如下, { "na…

【leetcode面试经典150题】34.有效的数独(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

Docker Compose 一键安装

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

【C++学习】C++11新特性(第二节)—— 右值引用与移动语义超详解

文章目录 文章简介二.右值引用1.什么是左值,什么是右值?什么是左值引用,什么是右值引用?2.左值引用与右值引用比较 三.右值引用使用场景和意义1.左值引用的使用场景:2.左值引用的短板:3.右值引用与移动构造…

2024大模型落地应用案例集(免费下载)

【1】扫码关注本公众号 【2】私信发送 2024大模型落地应用案例集 【3】获取本方案PDF下载链接,直接下载即可。

【Linux】环境下OpenSSH升级到 OpenSSH_9.6P1(图文教程)

漏洞描述 OpenSSH(OpenBSD Secure Shell)是加拿大OpenBSD计划组的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。OpenSSH 9.6之前…

深入浅出Golang image库:编写高效的图像处理代码

深入浅出Golang image库:编写高效的图像处理代码 引言image库概览图像处理基础概念image库的主要组成和功能image接口图像格式的支持color模型 结论 图像的基本操作创建图像新图像的创建从文件加载图像 图像的保存与导出图像的颜色和像素处理绘制基本形状和文字 高级…

无网络连接 请检查你的网络设置 然后重试 [2604] 彻底解决方案

错误提示:无网络连接 请检查你的网络设置 然后重试 [2604] 彻底解决方案如下: 方案一: 打开Internet Explorer浏览器,选择"工具 > Internet 选项"。 在Internet属性窗口下,点击高级下滑到安全模块分类…

[漏洞复现]D-Link未授权RCE漏洞复现(CVE-2024-3273)

声明:亲爱的读者,我们诚挚地提醒您,Aniya网络安全的技术文章仅供个人研究学习参考。任何因传播或利用本实验室提供的信息而造成的直接或间接后果及损失,均由使用者自行承担责任。Aniya网络安全及作者对此概不负责。如有侵权&#…

Linux查看系统配置信息的命令【lscpu】【free】【df】【uname】【lsblk】【top】

目录 1.查看CPU信息【lscpu】 2.查看内存信息【free】 3.查看文件系统信息【df】 4.查看系统信息【uname】 知识扩展:Red Hat Enterprise Linux 和 Debian GNU/Linux 两者的发展介绍 知识扩展:Centos 和 ubuntu的区别 知识扩展:更多 …

Quanto: PyTorch 量化工具包

量化技术通过用低精度数据类型 (如 8 位整型 (int8)) 来表示深度学习模型的权重和激活,以减少传统深度学习模型使用 32 位浮点 (float32) 表示权重和激活所带来的计算和内存开销。 减少位宽意味着模型的内存占用更低,这对在消费设备上部署大语言模型至关…

Python学习从0开始——项目一day01爬虫

Python学习从0开始——项目一day01爬虫 一、导入代码二、使用的核心库三、功能测试3.1初始代码3.2新建文件3.3代码调试 四、页面元素解析4.1网页4.2修改代码4.3子页面4.4修改代码 一、导入代码 在Inscode新建一个python类型的项目,然后打开终端,粘贴以下…