PostgreSQL在Linux上的迁移流程及注意事项
pg_dump/pg_restore)或物理备份(数据目录复制),优先推荐逻辑备份(支持跨版本、跨平台);同时备份配置文件(postgresql.conf、pg_hba.conf),防止配置丢失。rpm -qa | grep postgresql或dpkg -l | grep postgresql查看),并安装必要依赖(如libreadline等,避免启动报错)。使用pg_dump工具生成逻辑备份文件(支持压缩,减少传输时间):
pg_dump -U postgres -h 源服务器IP -p 5432 数据库名 -Fc -j 4 > 数据库名.dump
-U:指定连接用户(需有数据库Owner权限);-h/-p:源服务器地址与端口(默认5432);-Fc:自定义格式(支持并行恢复);-j 4:并行度(提升备份速度,根据服务器CPU核心数调整)。使用scp或rsync将备份文件传输到目标服务器(加密传输,避免数据泄露):
scp 数据库名.dump postgres@目标服务器IP:/home/postgres/备份目录/
在目标服务器上,使用pg_restore工具恢复数据(需指定目标数据库,若数据库不存在需先创建):
# 创建目标数据库(可选)
createdb -U postgres 目标数据库名
# 恢复数据(并行加速)
pg_restore -U postgres -h localhost -p 5432 -d 目标数据库名 -j 4 数据库名.dump
-d:指定目标数据库;-j 4:并行恢复(与备份时的并行度一致,提升效率)。登录目标数据库,执行关键查询(如表记录数、数据一致性校验),确保数据无丢失或损坏:
psql -U postgres -d 目标数据库名 -c "SELECT COUNT(*) FROM 关键表;"
systemctl stop postgresql # CentOS/RHEL
# 或 systemctl stop postgresql@版本号-main # Debian/Ubuntu
将源服务器的PostgreSQL数据目录(默认路径:/var/lib/pgsql/data/或/var/lib/postgresql/版本号/main/)复制到目标服务器(保留目录结构与权限):
rsync -avz /var/lib/pgsql/data/ postgres@目标服务器IP:/var/lib/pgsql/data/
postgresql.conf(路径同数据目录下的postgresql.conf),修改data_directory参数:data_directory = '/var/lib/pgsql/data/'
postgresql.conf中的listen_addresses:listen_addresses = '*' # 允许所有IP连接(生产环境建议指定具体IP)
firewall-cmd --permanent --add-service=postgresql # CentOS
firewall-cmd --reload
systemctl start postgresql
systemctl enable postgresql # 设置开机自启
psql -U postgres -d postgres -c "SELECT version();" # 登录数据库,检查版本
systemctl status postgresql # 检查服务运行状态
GRANT语句),确保访问控制一致。postgresql.conf(如shared_buffers、work_mem)、pg_hba.conf(如认证方式),确保配置符合目标环境需求。postgresql.conf中的性能参数(如shared_buffers设置为内存的25%、maintenance_work_mem设置为1GB以上),提升数据库性能。pglogical扩展或pg_basebackup工具实现增量同步,减少停机时间。pg_start_backup/pg_stop_backup标记备份点),避免数据不一致。