postgres自动备份数据库


1,功能描述

? 直接在安装有postgres psql和pg_dump的linux服务器上,直接脚本即可一键备份数据库到新建的bak2022xxxxxdbname数据库,同时生成**.sql备份文件。

2,实现原理

  • 使用psql(创建新库、备份数据到新的库)、pg_dump(备份数据到**.sql文件)工具命令

  • 使用expect工具(与bash工具类似)命令,自动填充密码

3,脚本文件

bakDatabase.sh文件

#!/bin/bash
# description:	Backing up the Database
# time:			2022.02.12
# author:		wanyu
# example: 		sh bakDatabase.sh dbname

# 目标数据库信息 ip地址、端口、用户名、密码、缓存路径
address=127.0.0.1
port=5432
user=postgres
password=XXXXX
directory=/home/postgres/postgresBakDb/

# 1,创建目录(成功)
echo "<1>,Create a directory {$directory}!"
mkdir -p "$directory""log"


# 2,拼接备份数据库名称(成功)
echo "<2>,Splice the name of the backup database -- {$bakdbname}!"
dbname=$1
date_format=`date +%Y%m%d%H%M`
bakdbname="bak""$date_format""_""$dbname"
logDirectory="$directory"log/info.log
bakFileDirectory="$directory""$bakdbname"".sql"


# 3,备份数据库(成功)
echo "<3>,Backing up the Database {$bakdbname} !"
expect <,Creating a backup database {$bakdbname}!"
expect <,Restore backup database {$bakdbname} data !"
restoreData="psql -h $address -p $port -U $user -W -d $bakdbname -f $bakFileDirectory >& $logDirectory"
expect <

4,注意事项

  • 有可能会出现执行脚本服务器A中的pg_dump版本 与需要备份数据库服务器B上postgres版本不一致导致的数据备份失败的问题

? 解决办法:服务器A上的pg_dump版本 >= 服务器B上postgres版本

  • 服务器A上需要安装有expect插件
apt-get install expect