Docker容器中的Postgresql备份脚本异常解决

 更新时间:2023年08月28日 17:11:49   作者:胖头鱼不吃鱼-  
本文基于K8S中Docker容器对postgres数据库进行备份的操作,但是提示报错,报错信息为kubectl command not found,本文就来介绍一下报错信息的分析及其解决办法,感兴趣的可以了解一下

本文基于K8S中Docker容器对postgres数据库进行备份的操作,编写好脚本后,手动执行脚本是正常的,但是crontab定时实行却报错,报错信息为kubectl command not found,提示没有找到kubectl指令。

本文主要介绍对该报错信息的分析及其解决办法。详细内容请参考下文。

一、查看数据库环境

1、获取数据库所在节点

2、进入数据库对接节点容器

二、编写数据库备份脚本

1、执行指令# vim pgbackup.sh

#!/bin/bash
#设置系统变量
source /etc/profile
filename="`date +%F`_bak.sql"
#备份数据脚本
cat > /usr/local/backup/exportPG.sh <<EOF
#!/bin/bash
export PGUSER=****
export PGPASSWORD='******'
export PGHOST=172.**.**.**
export PGPORT=324**
#备份整个集群库中的数据
#pg_dumpall -a > ${filename}
#备份整个集群库包含建库建表操作
pg_dumpall > ${filename}
EOF
#给执行权限
chmod +x /usr/local/backup/exportPG.sh
#将服务器上的备份脚本复制到对应容器中去
kubectl cp /usr/local/backup/exportPG.sh sso/********:/exportPG.sh
#在容器外执行该脚本
kubectl exec -it ******** -n sso -- /exportPG.sh
#将备份后的数据文件复制到容器外
kubectl cp sso/********:${filename} /usr/local/backup/${filename}

2、授予备份脚本执行权限

执行指令# chmod +x
/usr/local/backup/pgbackup.sh

3、测试数据库备份脚本

说明:测试数据库备份脚本,手动执行# sh pgbackup.sh的时候,备份正常。但是在使用crontab执行任务定时执行的时候,报kubectl command not found的错误信息。

4、分析定时执行的报错信息

说明:crontab执行计划任务的时候并不知道所需要的特殊环境变量。所以要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。

特别需要注意如下三点:

(1)脚本中涉及文件路径时写全局路径;

比如:

上文所提到的数据备份脚本问题,就是kubectl指令没有写全路径,正确的做法是,通过执行指令# which kubectl查看指令kubectl的所在位置,让后将脚本的指令路径补全。

(2)脚本执行要用到程序或其他环境变量时,通过source命令引入环境变量;

比如:

在root的crontab文件中加入:

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

(3)、如上文所述,当手动执行脚本正常,但是crontab定时执行报错的情况。就是环境变量问题,可以在crontab中直接引入环境变量解决。

0 * * * * /etc/profile;/bin/bash /home/scripts/test.sh >/dev/null 2>&1

5、修改后的备份脚本

说明:执行指令# vim pgbackup.sh修改数据库备份脚本,修改后的脚本如下

到此这篇关于Docker容器中的Postgresql备份脚本异常解决的文章就介绍到这了,更多相关Docker Postgresql备份脚本异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SEATA事务服务DOCKER部署的过程详解

    SEATA事务服务DOCKER部署的过程详解

    这篇文章主要介绍了SEATA事务服务DOCKER部署的过程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 手动构建自己的docker容器镜像实战

    手动构建自己的docker容器镜像实战

    这篇文章主要介绍了如何手动构建自己的镜像并上传到镜像仓库中,文中有详细的代码实例,需要的朋友可以参考阅读
    2023-04-04
  • Docker 磁盘占用分析和清理方法示例小结

    Docker 磁盘占用分析和清理方法示例小结

    本文介绍Docker磁盘占用分析与清理方法,涵盖镜像、容器、卷及构建缓存的资源排查,提供清理未使用资源的命令及选项,如docker system prune和docker image prune,并解释悬空镜像的产生原因及处理技巧,感兴趣的朋友一起看看吧
    2025-07-07
  • Docker desktop安装mysql过程

    Docker desktop安装mysql过程

    文章介绍了如何在本地已有的Docker环境中拉取并启动MySQL容器,并详细说明了常用的环境变量参数,此外,还讨论了如何通过挂接本地磁盘来持久化MySQL数据,从而避免数据丢失
    2024-12-12
  • Docker中Redis数据迁移到本地的实现

    Docker中Redis数据迁移到本地的实现

    Redis数据库之间的迁移是指将数据从一个Redis实例复制到另一个Redis实例的过程,本文主要介绍了Docker中Redis数据迁移到本地的实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • 本地使用docker打包部署镜像的方法

    本地使用docker打包部署镜像的方法

    这篇文章主要介绍了本地使用docker打包部署镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Docker 部署 Minio 对象存储服务器的过程详解

    Docker 部署 Minio 对象存储服务器的过程详解

    Minio是一个轻量级的应用程序,可以在各种环境中运行,包括公共云、私有云和混合云,这篇文章主要介绍了Docker 部署 Minio 对象存储服务器的过程详解,需要的朋友可以参考下
    2024-07-07
  • dockerfile引用自建dns服务方式

    dockerfile引用自建dns服务方式

    这篇文章主要介绍了dockerfile引用自建dns服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-10-10
  • Docker使用java项目工程的部署

    Docker使用java项目工程的部署

    随着容器化技术的广泛应用,Docker成为了一种非常流行的容器化解决方案,本文主要介绍了Docker使用java项目工程的部署,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Docker MQTT安装使用教程

    Docker MQTT安装使用教程

    今天小编就为大家分享一篇关于Docker MQTT安装使用教程,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10

最新评论