最近在nfs上使用sqlite的时候发现sqlite文件经常被死锁,无法访问,查了一些资料,sqlite官方的建议是不要在network filesystem上使用sqlite,nfs的锁机制会导致sqlite工作不正常。

当时遇到几个问题,有些临时的解决方案:

1. 当nfs server是使用redhat6时,默认使用的是nfs4,server端必须有客户端需要用到nfs目录的用户账号。在centos5.5上挂载nfs目录是需要强制指定-fstype=nfs4,否则sqlite会被死锁,

autofs格式为:

storage02 -fstype=nfs4 -rw,soft,intr 10.1.1.254:/export/QCS-storage02

-fstype=nfs4要写在前面,用空格和后面的隔开,否则这个参数不会生效。

可以用mount命令检查下修改是否生效,正确的情况下type应该是nfs4:

[root@qcs-1-web ~]# mount
/dev/sda1 on / type ext3 (rw)
10.1.1.254:/export/QCS-storage02 on /qcs/storage02 type nfs4 (rw,soft,intr,addr=10.1.1.254)

2. 当使用nfs3时,如果client是redhat6,sqlite也会被死锁,可以使用-o nolock参数临时解决一下,但sqlite官方给出的解释,使用nolock参数可能会导致数据库崩溃http://www.sqlite.org/draft/howtocorrupt.html

所以最好不要在nfs上使用sqlite

http://www.sqlite.org/faq.html#q5