pg_dump(逻辑备份)或pg_basebackup(物理备份)。例如,备份单个数据库可使用pg_dump -U postgres -h 源主机 -p 端口 数据库名 > backup.sql;备份所有数据库及配置可使用pg_dumpall > all_backup.sql。postgres),确保用户有足够的权限操作数据库。适用场景:需要迁移单个/多个数据库、跨PostgreSQL版本(如14→16)、或需要调整数据结构时。
操作步骤:
pg_dump -U postgres -h 源主机 -p 端口 数据库名 -Fc -f backup.dump(-Fc为自定义格式,支持压缩和并行恢复)。scp backup.dump 目标用户@目标主机:/path/to/destination/将备份文件复制到目标服务器。createdb -U postgres 目标数据库名),然后执行pg_restore -U postgres -h 目标主机 -p 端口 -d 目标数据库名 -c backup.dump(-c表示清空目标数据库,避免冲突)。psql -U postgres -d 目标数据库名 -c "SELECT 1"测试连接,或通过psql客户端查看数据完整性。适用场景:同版本PostgreSQL迁移、大规模数据(如TB级)、需要最小化停机时间时。
操作步骤:
systemctl stop postgresql,确保数据不再变化。/var/lib/pgsql/data(可通过psql -U postgres -c "SHOW data_directory;"确认),使用rsync -avz /var/lib/pgsql/data/ 目标用户@目标主机:/path/to/new/data/复制数据(-a保留权限,-v显示进度,-z压缩传输)。chown -R postgres:postgres /path/to/new/data/(确保属主为postgres),chmod -R 700 /path/to/new/data/(目录权限设为700,保证安全)。/etc/postgresql/[版本]/main/postgresql.conf),将data_directory参数修改为新路径(如data_directory = '/path/to/new/data');若需允许远程连接,还需修改listen_addresses = '*'(允许所有IP连接)。systemctl daemon-reload(重新加载systemd配置),systemctl start postgresql(启动服务),并通过psql -U postgres -d postgres -c "SELECT 1"验证服务是否正常。适用场景:需要从MySQL、Oracle等其他数据库迁移到PostgreSQL时。
操作步骤:
yum install -y pgloader(CentOS 7/8)或dnf install -y pgloader(CentOS Stream)。migrate.load文件,内容示例:LOAD DATABASE FROM mysql://mysql_user:mysql_password@mysql_host/mysql_db INTO postgresql://postgres_user:postgres_password@postgres_host/postgres_db(替换为实际用户名、密码、主机和数据库名)。pgloader migrate.load,pgloader会自动处理表结构转换、数据同步和冲突解决。postgresql.conf中的listen_addresses(设为*或特定IP),并编辑pg_hba.conf文件添加允许连接的客户端IP(如host all all 0.0.0.0/0 md5,允许所有IP用密码连接)。systemctl restart postgresql使配置变更生效。psql -U postgres -h 目标主机 -p 端口 目标数据库名连接,确认能正常访问数据。pg_dump的--snapshot选项(确保备份瞬间数据一致)。postgres:postgres,700);逻辑迁移时,pg_dumpall会自动备份角色和权限信息。SELECT COUNT(*) FROM 大表),确认数据量和查询性能符合预期。