1、在数据量小(1-2GB大小)的情况下可以直接使用pg_dump导出数据,psql导入数据,如下:
#导出数据
nohup /data/server/pgsql/bin/pg_dump -h 127.0.0.1 -U dbuser -p 5432 database --column-inserts | gzip > /tmp/database_back.sql.gz &
#导入数据
nohup gunzip -c /tmp/database_back.sql.gz | psql -h 127.0.0.1 -U dbuser -d database &
如果数据量比较大(10GB以上),导出数据至少需要2个小时以上,导入数据需要15个小时以上。
2、使用多线程并行导出导入数据
#多线程导出数据 -j 16 16可以等于cpu核数,只有在使用目录格式 (directory format) 进行备份时才支持并行备份
nohup /data/server/pgsql/bin/pg_dump -h 127.0.0.1 -U dbuser -p 5432 database --column-inserts -F d -j 16 -f /tmp/database_back &
#多线程导入数据
nohup /data/server/pgsql/bin/pg_restore --clean -h 127.0.0.1 -U dbuser -p 5432 -d database -j 16 -F d /tmp/database_back &
#实时查看进程,进程运行结束之后数据库也就导入完成了
ps aux | grep pgsql
ps aux | grep pg_dump
ps aux | grep pg_restore
ps -p 13989
top -p 13989
#实时查看目录大小变化
watch -n 1 du -sm /data/server/pgsql/data
#使用多线程可以明显提示数据库的导出导入速度
至此,PostgreSQL使用pg_dump+pg_restore多线程导出导入数据完成。