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

目录

  • 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.mzph.cn/news/806733.shtml

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

相关文章

IP查询在追踪网络攻击源头中的应用

随着网络攻击事件的不断增加,追踪攻击源头成为网络安全领域的重要任务之一。IP查询技术通过分析网络流量中的IP地址,可以帮助确定攻击的来源。本文将探讨IP查询在追踪网络攻击源头中的应用,包括其原理、方法以及实际案例分析。 IP地址查询&a…

比特币减半后 牛市爆发

作者:Arthur Hayes of Co-Founder of 100x 编译:Qin jin of ccvalue (以下内容仅代表作者个人观点,不应作为投资决策依据,也不应被视为参与投资交易的建议或意见)。 Ping PingPing,我的手机发出的声音&…

Linux CentOS 安装 MySQL 服务教程

Linux CentOS 安装 MySQL 服务教程 1. 查看系统和GNU C库(glibc)版本信息 1.1 查询机器 glibc 版本信息 glibc,全名GNU C Library,是大多数Linux发行版中使用的C库,为系统和应用程序提供核心的API接口。在Linux系统中,特别是在…

js 数组 按列循环二维数组

期待效果&#xff1a; 核心代码&#xff1a; //js function handle(array) {var result [];for (let i 0; i < array[0].length; i) {var item []; for (let j 0; j < array.length; j) {item.push(array[j][i])} result.push(item);} return result; } 运行代码&a…

酷开科技 | 酷开系统打破客厅局限让大家享受更智能便捷的服务

曾经电视是家庭场景中的重要屏幕&#xff0c;是家庭发现世界和获取资讯的中心。但经历了近一百年的发展&#xff0c;传统电视行业进入瓶颈期&#xff0c;电视在家庭中的地位被逐渐替代。特别是智能手机的诞生&#xff0c;让手机成为个人生活的中心和全社会关注焦点&#xff0c;…

STM32F7 MPU Cache的原理和一致性问题

目录 概述 1 Cache 及其原理 2 结构及策略 2.1 Cache类型 2.2 Cache实例 3 Cache 及 MPU 属性 4 Cache 一致性问题 4.1 未Clean写Cache情况 4.2 DMA 更新物理内存情况 4.3 一个实例 4.3.1 功能描述 4.3.2 代码实现 4.3.3 结论 概述 本文主要从结构原理以及应用方…

接口自动化测试(python+pytest+requests)

一、选取自动化测试用例 优先级高:先实现业务流程用例、后实现单接口用例功能较稳定的接口优先开展测试用例脚本的实现二、搭建自动化测试环境 核心技术:编程语言:python;测试框架:pytest;接口请求:requests安装/验证requests:命令行终端分别输入 pip install requests / p…

助力低碳出行 | 基于ACM32 MCU的电动滑板车方案

随着智能科技的快速发展&#xff0c;电动滑板车的驱动系统也得到了长足的发展。国内外的电动滑板车用电机驱动系统分为传统刷式电机和无刷电机两种类型。其中&#xff0c;传统的刷式电机已经逐渐被无刷电机所取代&#xff0c;无刷电机的性能和寿命都更出色&#xff0c;已成为电…

蓝桥杯-单片机基础16——利用定时计数中断进行动态数码管的多窗口显示

综合查阅了网络上目前能找到的所有关于此技能的代码&#xff0c;最终找到了下述方式比较可靠&#xff0c;且可以自定义任意显示的数值。 传统采用延时函数的方式实现动态数码管扫描&#xff0c;在题目变复杂时效果总是会不佳&#xff0c;因此在省赛中有必要尝试采用定时计数器中…

HCIP课后习题之一

1、路由协议用工作机制上分为那几种&#xff1f;分别是&#xff1f; A&#xff1a;两种。分别是静态路由和动态路由&#xff08;可分为IGP和EGP&#xff09; 2、IGP和EGP协议有哪些&#xff1f; A&#xff1a;IGP: RIP、OSPF、ISIS、EIGRP EGP: BGP 3、路由优先级的用途&…

嵌入式学习52-ARM1

知识零散&#xff1a; 1.flash&#xff1a; nor flash 可被寻地址 …

如何设置端口映射?

端口映射是一种网络技术&#xff0c;通过在网络路由器或防火墙上设置规则&#xff0c;将外部网络请求转发到内部特定设备或服务的端口上。这样可以实现不同地区电脑与电脑、设备与设备、电脑与设备之间的信息远程通信&#xff0c;提供更加便捷的网络连接。 2. 天联组网 天联是…

Day:005 | Python爬虫:高效数据抓取的编程技术(爬虫效率)

爬虫之多线程-了解 单线程爬虫的问题 因为爬虫多为IO密集型的程序&#xff0c;而IO处理速度并不是很快&#xff0c;因此速度不会太快如果IO卡顿&#xff0c;直接影响速度 解决方案 考虑使用多线程、多进程 原理&#xff1a; 爬虫使用多线程来处理网络请求&#xff0c;使用线程…

废品回收 小程序+APP

用户实名认证、回收员实名认证、后台审核、会员管理、回收员管理、订单管理、提现管理、地图、档案管理。 支持&#xff0c;安卓APP、苹果APP、小程序 流程&#xff1a; 一、用户端下单&#xff0c;地图选择上门位置、填写具体位置、废品名称、预估重量、选择是企业废旧、家…

MySQL - 掌握MySQL锁的必备知识

1. 多个事务更新同一行数据时是如何加锁避免脏写? 当有多个事务同时并发更新一行数据的时候,不就是会有脏写的问题吗?那么脏写是靠什么防止的呢? 其实就是靠锁机制,依靠锁机制让多个事务更新一行数据的时候串行化,避免同时更新一行数据。 在MySQL里,假设有一行数据摆…

基于JAVA的校园失物招领平台

采用技术 基于JAVA的校园失物招领平台的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringMVCMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 管理员功能 论坛管理 失物认领管理 寻物启事管理 用户管理 失物…

neo4j-01

Neo4j是&#xff1a; 开源的&#xff08;社区版开源免费&#xff09;无模式&#xff08;不用预设数据的格式&#xff0c;数据更加灵活&#xff09;noSQL&#xff08;非关系型数据库&#xff0c;数据更易拓展&#xff09;图数据库&#xff08;使用图这种数据结构作为数据存储方…

基于java的某超市进销存管理系统

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

lovesql 手工sql注入

1.页面 2.万能密码登录成功 我还傻乎乎的以为密码就是flag 但不是 3. 继续注入 判断列数 确定了只有三列 开始尝试联合注入 4.使用联合注入之前先判断显示位 5.之后一步一步的构造&#xff0c;先得到当前数据库名 利用database&#xff08;&#xff09; 再得到库里有哪些表 …

前端保留两位小数

一、保留两位小数&#xff08;四舍五入&#xff09; 解决方案&#xff1a;使用 toFixed(x) 方法可以对小数进行指定位数保留&#xff0c;其中x是要保留的位数用法&#xff1a;num.toFixed(x)&#xff0c;其中num为需要操作的数据&#xff0c;x为要保留的位数示例&#xff1a;1…