Ubuntu环境下PostgreSQL数据库迁移通用步骤
postgres超级用户权限)。使用pg_dump工具生成源数据库的逻辑备份文件(支持自定义格式、压缩,便于跨服务器恢复):
pg_dump -U postgres -h 源服务器IP -p 源端口 -Fc 源数据库名 > /path/to/backup_file.dump
-U postgres:指定PostgreSQL超级用户(需替换为实际用户名);-h 源服务器IP:源数据库服务器地址(本地可省略,默认localhost);-p 源端口:源数据库端口(默认5432,可省略);-Fc:使用自定义格式(支持压缩,便于后续pg_restore恢复);源数据库名:需迁移的数据库名称;> /path/to/backup_file.dump:备份文件保存路径(如/home/user/db_backup.dump)。使用scp(安全拷贝)或rsync(增量同步)将备份文件从源服务器复制到目标服务器:
scp /path/to/backup_file.dump 目标服务器用户名@目标服务器IP:/path/to/target/
示例(本地传输可直接省略scp步骤,将文件复制到目标目录):
scp /home/user/db_backup.dump postgres@192.168.1.100:/var/lib/postgresql/backups/
postgres用户的密码,完成文件传输。sudo apt update
sudo apt install postgresql postgresql-contrib
安装完成后,PostgreSQL服务会自动启动(默认端口5432)。psql),创建与源数据库同名的空数据库:sudo -u postgres psql
CREATE DATABASE 目标数据库名 OWNER postgres;
\q # 退出psql
替换目标数据库名为源数据库名称(确保名称一致,避免应用层修改)。postgresql.conf中的shared_buffers、work_mem或pg_hba.conf中的访问控制),需将源服务器的配置文件复制到目标服务器的PostgreSQL数据目录(默认/var/lib/postgresql/<版本>/main/),并重启服务:sudo systemctl restart postgresql
使用pg_restore工具将备份文件恢复到目标数据库:
pg_restore -h localhost -U postgres -d 目标数据库名 -Fc /path/to/backup_file.dump
-h localhost:目标数据库服务器地址(本地可省略);-U postgres:目标服务器PostgreSQL用户(需有恢复权限);-d 目标数据库名:目标数据库名称(需与步骤四中创建的名称一致);-Fc:匹配备份文件的格式(需与pg_dump的-Fc一致);/path/to/backup_file.dump:备份文件在目标服务器上的路径。sudo -u postgres psql -d 目标数据库名 -c "SELECT COUNT(*) FROM 关键表名;"
/path/to/backup_file.dump),释放存储空间。postgresql.conf中的参数(如shared_buffers设为内存的25%、work_mem设为4MB~16MB),提升数据库性能。cron工具配置定期备份任务,确保目标数据库数据安全(如每天凌晨2点备份):crontab -e
# 添加以下内容(每天凌晨2点备份目标数据库到指定目录)
0 2 * * * pg_dump -U postgres -d 目标数据库名 -f /var/backups/postgresql_daily.dump