postgresql备份脚本
记录下postgresql备份脚本。
# 配置免密登录
# 用户家目录下创建 .pgpass文件
$ cat .pgpass
127.0.0.1:5432:postgres:postgres:u5xhYE3REq
# 文件对应的格式为(前四个字段可以使用通配符 * 号):
hostname:port:database:username:password
# 使用通配符如下:
*:*:*:*:u5xhYE3REq
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 备份脚本
#!/usr/bin/env bash
# postgresql全库备份脚本
set -e
# 定义数据库连接及库名等相关信息
DB_USER=postgres
BACKUP_DIR="."
DATE=$(date +%Y%m%d_%H%M%S) # 当前日期和时间,用于备份文件名
BACKUP_FILE="$BACKUP_DIR/backup_$DATE.sql"
# db指定要备份的数据库,多个库请换行输入
db_name=(
"testdb"
)
[[ ! -d ${BACKUP_DIR} ]] && mkdir ${BACKUP_DIR}
for i in "${db_name[@]}"
do
pg_dump -U $DB_USER -F p -b -v -f $BACKUP_FILE ${i}
done
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "数据库备份成功!备份文件存储在: $BACKUP_FILE"
else
echo "数据库备份失败!请检查错误日志。"
exit 1
fi
# 压缩备份文件
echo "正在压缩备份文件..."
gzip $BACKUP_FILE
# 检查压缩是否成功
if [ $? -eq 0 ]; then
echo "备份文件压缩成功!压缩文件存储在: $BACKUP_FILE.gz"
else
echo "备份文件压缩失败!请检查错误日志。"
exit 1
fi
# 删除旧备份(可选)
# 保留最近7天的备份
echo "正在清理旧备份文件..."
find $BACKUP_DIR -type f -name "backup_*.sql.gz" -mtime +7 -exec rm -f {} \;
echo "旧备份清理完成。"
echo "备份流程完成!"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
运行导出的sql脚本
\i /tmp/pg.sql
psql -f /tmp/pg.sql
psql < /tmp/pg.sql
1
2
3
4
5
2
3
4
5
上次更新: 2024/12/25, 15:38:21