Linux 为什么sqlite3不能在Amazon弹性文件系统上工作?
当我尝试在EFS目录上使用Linux 为什么sqlite3不能在Amazon弹性文件系统上工作?,linux,amazon-web-services,sqlite,nfs,Linux,Amazon Web Services,Sqlite,Nfs,当我尝试在EFS目录上使用sqlite3创建基时,这会导致错误: $sqlite3 foo.db SQLite版本3.7.17 2013-05-20 00:56:22 输入“.help”以获取说明 输入以“;”结尾的SQL语句 sqlite>.log标准 sqlite>创建表foo(int-bar); 错误:磁盘I/O错误 所讨论的Sqlite3数据库应该只描述元数据,并且不经常更新。不需要并发访问。但是,如果创建数据库的进程终止,则需要在另一台主机上重新启动该进程,并在前一个实例退出的地方继
sqlite3
创建基时,这会导致错误:
$sqlite3 foo.db
SQLite版本3.7.17 2013-05-20 00:56:22
输入“.help”以获取说明
输入以“;”结尾的SQL语句
sqlite>.log标准
sqlite>创建表foo(int-bar);
错误:磁盘I/O错误
所讨论的Sqlite3数据库应该只描述元数据,并且不经常更新。不需要并发访问。但是,如果创建数据库的进程终止,则需要在另一台主机上重新启动该进程,并在前一个实例退出的地方继续
Amazon声称这是一个“Amazon EC2实例可以通过文件系统接口(使用标准操作系统文件I/O API)访问的文件系统,并且支持完整的文件系统访问语义(如强一致性和文件锁定)。”因此,我假设它适合于手头的任务
/etc/fstab
中的装载选项包括:
eu-west-1a.fs-ID.efs.eu-west-1.amazonaws.com://efs-nfs4-nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=20
我明白。然而,我相信,考虑到Amazon和SQLite都使用的语言,开发人员将继续尝试。更新(2017年3月6日):
EFS现在支持NFS v4.1锁升级和降级:
从文档中:
锁升级和降级:Amazon EFS返回NFS4ERR\u Lock\u NOTSUPP
如果客户端尝试升级或降级现有锁
注意
由于不支持锁升级和降级,因此
还需要此功能,例如使用SQLite或IPython的功能
在Amazon EFS中不受支持
见:
而且:
默认情况下,sqlite在“unix”上运行,而“unix”使用的是亚马逊EFS锁升级不支持的版本。但是,如果将VFS更改为“unix excl”,则可以在AmazonEFS上使用sqlite数据库,后者使用独占文件锁,不需要升级
有几种方法可以指定VFS。如果您使用的是命令行,只需添加“-vfs unix excl”选项:
如果从API使用,则需要在调用open函数之前注册VFS:
sqlite3_vfs_register(sqlite3_vfs_find("unix-excl"), 1);
sqlite3_open("foo.db", &db);
如果使用PHP PDO,那么您将陷入困境,除非您愿意重新编译PDO_sqlite PHP扩展。使用
.log stderr
获取更多错误信息。@CL..log stderr
在您尝试编写任何内容之前不会产生任何附加输出。@CL.我理解,请参阅上面的编辑。这就是我得到的。更新你的sqlite3
工具。很高兴知道,毕竟在EFS上运行sqlite是可能的。可能的,但总体来说还是个坏主意:EFS现在支持锁升级和降级。请参阅Thank@user1071840,我也很高兴听到这个关于我的用例的消息。我将更新我的答案,以免让人们误入歧途。我在AWS设置中仍然遇到这个问题,您在EFS/Grafana设置中定义了什么特别的东西来让它工作?听起来像是AWS支持的问题。
sqlite3_vfs_register(sqlite3_vfs_find("unix-excl"), 1);
sqlite3_open("foo.db", &db);