主页 > 手机  > 

shell脚本备份PostgreSQL数据库和库下表

shell脚本备份PostgreSQL数据库和库下表
注意: 以下为对PostgreSQL13.16版本数据库备份shell脚本参考请确认备份节点上psql和pgdump的版本不至于太低,建议>=13.16该脚本目前是对于整库、(默认针对public这个schema,如果有其他schema,请自行添加一层循环)库下各表都做了备份,若不需要对各表进行备份,去除关于备表的for循环即可 一.脚本内容  #!/bin/bash # 定义连接pg的用户、密码、地址、端口 export pg_user="postgres" export pg_pass="SLBpg2025" export pg_host="192.168.2.199" export pg_port="25432" # 备份主目录 bak_path="/data/pg/back" # 备份数据保留周期(单位:天) retain_days=3 # 时间格式 date="$(date +"%Y-%m-%d")" # 日志存放目录 log_file="$bak_path/$date/backup.log" # 忽略备份的数据库 exdbname=' template0| template1| postgres' # 获取所有数据库名 dbname=$(PGPASSWORD=$pg_pass psql -h$pg_host -p$pg_port -U$pg_user -c "SELECT datname FROM pg_database;" | sed -n '3,$p'|head -n -2 | grep -Ev "^($exdbname)$") echo $dbname if [ -z "$dbname" ]; then echo "未获取到有效的数据库列表,请检查 PGSQL 连接和权限。" > $log_file exit 1 fi for db in $dbname; do # 创建数据库对应的备份目录 db_backup_dir="$bak_path/$date/$db" if [ ! -d "$db_backup_dir" ]; then mkdir -p "$db_backup_dir" fi # 备份整个数据库 PGPASSWORD=$pg_pass pg_dump -h$pg_host -p$pg_port -U$pg_user $db | gzip > $db_backup_dir/${db}_$(date +%F).sql.gz if [ $? -ne 0 ]; then echo "备份数据库 $db 失败。" >> $log_file else echo "数据库 $db 备份成功,存放路径 $db_backup_dir/${db}_$(date +%F).sql.gz" >> $log_file fi # 获取数据库中的表列表 tb_list=$(PGPASSWORD=$pg_pass psql -h$pg_host -p$pg_port -U$pg_user -d"$db" -tAc "SELECT tablename FROM pg_tables WHERE schemaname = 'public';") # 检查是否获取到表列表 if [ -z "$tb_list" ]; then echo "未获取到数据库 $db 中的表列表。" >> $log_file continue fi # 对每个表进行操作 for tb in $tb_list; do # 备份单个表 PGPASSWORD=$pg_pass pg_dump -h$pg_host -p$pg_port -U$pg_user -d"$db" -t"$tb" -F p | gzip > "$db_backup_dir/${db}_${tb}_$(date +%F).sql.gz" if [ $? -ne 0 ]; then echo "备份表 $db.$tb 失败。" >> $log_file else echo "表 $db.$tb 备份成功,存放路径 $db_backup_dir/${db}_${tb}_$(date +%F).sql.gz" >> $log_file fi done done find $bak_path -mtime +$retain_days -exec rm -f {} \; 二.执行效果 [root@master01 back]# bash back.sh slb [root@master01 back]# ll total 4 drwxr-xr-x 3 root root 35 Feb 17 22:10 2025-02-17 -rw-r--r-- 1 root root 2157 Feb 17 22:10 back.sh [root@master01 back]# cd 2025-02-17/ [root@master01 2025-02-17]# ll total 4 -rw-r--r-- 1 root root 299 Feb 17 22:10 backup.log drwxr-xr-x 2 root root 112 Feb 17 22:10 slb [root@master01 2025-02-17]# cat backup.log 数据库 slb 备份成功,存放路径 /data/pg/back/2025-02-17/slb/slb_2025-02-17.sql.gz 表 slb.students 备份成功,存放路径 /data/pg/back/2025-02-17/slb/slb_students_2025-02-17.sql.gz 表 slb.employees 备份成功,存放路径 /data/pg/back/2025-02-17/slb/slb_employees_2025-02-17.sql.gz 三.创建定时任务 [root@master01 2025-02-17]# tail -1 /etc/crontab 0 2 * * * root /usr/bin/bash /data/pg/back/back.sh
标签:

shell脚本备份PostgreSQL数据库和库下表由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“shell脚本备份PostgreSQL数据库和库下表