码上灵感
  • 经验

    • 服务器

      • 操作系统
      • 网络配置
      • ssh配置
      • 压力测试
      • IPMI
    • 基础工具

      • xshell
      • xftp
    • 基础环境

      • anaconda
      • v2ray
      • cuda
      • docker
      • nginx
      • ufw
      • git lfs 大文件
    • ubuntu

      • virtualbox
    • minio

      • 安装
    • postgres

      • 安装
    • AI相关折腾

      • maxkb
      • huggingface
      • vllm
      • ktransformers
      • wan2.1
    • 疑难杂症

      • ubuntu自动更新
      • xshell隧道转发失败
      • video自动播放不成功的问题
      • 3d模型快速生成

安装

官方教程 https://www.postgresql.org/download/linux/ubuntu/

安装

sudo apt install -y postgresql-common
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
sudo apt install curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt update
sudo apt -y install postgresql

常用命令

# 切换到postgres用户
sudo -i -u postgres

# 备份流程
pg_dump -U ms_test -h localhost -p 5432 -Fc ms_crm_test > ms_crm_test.dump
pg_restore -U postgres -h localhost -p 5432 -d ms_file_manage_dev ms_crm_test.dump
# 授予用户对数据库的权限:
# 切换到目标数据库(假设数据库名是 ms_crm_test):
\c ms_crm_test
# 授予对整个数据库的访问权限(包括创建对象的权限):
GRANT CONNECT ON DATABASE ms_crm_prod TO ms_crm;
GRANT CREATE ON DATABASE ms_crm_prod TO ms_crm;
# 授予用户对所有表的权限:
# 如果你想授予 ms_test 用户对 ms_crm_test 数据库中所有现有表的所有权限,可以执行以下 SQL 语句:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO ms_test;
# 这将会授予 ms_test 用户对 public 模式中所有表的所有权限。
# 授予用户对未来创建的表的权限:
# 如果希望 ms_test 用户对未来创建的所有表也有权限,可以运行以下命令:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO ms_test;

# 创建数据库并授权
CREATE DATABASE ms_file_manage_dev;
GRANT ALL ON SCHEMA public TO ms_dev;
GRANT ALL PRIVILEGES ON DATABASE ms_file_manage_dev TO ms_dev;
ALTER DATABASE ms_file_manage_dev OWNER TO ms_dev;
GRANT ALL ON DATABASE ms_file_manage_dev TO ms_dev;

自动化备份脚本

  1. 创建脚本

    sudo vim /usr/local/bin/pgsql_backup/xxx.sh
    

    脚本内容

    # 配置参数
    BACKUP_DIR="/var/backups/pgsql/ms_suggestion_box"
    DB_NAME="ms_suggestion_box_dev"  # 替换为实际数据库名
    DATE=$(date +'%Y-%m-%d_%H-%M')
    SQL_BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}-${DATE}.sql.gz"
    DUMP_BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}-${DATE}.dump"
    
    # 创建备份目录(如果不存在)
    mkdir -p ${BACKUP_DIR}
    chown postgres:postgres ${BACKUP_DIR}
    
    # 执行 SQL 格式备份
    sudo -u postgres pg_dump ${DB_NAME} | gzip > ${SQL_BACKUP_FILE}
    
    # 执行 DUMP 格式备份
    sudo -u postgres pg_dump -Fc -f ${DUMP_BACKUP_FILE} ${DB_NAME}
    
    # 保留最近 10 个 SQL 和 DUMP 备份
    find ${BACKUP_DIR} -type f -name "*.sql.gz" | sort -r | sed -n '11,$p' | xargs -r rm -f
    find ${BACKUP_DIR} -type f -name "*.dump" | sort -r | sed -n '11,$p' | xargs -r rm -f
    
    # 输出备份完成信息
    echo "备份完成:"
    echo "  SQL 格式: ${SQL_BACKUP_FILE}"
    echo "  DUMP 格式: ${DUMP_BACKUP_FILE}"
    
  2. 授予执行权限

    sudo chmod +x /usr/local/bin/pgsql_backup.sh
    
  3. 测试执行备份

    sudo /usr/local/bin/pgsql_backup.sh
    
  4. 配置定时任务

    sudo crontab -e
    
  5. 添加定时任务

    0 2 * * * /usr/local/bin/pgsql_backup.sh
    
  6. 定时任务日志

    sudo grep CRON /var/log/syslog