postgres自动备份数据库
2022/2/12 2:42:40
本文主要是介绍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 <<EOF #!/bin/expect set timeout 60 spawn pg_dump -h $address -p $port -U $user -W -f $bakFileDirectory -d $dbname expect "*assword:" {send "$password\r"} expect eof EOF # 4,创建备份数据库 echo "<4>,Creating a backup database {$bakdbname}!" expect <<EOF #!/bin/expect set timeout 60 spawn psql -h $address -p $port -U $user -W expect "*assword:" {send "$password\r"} expect "postgres=# " { send "CREATE DATABASE \"$bakdbname\";\r" send "\\\q\r" } expect eof EOF # 5,恢复备份数据库 echo "<5>,Restore backup database {$bakdbname} data !" restoreData="psql -h $address -p $port -U $user -W -d $bakdbname -f $bakFileDirectory >& $logDirectory" expect <<EOF #!/bin/expect set timeout 60 spawn $restoreData expect "*assword:" {send "$password\r"} expect eof EOF
4,注意事项
- 有可能会出现执行脚本服务器A中的pg_dump版本 与需要备份数据库服务器B上postgres版本不一致导致的数据备份失败的问题
解决办法:服务器A上的pg_dump版本 >= 服务器B上postgres版本
- 服务器A上需要安装有expect插件
apt-get install expect
这篇关于postgres自动备份数据库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?