博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[SCM]源码管理 - perforce的备份恢复和升级
阅读量:5814 次
发布时间:2019-06-18

本文共 3420 字,大约阅读时间需要 11 分钟。

 

一 p4server上文件类型

0) p4server的文件组成:

 

1)文件类型如下图:

2)depot目录及目录下的所有文件为developer真正提交的代码文件信息,我们成为versioned files ;

(depot下文件为rcs格式,参考:)

例如如下changlist:

在depot下对应的文件为:versiontest.txt,v

head     
1.75
;
access   
;
symbols  
;
locks    
;
comment  @@
;
1.75
date
     
2010.06
.
21.22
.
56.05
;
  author p4
;
  state Exp
;
branches 
;
next     
1.74
;
1.74
date
     
2010.06
.
21.22
.
55.30
;
  author p4
;
  state Exp
;
branches 
;
next     
;
desc
@@
1.75
log
@@
text
@
111
222
@
1.74
log
@@
text
@d1 
3
a3 
1
111
@

 

3)db.*文件为p4 server的database文件,每一个db.*相当于一个database的一个table。很多的地方也称为metadata。存储了所有的除源代码以外的p4 server的信息,例如users,groups,depots,changes,labels,jobs。。。

4)checkpoint+journal文件,是p4 server的database的备份文件。checkpoint是对某一时刻所有的db.*文件的一个镜像。journal是从某个checkpoint以后所有对p4 server的操作记录。

 

例如当你某时创建checkpoint的时候,会生成 checkpoint.5 和 journal.4。 其实checkpoint.5的内容就是等于checkpoint.4内容加上journal.4的内容,journal.4中包含了checkpoint.4到checkpoint.5之间的所有的操作。 在最新的checkpoint后的操作被记录在了journal文件中。 

 

 

二 备份和恢复的文件

1)p4 server备份需要同时备份versioned files 和 checkpoint + journal。

2)p4 server备份和恢复的过程,如下:

  

三 备份

1)验证server的完整性,对上次备份后有修改的文件增加MD5信息和文件的长度信息到p4的db中: 

p4 verify //... 或 p4 verify -qz //...

通过在备份前运行p4 verify, 可以确保对于上次备份后修改的文件的MD5和文件长度信息也被记录到p4的db中。 p4 verify不仅可以在备份前识别出server的问题,而且还可以用来验证恢复是否正确。

2)创建checkpoint,使用命令p4d 且带参数 -jc (journal-create) ,此步骤其实包含了创建checkpoint,然后保存journal为old journal,然后创建新的journal文件来记录将来的修改: 

p4d -jc

或者也可以使用p4 admin 命令,p4 admin需要设置环境变量p4port,p4user,也可以在远程的机器上执行:
p4 admin checkpoint

 

3) 在备份任何文件前请确保checkpoint被成功地创建。可以通过查看p4d -jc的返回值来判断checkpoint是否创建成功,或者也可以检查对应的journal是否被创建。

4) 一旦checkpoint被成功地创建,就可以备份checkpoint文件,老的journal文件,和versioned files。

 

当创建checkpoint的时候,perforce database将被lock。所以最好的办法是第一次备份时手动创建离线的database,
以后备份时,先将最新的journal应用到离线的database,然后再对离线的database备份即可

在2010.2以后的版本中,可以建立replicated server,专门用来创建备份。

默认地checkpoint和journal被创建在p4root设置的目录中,但是可以prefix 来将checkpoint和journal创建到新的目录,在使用了prefix参数后,checkpoint和journal的名字将变为prefix.ckp.n and prefix.jnl.n-1。

 

通常地我们使用p4journal 或对p4d [-jc]使用-J filename来将当前的journal生成到不同于p4root的地方。避免当p4root目录有问题时,从上次checkpoint后的修改也丢失。如果p4 server启动时使用了-J filename参数,则checkpoint时也必须使用使用-J filename来指定正确的journal文件。例如:
#启动server
$ p4d -r $P4ROOT -p 1666 -J /usr/local/perforce/journalfile
#创建checkpoint
$ p4d -r $P4ROOT -J /usr/local/perforce/journalfile -jc
Checkpointing to checkpoint.19...
Saving journal to journal.18...
Truncating /usr/local/perforce/journalfile...

 

四 恢复

1) 停止当前的p4server实例: 

p4 admin stop
(必须是p4 supperuser或admin才可以使用 p4 admin.)

2) 重命名或移除旧的db.*文件:

mv your_root_dir/db.* /tmp

将旧的db.*移动到某个备份目录是比较好的做法,在确保所有的恢复的正确后在删除旧的db.*文件。

3)  使用命令p4d 和参数-jr (journal-restore) 来恢复, 且需要指定最新的checkpoint和当前的journal文件。如果你需要指定serverroot,则-r $P4ROOT参数必须先于-jr:

p4d -r $P4ROOT -jr checkpoint_file journal_file

(或者简单地只恢复到最后的checkpoint:checkpoint_file )

如果只是简单的恢复到最后的checkpoint,则在checkpoint后的修改则没有被恢复。如果你在备份的时候使用了-Z参数来压缩checkpoint,则在恢复的时候需要单独的恢复journal,也就是说将原来的命令:
p4d -r $P4ROOT -jr checkpoint_file journal_file
分解为2个命令:
p4d -r $P4ROOT -z -jr checkpoint_file.gz
p4d -r $P4ROOT -jr journal_file
当使用-z参数的时候,必须显式地指定.gz后缀,且必须确保-r $P4ROOT 先于参数 -jr。

4) 在恢复完成后,使用p4 verify来验证,确保versioned files是新于database:

p4 verify -q //...
此命令验证了versioned files的完整新。-q参数表示只输出错误信息。正常地此命令没有任何输出。

 

五 最佳实践

1)对versioned files和checkpoint+journal 备份到不同的drive。

2)p4d 启动时使用-J来指定最新journal的位置,因为最新的journal在crash前还没有来得及备份。

 

六 P4server的升级

1)停止p4server;

2)创建checkpoint,且备份旧的p4d文件;

3)使用新的p4d替换旧的,在windows上也可以使用perforce.exe来重新安装新的p4d;

4)使用命令server_root -J journal_file -xu;

5)升级成功后重新启动p4server;

 

完!

转载地址:http://lrvbx.baihongyu.com/

你可能感兴趣的文章
17位女性科学家带你预测2017和2027
查看>>
Django 多表联合查询
查看>>
Freebsd系统故障导致系统不能正常启动的恢复数据方法[图]
查看>>
logging模块学习:basicConfig配置文件
查看>>
Golang 使用 Beego 与 Mgo 开发的示例程序
查看>>
DHCP服务器数据备份以及还原
查看>>
ntpdate时间同步
查看>>
Asp.Net MVC 插件化开发简化方案
查看>>
LH乱码转换
查看>>
+++++++子域授权与编译安装(一)
查看>>
编程修养(七)
查看>>
asp.net怎样在URL中使用中文、空格、特殊字符
查看>>
ISA2006实战系列之二:实战ISA三种客户端部署方案(下)
查看>>
Linux后门入侵检测工具,附bash漏洞最终解决方法
查看>>
ASA5585-S20测试方案
查看>>
利用for循环打印实心棱形和空心棱形
查看>>
路由器发布服务器
查看>>
实现跨交换机VLAN间的通信
查看>>
oracle import & export 操作相关脚本
查看>>
LVS集群的体系结构,构建强壮的体系结构里负载均衡层、真实服务器层、后端共享存储层都是相辅相成...
查看>>