2017-02-06 15 views
1

Когда я пытаюсь создать базу с sqlite3 на каталог EFS, это приводит к ошибке:Почему sqlite3 не работает на Amazon Elastic File System?

$ sqlite3 foo.db SQLite version 3.7.17 2013-05-20 00:56:22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .log stderr sqlite> CREATE TABLE foo (int bar); Error: disk I/O error

База Sqlite3 в вопросе предполагается только история метаданных и будет обновляться нечасто. Параллельный доступ не требуется. Тем не менее, требуется, чтобы при создании процесса создания базы данных процесс можно перезапустить на другом хосте и продолжить, когда предыдущий экземпляр завершен.

Amazon утверждает, что EFS - это «файловая система, доступная для экземпляров Amazon EC2 через интерфейс файловой системы (с использованием стандартных 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=2 0 0

Я понимаю, что it is often generally discouraged to put databases on NFS. Однако я считаю, что, учитывая язык, используемый как Amazon, так и SQLite, разработчики будут продолжать пытаться.

+0

Используйте '.log stderr', чтобы получить дополнительную информацию об ошибке. –

+0

@CL. '.log stderr' не производит никакого дополнительного вывода – Jan

+0

Прежде чем пытаться что-либо написать. –

ответ

4

Update (6 марта 2017):

EFS теперь поддерживает NFS v4.1 обновления блокировки и понижены:

https://aws.amazon.com/about-aws/whats-new/2017/03/amazon-elastic-file-system-amazon-efs-now-supports-nfsv4-lock-upgrading-and-downgrading/

Из документов:

Lock upgrades and downgrades: Amazon EFS returns NFS4ERR_LOCK_NOTSUPP if the client attempts to upgrade or downgrade an existing lock.

Note

Because lock upgrades and downgrades are not supported, use cases that require this feature, such as those using SQLite or IPython, are also not supported in Amazon EFS.

См.:

http://docs.aws.amazon.com/efs/latest/ug/efs-ug.pdf

, а также:

http://docs.aws.amazon.com/efs/latest/ug/nfs4-unsupported-features.html

+1

EFS теперь поддерживает блокировку обновлений и понижений. См. Https://aws.amazon.com/about-aws/whats-new/2017/03/amazon-elastic-file-system-amazon-efs-now-supports-nfsv4-lock-upgrading-and-downgrading/ – user1071840

+0

Спасибо @ user1071840, я рад слышать это для моего случая использования. Я уточню свой ответ, чтобы не заставлять людей заблуждаться, чтобы найти его. – 2tim

+0

Я все еще сталкиваюсь с этой проблемой на моей установке AWS, что-то особенное, что вы определили в настройке EFS/Grafana, чтобы заставить ее работать? –

1

По умолчанию SQLite работает на "Unix" VFS, который использует неподдерживаемый на Amazon EFS модернизации замка. Но вы можете использовать SQL-базы данных на Amazon EFS, если вы измените VFS на «unix-excl», который использует эксклюзивные блокировки файлов и не требует обновлений.

Существует несколько способов указания VFS. Если вы используете командную строку, просто добавьте «-vfs Unix-оборота не включая» вариант:

[email protected] /efs> sqlcipher foo.db -vfs unix-excl 
SQLCipher version 3.8.10.2 2015-05-20 18:17:19 
Enter ".help" for instructions 
Enter SQL statements terminated with a ";" 
sqlite> CREATE TABLE foo (int bar); 
sqlite> .exit 

При использовании из API, то вам необходимо зарегистрировать VFS перед вызовом открытой функции:

sqlite3_vfs_register(sqlite3_vfs_find("unix-excl"), 1); 
sqlite3_open("foo.db", &db); 

При использовании PHP PDO, тогда вы застряли, если только вы не захотите перекомпилировать расширение pdo_sqlite PHP.

+0

Полезно знать, что возможно в конце концов запустить sqlite на EFS. – Jan

+0

Возможная, но по-прежнему плохая идея: https://www.sqlite.org/howtocorrupt.html – 2tim

 Смежные вопросы

  • Нет связанных вопросов^_^