# 云服务器上部署postgresql并远程连接 **Repository Path**: judy6/deploy-on-cloud-servers-postgresql-remote-linkage ## Basic Information - **Project Name**: 云服务器上部署postgresql并远程连接 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-03 - **Last Updated**: 2025-07-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 云服务器上部署 PostgreSQL 数据库 下面给出在 **华为云 Debian 11 云服务器** 上安装 **PostgreSQL 17** 并允许远程连接的完整、可直接落地的步骤。 所有命令均以 **root** 身份执行(华为云控制台默认登录即为 root,无需 `sudo`)。 ## 一、安装 PostgreSQL 17 > **打开本地终端**(Windows 的 PowerShell / CMD 或 macOS/Linux 的终端) > 通过 SSH 以 **root 身份登录**到华为云 Debian 11 服务器,再执行后续所有步骤。 ```bash ssh root@<服务器公网IP> ``` **注意**Debian 11 官方仓库默认只提供 PostgreSQL 13,若直接运行 apt install postgresql-17,会提示E: Unable to locate package postgresql-17。 1. 更新系统并安装依赖 ```bash apt update && apt upgrade -y apt install -y curl ca-certificates gnupg ``` 2. 导入 PostgreSQL 官方仓库 GPG 密钥 ```bash curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /usr/share/keyrings/postgresql.gpg ``` 3. 添加 PostgreSQL 17 官方仓库(Debian 11 对应 `bullseye-pgdg`) ```bash echo "deb [signed-by=/usr/share/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt bullseye-pgdg main" > /etc/apt/sources.list.d/pgdg.list ``` 4. 更新仓库并安装 PostgreSQL 17 ```bash apt update apt install -y postgresql-17 postgresql-client-17 ``` 5. 确认服务已启动并随系统开机自启 ```bash # 设置开机自启并立即启动,如果省略,服务器重启后数据库将不会自动运行,导致服务中断。 systemctl enable --now postgresql # 检查服务状态(确认 Active: active (running)) systemctl status postgresql ``` 6. 验证安装 ```bash su - postgres -c "psql -c 'SELECT version();'" ``` ## 二、配置远程连接 1. 修改监听地址(允许所有 IP 连接) ```bash sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/g" /etc/postgresql/17/main/postgresql.conf ``` 2. 修改认证规则(允许任意 IP 使用密码认证) ```bash echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/17/main/pg_hba.conf ``` 3. 重启服务使配置生效 ```bash systemctl restart postgresql ``` ## 三、设置数据库密码(可选但推荐,建议安装完成后**立即设置密码**) ```bash su - postgres -c "psql -c \"ALTER USER postgres WITH PASSWORD 'YourStrongPassword';\"" ``` ## 四、华为云安全组 / 防火墙放行 5432 端口 1. 进入华为云控制台 → 弹性云服务器 → 安全组 → 添加入方向规则: - 协议:TCP - 端口:5432 - 来源:0.0.0.0/0(或指定允许访问的 IP 段) 2. 若服务器启用了 UFW(Debian 默认未启用,可忽略) ```bash ufw allow 5432/tcp ufw reload ``` ## 五、验证远程连接(支持域名) 在本地或另一台机器上执行: ```bash psql -h <云服务器公网IP或域名> -U postgres -W -d postgres ``` 输入刚才设置的密码,若能成功登录即表示远程连接已打通。 > 域名远程连接说明: > - 确保域名已正确解析到服务器公网 IP。 > - 在 `pg_hba.conf` 中允许域名或域名解析后的 IP 段即可。 ## 六、常用后续操作(可选) - 创建新用户/数据库 ```bash su - postgres -c "psql -c \"CREATE USER test WITH PASSWORD 'test123';\"" su - postgres -c "psql -c \"CREATE DATABASE test OWNER test;\"" ``` - 启用 SSL(如需) 编辑 `/etc/postgresql/17/main/postgresql.conf`,设置 `ssl = on`,并重启服务。 - 备份与恢复 使用 `pg_dump` 和 `pg_restore` 工具。 ## 七、快速检查清单 ✅ 已安装 PostgreSQL 17 ✅ 已修改 `listen_addresses = '*'` ✅ 已添加 `host all all 0.0.0.0/0 md5` ✅ 已重启 PostgreSQL 服务 ✅ 已放行安全组 5432 端口 ✅ 已验证远程连接成功(支持域名) 至此,你的华为云 Debian 11 云服务器上的 PostgreSQL 17 数据库已完全支持远程访问,且可通过域名连接。祝使用愉快! # 在云服务器数据库上删除库 ## 1. 登录到云服务上的PostgreSQL数据库 1. **使用 SSH 登录到云服务器**: ```bash ssh root@your_cloud_server_ip ``` 2. **切换到 `postgres` 用户**: ```bash su - postgres ``` 3. **使用 `psql` 连接到 PostgreSQL 数据库**: ```bash psql ``` ## 2. 断开所有连接到目标数据库的会话 1. **查看所有连接到目标数据库的会话**: ```sql SELECT pid, usename, datname, client_addr, client_port FROM pg_stat_activity WHERE datname = 'your_database_name'; ``` 2. **终止所有连接到目标数据库的会话**: ```sql SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'your_database_name'; ``` ## 3. 删除目标数据库 1. **退出当前数据库连接(切换到默认的postgres默认数据库,如果连接到了目标数据库就要执行,未连接到要删除的库可省略)**: ```sql \c postgres ``` 2. **删除目标数据库**(分号不可省略): ```sql DROP DATABASE your_database_name; ``` 显示`DROP DATABASE`删除成功 3. 查看所有数据库,确认目标数据库已被删除 ```sql \l ``` ## 4. 重新启动 PostgreSQL 数据库服务(如果你使用的是 `sudo`,可以直接在命令前加上 `sudo`。) - **权限问题**:确保你有足够的权限来执行这些命令。如果你不是 `root` 用户,可能需要使用 `sudo`。 - **服务名称**:在某些系统中,PostgreSQL 服务的名称可能不是 `postgresql`,而是类似于 `postgresql-14`(具体版本号)。你可以通过以下命令查看所有服务名称: ```bash systemctl list-units --type=service ``` 1. **切换到 `root` 用户**: - 如果你当前不是 `root` 用户,可以通过以下命令切换到 `root` 用户: ```bash su - root ``` 或者, 2. **重新启动 PostgreSQL 数据库服务**: - 使用 `systemctl` 命令: ```bash systemctl restart postgresql ``` - 或者使用 `service` 命令: ```bash service postgresql restart ``` 3. **检查服务状态**: - 确保服务已经成功重启,可以使用以下命令检查服务状态: ```bash systemctl status postgresql ``` ### 注意事项 - **备份数据**:在删除数据库之前,强烈建议你备份所有重要数据。 - **谨慎操作**:删除数据库是一个不可逆的操作,一旦删除,数据库中的所有数据和结构将无法恢复。 - **同步配置**:确保同步任务的配置正确,特别是冲突处理策略,以避免再次出现表冲突的问题。 通过以上步骤,你可以解决表冲突问题,并重新尝试同步表数据。