postgres数据库备份与恢复(宿主机和容器)
数据备份与恢复 pg_dump docker容器操作: 导出数据库:
docker exec -t -u postgres {容器 id} pg_dump {数据库名称} -c > {文件名称} 示例: docker exec -t -u postgres 6666 pg_dump isip -c > dump.sql
恢复数据库:
1 2 3 cat your_dump.sql | docker exec -i {容器 id } psql -U {用户名} -d {数据库名称} 示例:cat your_dump.sql | docker exec -i 6666 psql -U postgres -d isip
宿主机操作: 宿主机备份数据库:
1 2 3 pg_dump -h {主机ip} -U {用户名} {数据库名称} > {备份地址文件} 示例: pg_dump -h 192.168 .199 .253 -U isip isip > /tmp/beifen253.sql
宿主机恢复数据库:
1 2 3 psql -h {主机 ip} -U {用户名} -d {数据库名称} < {备份地址文件} 示例: psql -h 192.168.199.253 -U isip -d isip < /beifen.253.sql
copy docker 容器操作: 导出数据:
1 2 3 docker exec -t -u {用户名} {容器id } psql -d {数据库名称} -c 'copy {表名称}({字段名},{字段名}) to stdout with csv' > {文件名} 示例: docker exec -t -u postgres b57988 psql -d isip -c 'copy result (target,comp_uuid,version ,create_time,update_time) to stdout with csv' > result .csv
导入数据:
1 2 3 4 5 docker cp {文件名} {容器 id }:{文件地址} 示例: docker cp new_result.csv b579:/ \copy result (target,comp_uuid,version_uuid,create_time,update_time) from 'new_result.csv' with csv;
宿主机操作: 宿主机导出数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 copy {表名称} to {文件名} with {文件格式} 示例:COPY user TO '/tmp/data/test.csv' WITH csv; 也可以导出指定的属性:COPY user (name ,password ) TO '/tmp/data/test.csv' WITH csv; 也可以使用select 语句:COPY (select * from user ) TO '/tmp/data/test.csv' WITH csv; 也可以指定要导出哪些字段:COPY (select name ,age from user ) TO '/tmp/data/test.csv' WITH csv header ;
宿主机导入数据:
1 2 3 4 5 6 7 copy {表名称} from {文件名称} whth {文件格式} 示例:COPY user FROM '/tmp/data/test.csv' WITH csv; 如果导出的时候,指定了header 属性,那么在导入的时候,也需要指定:COPY user (name , age) FROM '/tmp/data/test.csv' WITH csv header ;
修改自增长 id 1 2 3 select setval('{表名称}_id_seq' ,(select max(id) from {表名称})); 示例:select setval('isip_id_seq' ,(select max(id) from isip));
强制杀死数据库进程 1 2 3 select pg_terminate_backend(pid) from pg_stat_activity where DATNAME = '表名称' 示例:select pg_terminate_backend(pid) from pg_stat_activity where DATNAME = 'isip'