AI 问答
你是一个数学家,请问9.9和9.11哪个大?
企业微信机器人发送消息脚本
AI 问数实现主要步骤
人类感知延迟
Chrome 存储介绍
浏览器缓存
Linux 命令行中 && 和 ; 区别和用法
Windows 系统怎么修改 CPU 的显示型号信息和查看真实的 CPU 型号信息
at 命令详细指南
如何确保提交代码到 git 上时 CRLF 转成 LF
Apache License 2.0
从 0 创建一个 docker 镜像
Linux 文件系统及分区表和 LVM
Linux 查看分区表类型
Windows 批量文件名重命名
将文本文件中的 CRLF 批量转换为 LF
批量将 GB2312 编码转换为 UTF-8 编码
分区类型 MBR 和 GPT 有什么区别
exFAT 和 FAT32 有什么区别
文件的元数据 是什么
花括号展开(Brace Expansion)
cat 显示特殊字符
图标文件有什么在线制作的站点
发布 Chrome 扩展程序的步骤
常用加密方式
密码学的常用攻击方式
3D 打印学习路径
新手 FDM 3D 打印学习路径
Linux 备份和还原 PostgreSQL 数据库方案
数学符号
通过 nginx 转发解决跨域问题
所有希腊字母及其读法
通过 Docker Compose 部署 lscr.io/linuxserver/libreoffice 服务
通过 Docker Compose 部署 libreoffice/online
在 Linux 上为 Docker 配置代理
数学公式测试
祖宗十八代
Windows 重启文件管理器
小米手机怎么设置特殊号码
国债逆回购终极操作指南(2025完整版)——从基础原理到高阶自动交易策略
本文档使用 MrDoc 发布
-
+
首页
Linux 备份和还原 PostgreSQL 数据库方案
以下是一个完整的操作方案,包括安装 `pg_dump`、设置免密登录 (`.pgpass`)、编写备份和还原脚本,以及示例使用。 ## 操作方案:备份和还原 PostgreSQL 数据库 ### 步骤1:安装 `pg_dump` 1. 如何安装 PostgreSQL 客户端工具(包括 `pg_dump` 和 `psql`): #### Ubuntu/Debian ```sh sudo apt update sudo apt install postgresql-client ``` #### CentOS/RHEL ```sh sudo yum install postgresql ``` #### macOS 使用 Homebrew ```sh brew install postgresql ``` ### 步骤2:配置免密登录 1. 创建或编辑 `.pgpass` 文件: ```sh vim ~/.pgpass ``` 2. 添加 PostgreSQL 主机、端口、数据库名、用户名和密码(格式为:`hostname:port:database:username:password`): ```txt localhost:5432:*:ark:your_password_here ``` 3. 确保 `.pgpass` 文件的权限是 600: ```sh chmod 600 ~/.pgpass ``` ### 步骤3:编写备份脚本 `pg_backup.sh` 创建并编辑 `pg_backup.sh`: ```sh vim pg_backup.sh ``` 然后输入以下内容: ```bash #!/bin/bash # 作者: Ivan Zhang # 版本: 1.0.0 # 日期: 2024-06-20 # 描述: 这一个脚本用于备份多个 PostgreSQL 数据库到指定目录。 # 支持长短参数、自动创建不存在的备份目录,并提供用户友好的帮助信息。 # 颜色和提示信息设置 GREEN="\033[32m" RED="\033[31m" YELLOW='\033[33m' FONT="\033[0m" INFO="[${GREEN}INFO${FONT}]" ERROR="[${RED}ERROR${FONT}]" WARN="[${YELLOW}WARN${FONT}]" # 普通提示信息 function info() { echo -e "${INFO} ${GREEN}${1}${FONT}" } # 错误提示信息 function error() { echo -e "${ERROR} ${RED}${1}${FONT}" } # 警告提示信息 function warn() { echo -e "${WARN} ${YELLOW}${FONT}" } # 打印帮助信息 usage() { cat << EOF 用法: ${0##*/} [-h] [-H HOST] [-P PORT] [-U USER] [-D BACKUP_DIR] [-d DATABASES] 备份多个 PostgreSQL 数据库 -h, --help 显示此帮助信息并退出 -H, --host HOST 数据库主机 (默认: localhost) -P, --port PORT 数据库端口 (默认: 5432) -U, --user USER 数据库用户名 (默认: ark) -D, --backup-dir DIR 备份文件保存目录 (默认: /data/backup/pgsql) -d, --databases DBS 逗号分隔的数据库名称列表 (默认: aark_aasccs, ark_wfs2, ark_wfs, ark_zjark, ark_zjarklog) EOF } # 初始化变量并设置默认值 HOST="localhost" PORT="5432" USER="ark" BACKUP_DIR="/data/backup/pgsql" DATABASES=("aark_aasccs" "ark_wfs2" "ark_wfs" "ark_zjark" "ark_zjarklog") # 解析参数并设置变量 parse_args() { PARSED_OPTIONS=$(getopt -o hH:P:U:D:d: --long help,host:,port:,user:,backup-dir:,databases: -- "$@") if [[ $? -ne 0 ]]; then usage exit 1 fi eval set -- "$PARSED_OPTIONS" while true; do case "$1" in -h|--help) usage exit 0 ;; -H|--host) HOST="$2" shift 2 ;; -P|--port) PORT="$2" shift 2 ;; -U|--user) USER="$2" shift 2 ;; -D|--backup-dir) BACKUP_DIR="$2" shift 2 ;; -d|--databases) IFS=',' read -r -a DATABASES <<< "$2" shift 2 ;; --) shift break ;; *) usage exit 1 ;; esac done } # 备份数据库函数 backup_database() { local db_name=$1 local backup_name="${db_name}_$(date +%Y%m%d_%H%M%S).sql" local latest_backup="${BACKUP_DIR}/${db_name}_latest.sql" PGPASSFILE=~/.pgpass pg_dump -h ${HOST} -p ${PORT} -U ${USER} -d ${db_name} -F p -f ${BACKUP_DIR}/${backup_name} if [[ $? -eq 0 ]]; then info "备份 ${backup_name} 成功完成。" ln -sf ${BACKUP_DIR}/${backup_name} ${latest_backup} info "更新最新备份链接到 ${backup_name}" else error "备份 ${backup_name} 失败。" fi } # 主程序 main() { parse_args "$@" # 确保备份目录存在 mkdir -p ${BACKUP_DIR} info "备份目录已确保存在: ${BACKUP_DIR}" # 遍历数据库列表并进行备份 for db_name in "${DATABASES[@]}"; do backup_database ${db_name} done } main "$@" ``` ### 步骤4:编写还原脚本 `pg_restore.sh` 创建并编辑 `pg_restore.sh`: ```sh vim pg_restore.sh ``` 然后输入以下内容: ```bash #!/bin/bash # 作者: Ivan Zhang # 版本: 1.0.0 # 日期: 2024-06-20 # 描述: 这一个脚本用于还原多个 PostgreSQL 数据库从指定目录。 # 支持长短参数、自动创建不存在的备份目录,并提供用户友好的帮助信息。 # 颜色和提示信息设置 GREEN="\033[32m" RED="\033[31m" YELLOW='\033[33m' FONT="\033[0m" INFO="[${GREEN}INFO${FONT}]" ERROR="[${RED}ERROR${FONT}]" WARN="[${YELLOW}WARN${FONT}]" # 普通提示信息 function info() { echo -e "${INFO} ${GREEN}${1}${FONT}" } # 错误提示信息 function error() { echo -e "${ERROR} ${RED}${1}${FONT}" } # 警告提示信息 function warn() { echo -e "${WARN} ${YELLOW}${1}${FONT}" } # 打印帮助信息 usage() { cat << EOF 用法: ${0##*/} [-h] [-H HOST] [-P PORT] [-U USER] [-D BACKUP_DIR] [-d DATABASES] 还原多个 PostgreSQL 数据库 -h, --help 显示此帮助信息并退出 -H, --host HOST 数据库主机 (默认: localhost) -P, --port PORT 数据库端口 (默认: 5432) -U, --user USER 数据库用户名 (默认: ark) -D, --backup-dir DIR 备份文件保存目录 (默认: /data/backup/pgsql) -d, --databases DBS 逗号分隔的数据库名称列表 (默认: aark_aasccs, ark_wfs2, ark_wfs, ark_zjark, ark_zjarklog) EOF } # 初始化变量并设置默认值 HOST="localhost" PORT="5432" USER="ark" BACKUP_DIR="/data/backup/pgsql" DATABASES=("aark_aasccs" "ark_wfs2" "ark_wfs" "ark_zjark" "ark_zjarklog") # 解析参数并设置变量 parse_args() { PARSED_OPTIONS=$(getopt -o hH:P:U:D:d: --long help,host:,port:,user:,backup-dir:,databases: -- "$@") if [[ $? -ne 0 ]]; then usage exit 1 fi eval set -- "$PARSED_OPTIONS" while true; do case "$1" in -h|--help) usage exit 0 ;; -H|--host) HOST="$2" shift 2 ;; -P|--port) PORT="$2" shift 2 ;; -U|--user) USER="$2" shift 2 ;; -D|--backup-dir) BACKUP_DIR="$2" shift 2 ;; -d|--databases) IFS=',' read -r -a DATABASES <<< "$2" shift 2 ;; --) shift break ;; *) usage exit 1 ;; esac done } # 还原数据库函数 restore_database() { local db_name=$1 local backup_file="${BACKUP_DIR}/${db_name}_latest.sql" if [[ ! -f ${backup_file} ]]; then error "备份文件 ${backup_file} 不存在,无法还原 ${db_name}。" return 1 fi PGPASSFILE=~/.pgpass psql -h ${HOST} -p ${PORT} -U ${USER} -d ${db_name} -f ${backup_file} if [[ $? -eq 0 ]]; then info "从 ${backup_file} 还原到 ${db_name} 成功完成。" else error "从 ${backup_file} 还原到 ${db_name} 失败。" fi } # 主程序 main() { parse_args "$@" # 确保备份目录存在 mkdir -p ${BACKUP_DIR} info "备份目录已确保存在: ${BACKUP_DIR}" # 遍历数据库列表并进行还原 for db_name in "${DATABASES[@]}"; do restore_database ${db_name} done } main "$@" ``` ### 步骤5:添加可执行权限 确保脚本有执行权限: ```sh chmod +x pg_backup.sh chmod +x pg_restore.sh ``` ### 步骤6:使用示例 运行备份脚本: ```sh ./pg_backup.sh ``` 运行还原脚本: ```sh ./pg_restore.sh ``` ### 总结 通过这套操作方案,你能够轻松地备份和还原多个 PostgreSQL 数据库。以下是该方案的要点: 1. **安装 PostgreSQL 客户端工具**,包括 `pg_dump` 和 `psql`。 2. **配置免密登录**,在 `.pgpass` 文件中设置数据库的主机、端口、数据库名、用户名和密码,并确保文件权限为 `600`。 3. **编写备份脚本 `pg_backup.sh` 和还原脚本 `pg_restore.sh`**,这两个脚本支持命令行参数配置,能够灵活地指定数据库主机、端口、用户名、备份目录和数据库列表。 4. **添加脚本执行权限**,确保脚本可以被执行。 5. **运行备份和还原脚本**,按照示例命令运行对应的脚本来执行备份和还原操作。 这套方案通过模块化和优化的处理,使备份和还原操作更加简便、直观,并适用于各种环境,便于后期的维护和扩展。
七宇轩远
2024年06月20日
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码