版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、开源数据库postgresql数据库备份恢复的方法介绍 pg_dump的用法:数据库的导入导出是最常用的功能之一,每种数据库都提供有这方面的工具,例 如 Oracle 的 exp/imp, Informix 的 dbexp/dbimp, MySQL 的 mysqldump,而 PostgreSQL 提供的对应工具为 pg_dump 和 pg_restore。pg_dump是用于备份PostgreSQL数据库的工具。它可以在数据库正在使用的时 候进行完整一致的备份,并不阻塞其它用户对数据库的访问。转储格式可以是一个脚本或者归档文件。转储脚本的格式是纯文本,包含许多 SQL命令,这些SQL命令可以
2、用于重建该数据库并将之恢复到保存脚本时的状态。 可以使用psql从这样的脚本中恢复。它们甚至可以用于在其它机器甚至是其它 硬件体系的机器上重建数据库,通过对脚本进行一些修改,甚至可以在其它SQL 数据库产品上重建数据库。归档文件格式必须和pg_restore 一起使用重建数据库。它们允许pg_restore 对恢复什么东西进行选择,甚至是在恢复之前对需要恢复的条目进行重新排序。 归档文件也是可以跨平台移植的。D:Program FilesPowerCmdpg_dump -helppg_dump把一个数据库转储为纯文本文件或者是其它格式.数据库名字用法:pg_dump 选项.一般选项:outpu
3、t file or directory nameoutput file format (custom, directory, tar,-f, -file=FILENAME-F, -format=c|d|t|pplain text)详细模式被压缩格式的压缩级别-v, -verbose-Z, -compress=0-9 -lock-wait-timeout=TIMEOUT在等待表锁超时后操作失败help-versoin控制输出内容选项:-data-only-blobs-clean-create-encoding二ENCODING-schema=SCHEMA显示此帮助信息,然后退出 输出版本信息,然
4、后退出只转储数据,不包括模式在转储中包括大对象在重新创建之前,先清除(删除)数据库对象在转储中包括命令,以便创建数据库转储以ENCODING形式编码的数据只转储指定名称的模式不转储已命名的模式在转储中包括 OID在明文格式中,忽略恢复对象所属者只转储模式,不包括数据在转储中,指定的超级用户名只转储指定名称的表只转储指定名称的表-a,-b,-c,-C,-E,-N, -exclude-schema=SCHEMA-o,-O,-s,-S,-t,-T,-x,-n,-oids-no-owner-schema-only-superuser=NAME-table=TABLE-exclude-table=TAB
5、LE-binary-upgrade-no-privileges不要转储权限 (grant/revoke)只能由升级工具使用-column-inserts-disable-dollar-quoting号-disable-triggers-inserts据-no-security-labels-no-tablespaces-no-unlogged-table-data-quote-all-identifierswords-serializable-deferrableanomalies-use-set-session-authorization使用SESSION AUTHORIZATION命令代替
6、ALTER OWNER命令来设置所有权 联接选项:-h,-p,-U,-w,-W,-host=主机名-port 二端口号-username二名字-no-password-password-role=ROLENAME如果没有提供数据库名字,二、pg_dump的使用实例 1、创建两个数据库 CREATEWITH以带有列名的INSERT命令形式转储数据取消美元(符号)引号,使用SQL标准引在只恢复数据的过程中禁用触发器以INSERT命令,而不是COPY命令的形式转储数do not dump security label assignments不转储表空间分配信息do not dump unlogged
7、 table dataquote all identifiers, even if not keywait until the dump can run without数据库服务器的主机名或套接字目录 数据库服务器的端口号以指定的数据库用户联接永远不提示输入口令强制口令提示(自动)do SET ROLE before dump那么使用PGDATABASE环境变量的数值.DATABASE TestDb1OWNER = TestRole1ENCODING = UTF8TABLESPACE = TestTbs1;DATABASE TestDb2OWNER = TestRole1ENCODING =
8、UTF8TABLESPACE = TestTbs1;在 TestDb1 中创建表 csm_bill、cfg_public_int_transport 插入几条记录,并 创建索引,索引使用索引表空间TestTbsIndex。CREATEWITH2、仅迁移数据库结构:E:pg_dump -U TestRole1 -s -f TestDb1.sql TestDb1 口令:-U TestRole1和超级用户-U postgres结果完全相同: E:pg_dump -U postgres -s -f TestDb11.sql TestDb1 E:psql -U TestRole2 -f TestDb1.
9、sql TestDb2 a.txt 2&1 用户TestRole2的口令:导入时,使用-u TestRole2往往有很多权限不够,要想成功导入需要修改相关 数据库对象的属主,所以最好使用超级用户-U postgres:E:psql -U postgres -f TestDbl.sql TestDb2 a.txt 2&1不转储权限选项:-xE:pg_dump -U postgres -x -s -f TestDb12.sql TestDb1TestDb12.sql 比 TestDb1.sql 少了一下几行: Name: public; Type: ACL;Schema:Owner: TestRo
10、lelPUBLIC;FROM nTestRoleln;ALL 01 SCHEMA publicRETWE ALL Cl- SCHEMA publicGRANT ALL CN SCHEMA public TO nTestRoleln; GRAWT ALL ON SCHEMA public TO PUBLIC;为了可以多次运行TestDb1.sql,可以在文件开始加以下两行:drop schema public cascade;create schema public;或者使用-c选项:E:pg_dump -U postgres -c -x -s -f TestDb13.sql TestDb1Te
11、stDb13.sql 比 TestDb1.sql 多以下几行:&二 searcli_patli = public, pg_catalog;E;?OPpublic . idx_int_transport;二二 : public . idx_csmbill;.LTEP. rJ;-.BLE ONLY public. csm_bill l? :? CCN8T?_:::T csmJ3ill_pkey; L . ONLY public . cf g_public_int_trarL3port :.:* CC:;.: . c f g_public_int_transpor t_pk1 .0? TAEL: p
12、ublic . csm二bill;public. cf g_pLLblic_int_transport;EXTENSION plpgsqf;n? SCHEMA public;一一 Name: public; Type: SCHEMA; Schema:Owner: TestRolelSCHEMA public;: SCHEMA public OWER : TestRolelT,;此时,可以多次运行:E:psql -U postgres -f TestDb13.sql TestDb2 a.txt 2&1但是,如果两个库有不同的表或索引,应该使用第一种方法,因为第二种方法在 找不到某些数据库对象时会
13、报错。3、迁移数据库结构和数据(可以实现数据库的备份与恢复)数据的复制使用copy命令:E:pg_dump -U postgres TestDb1TestDb14.sql一一 Data for Name: cfg_public_int_transport; Type: TABLE DATA; Schema: public; Owner: TestRoCOPY cfg_priblic_int_transport (data_sernQ, transporcode/ transport_namef transport_mode,3plane3 4carrier route33 123 456 3I
14、44plane4 4carrier route33 456 123 3I一一 Data for Name: csm bill; Type: TABLE DATA; Schema: public; Owner: TestRolelCOPY csm_biil (bill_sern.Q, bilorg, bill_dstf mailategory, bill_n.Qf dom_intf do_office,zhj fortestbilll1236543C1001D0220013offloadepdirtruck201zhj fortestbi2222226543C10 01D0220013offlo
15、adepdirtruck2 01zhj fortestbi3333336543C1001D0220013offloadepdirtruck201数据的复制使用insert语句:E:pg_dump -U postgres -column-inserts TestDb1TestDb15.sqlTABLE DAA; Schema: public; Owner: TestRoJtransport_CQdejr transportamejr transport transport code, transport name, transport- Data for Name: cfg public int
16、 transport; Type:INSERTcfg_public_int_transport (aata_serrLOjrINSERTcfg_public_int_transpQrt (dataernoj一一 Data for Name:Type: TABLE DATA; Schema: public; Owner: TestRolelINSERT csm_billINSERT 7csm_billINSERT 於二 csmjziill(bill_seriiof_serrLOf(bill_sernofbill_orgf bill_dstfbill_Qrgf bill_dstfbill_org
17、抵11_日5顿mailategoryy billOjmail_categoryf billOjmailategoryy bill_nOjrdom_inty do_of dom_in tf do_of dom int, do of4、把远程linux上PostgreSQL上的cpost数据库结构迁移至本地PostgreSQL(1)在本地建一个完全相同的环境create user cpost inherit createdb;create tablespace pis_data owner cpost locationE:PostgreSQL/data/pis_data;create tables
18、pace pis_index owner cpost locationE:PostgreSQL/data/pis_index;远程数据库cpost仍使用了默认表空间:CREATE DATABASE cpostWITH OWNER = cpost-ENCODING = LATIN9TABLESPACE = pg_default-LC_COLLATE = C-LC_CTYPE = CCONNECTION LIMIT = -1;使用以上三个参数报错,建成后的数据库如下:CREATE DATABASE cpostWITH OWNER = cpostENCODING = UTF8TABLESPACE =
19、 pg_defaultLC_COLLATE = Chinese (Simplified)_Peoples Republic ofChina.936LC_CTYPE = Chinese (Simplified)_Peoples Republic of China.936CONNECTION LIMIT = -1;(2)使用pg_dump迁移表结构使用-h选项,使导出的sql文件直接存放在本地:E:pg_dump -h 132.10.10.11 -p 1234 -U cpost -x -s -f cpost.sql cpostE:psql -U postgres -f cpost.sql 导入成功
20、,但报了一个错误: psql:cpost.sql:22: ERROR: character 0 xe99499 of encoding UTF8 has no equivalent in LATIN9字符集错误,字符集问题详见我的另一篇blog:由PostgreSQL的区域与字符集 说起 三、使用pg_dump和pg_restore实现数据库的备份与恢复E:pg_restore -helppg_restore从一个归档中恢复一个由pg_dump创建的PostgreSQL数据库.用法:文件名pg_restore 选项.一般选项:-dbname二名字-file=文件名-format二c|d|t-l
21、ist-verbose连接数据库名字输出文件名backup file format (should be automatic)打印归档文件的TOC概述详细模式显示此帮助信息,然后退出输出版本信息,然后退出恢复控制选项:只恢复数据,不包括模式在重新创建数据库对象之前需要清除(删除)数-d,-f,-F,-l,-v,-help-version-a, -data-only-c, -clean据库对象创建目标数据库发生错误退出,默认为继续恢复指定名称的索引可以执行多个任务并行进行恢复工作从这个文件中使用指定的内容表排序输出-C, -create-e, -exit-on-error-I, -index二名
22、称-j, -jobs=NUM-L, -use-list=文件名-n, -o, -P, -s, -S, -t, -T, -x, -1,-schema=NAME在这个模式中只恢复对象-no-owner忽略恢复对象所属者-function二名字(参数)恢复指定名字的函数只恢复模式,不包括数据使用指定的超级用户来禁用触发器恢复指定命字的表恢复指定命字的触发器跳过处理权限的恢复(grant/revoke)作为单个事务恢复在只恢复数据的过程中禁用触发器-schema-only-superuser=NAME-table二NAME-trigger=NAME-no-privileges-single-transaction -disable-triggers-no-data-for-failed-tables没有恢复无法创建表的数据-no-security-labelsdo not restore security labels-no-tablespaces不恢复表空间的分配信息-use-set-session-authorization 使用 SESSION AUTHORIZATION 命令代替 ALTER OWNER命令来设
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年主管护师(中级)高频难、易错点题【各地真题】附答案详解
- 2026年监控理论考试题及答案
- 2025年新版医学法律法规考试题库及答案
- 2026年国考公共基础知识压轴试题及答案
- 2026年浙江中烟工业有限责任公司高层次人才招聘笔试考试题库及答案解析
- 2026年广告美术基础试题及答案
- (2026年)新丰县遴选试题及答案
- 2026年UV真空电镀涂料行业分析报告及未来发展趋势报告
- 2026年省考公共基础知识真题题库(含解析)
- 2026年妇科医师定考试题及答案
- 检验科职业暴露培训课件
- 幼儿园游戏化教学
- GB 45671-2025建筑防水涂料安全技术规范
- 2020年高考地理试卷(北京)(解析卷)
- 预包装食品配送服务投标方案(技术方案)
- 小学科技社团课橡皮筋动力小车课件
- GB/T 44113-2024用户侧电化学储能系统并网管理规范
- 入党申请书专用纸-A4单面打印
- JC T 49-2017 工业原料云母
- 裕能思源高端圆柱锂离子电池项目环评报告
- 机房建设施工培训
评论
0/150
提交评论