THE MOMENT, THE MEMENTO

2006年03月5日

文件级备份迁移Movable Type网站数据库时应注意的问题

标签: — 吴德文 @ 16:42

这里提到的Movable Type(以下简称MT)网站数据库,仅仅指的是用MT创建的Blog网站的数据库,而且这个数据库是以Berkeley DB格式存储在服务器的文件系统上的,默认情况下,应该是在MT程序目录下mt/db里。

由于Blog网站的数据是以文件的格式存储的,不依赖于其他数据库,也就是说,只要把这个db目录备份起来,网站也就备份好了。但是前阵子我在测试合并MT子站点的过程中,发现恢复备份后有些问题,登录时用户名与密码验证会出错——当时无法解决这个问题,就只好将测试进行到底了,幸好合并测试过程中没有出太大的错误,也算是顺利完成合并的任务了。

现在,升级Blog的MT程序的任务也要提上日程了(这个升级的计划前年就提出来了,一直因为合并问题搁置到现在),但是升级之前一定要把这个备份的问题解决好,因为升级并不像合并时自己可以控制的,难免会出现什么问题。

也许是今天运气好,尝试了几次以后终于发现了问题,其实就是一个很简单的小细节被忽视掉了。

新建一个MT网站,将目前站点的中db目录下的内容复制到新站点中: cp -r db/* XXX/db/;发现可以登录,也就是说问题被解决了,继续找原因。

将新站点db目录更名为db_old,新建目录db,并重复上一步的过程,发现无法登录。

还是新建新站点的db目录,用tar cvf & tar xvf来传递数据库,发现仍然无法登录。

无意中比较新旧站点两个目录的时候,发现新站点的db目录没有给web匿名用户写权限。也就是说一直以来的原因在于db目录中的数据库文件(包含db目录自身)如果是新建的,默认并没有给web匿名用户写权限,导致MT程序无法操作数据库。

原因找出来就好办了,解决方法有三个:
cp命令使用-p 参数来保证复制过程中保留原来的权限, 或者
tar命令释放包时使用-p参数来保留原来的权限(从另一个角度来说,tar在创建包的时候有包含文件原先的权限,但是释放包的时候默认是使用新建文件的权限,而不是文件原先的权限,除非带上-p参数),或者
先尽管复制文件过去,事后再用chmod去修改相应的文件权限

当问题解决以后,忽然有一种似曾相识的感觉,好像这个问题以前是解决过。也许是上次Web服务从Windows平台迁移到Linux平台的时候,碰到这个问题吧,只是自己给忘了。看样子这一阵子脑袋可真是糊涂呀,这次把问题解决了记录一下,希望下次自己忘记的时候能回来找。

忽然间想到,希望不要在blog里看到以前有解决过这个问题的文章,不然就要被笑掉大牙了。


Related:

评论暂缺 »

还没有任何评论。

这篇文章上的评论 RSS feed TrackBack URI

留下评论

You must be logged in to post a comment.

Valid XHTML 1.1 Valid CSS! Creative Commons License WordPress 所驱动