Graphite SQLite3 DatabaseError:数据库被locking

在通过stock graphite-web rpm使用Apache mod_wsgi进行初始安装并在CentOS 6.4上设置Graphite时,出现以下“ DatabaseError:database is locked ”消息:

mod_wsgi (pid=9009): Target WSGI script '/usr/share/graphite/graphite-web.wsgi' cannot be loaded as Python module. mod_wsgi (pid=9009): Exception occurred processing WSGI script '/usr/share/graphite/graphite-web.wsgi'. Traceback (most recent call last): File "/usr/share/graphite/graphite-web.wsgi", line 16, in <module> import graphite.metrics.search File "/usr/lib/python2.6/site-packages/graphite/metrics/search.py", line 6, in <module> from graphite.storage import is_pattern, match_entries File "/usr/lib/python2.6/site-packages/graphite/storage.py", line 7, in <module> from graphite.remote_storage import RemoteStore File "/usr/lib/python2.6/site-packages/graphite/remote_storage.py", line 8, in <module> from graphite.util import unpickle File "/usr/lib/python2.6/site-packages/graphite/util.py", line 82, in <module> defaultProfile.save() File "/usr/lib/python2.6/site-packages/django/db/models/base.py", line 460, in save self.save_base(using=using, force_insert=force_insert, force_update=force_update) File "/usr/lib/python2.6/site-packages/django/db/models/base.py", line 553, in save_base result = manager._insert(values, return_id=update_pk, using=using) File "/usr/lib/python2.6/site-packages/django/db/models/manager.py", line 195, in _insert return insert_query(self.model, values, **kwargs) File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 1436, in insert_query return query.get_compiler(using=using).execute_sql(return_id) File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 791, in execute_sql cursor = super(SQLInsertCompiler, self).execute_sql(None) File "/usr/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 735, in execute_sql cursor.execute(sql, params) File "/usr/lib/python2.6/site-packages/django/db/backends/util.py", line 34, in execute return self.cursor.execute(sql, params) File "/usr/lib/python2.6/site-packages/django/db/backends/sqlite3/base.py", line 234, in execute return Database.Cursor.execute(self, query, params) DatabaseError: database is locked 

我已经validation了DB文件(“ /var/lib/graphite-web/graphite.db ”)可以被拥有httpd进程的apache用户访问。

另外,我已经尝试重启github上的这个线程中提到的httpd碳caching进程。

lsof列表显示如下:

 # lsof | grep graphite.db httpd 9006 apache 17u REG 253,2 69632 526186 /var/lib/graphite-web/graphite.db httpd 9007 apache 17u REG 253,2 69632 526186 /var/lib/graphite-web/graphite.db httpd 9008 apache 17u REG 253,2 69632 526186 /var/lib/graphite-web/graphite.db httpd 9008 apache 22u REG 253,2 69632 526186 /var/lib/graphite-web/graphite.db httpd 9009 apache 17u REG 253,2 69632 526186 /var/lib/graphite-web/graphite.db httpd 9009 apache 22u REG 253,2 69632 526186 /var/lib/graphite-web/graphite.db httpd 9010 apache 17ur REG 253,2 69632 526186 /var/lib/graphite-web/graphite.db httpd 9010 apache 18u REG 253,2 512 526174 /var/lib/graphite-web/graphite.db-journal httpd 9010 apache 24ur REG 253,2 69632 526186 /var/lib/graphite-web/graphite.db httpd 9011 apache 17u REG 253,2 69632 526186 /var/lib/graphite-web/graphite.db httpd 9012 apache 17u REG 253,2 69632 526186 /var/lib/graphite-web/graphite.db httpd 9013 apache 17u REG 253,2 69632 526186 /var/lib/graphite-web/graphite.db 

在我看来,它必须与httpd相关,但我没有得到任何的地方。

我坚持下去,发现重新启动httpd 神奇地工作。

但是,我仍然不清楚为什么我以前的一打尝试解决httpd重启错误失败。 我以为这可能是apache + mod_wsgi启动和石墨网页太快,但在随后的重新启动,我一直无法重现锁的竞争条件。 在各种状态下的进一步尝试(apache运行,apache down,root拥有的db等)都没有再现这个错误。 事实上,在这个阶段,我可以删除graphite.db,用“syncdb”重新启动,并成功查看网页,而不用重新启动httpd。 石墨网页在任何情况下运行良好。

我的build议,如果你坚持这一点:

  1. closureshttpd或apache进程。
  2. 删除“graphite.db”文件。
  3. 以“apache”用户 (或拥有httpd进程的用户)重新运行syncdb进程。
  4. 启动httpd进程。
  5. 等待60秒以上,然后再尝试。

这可能相当于“挥动一只死鸡”,但是我是如何摆脱困境的。 随意发布你的经验在这里。