不时地,从我们的 Drupal 6.20 系统到我们的 Mysql 数据库的数据库连接数达到 100-150,并且在一段时间后网站下线。尝试手动连接到 Mysql 时的错误消息是“由于许多连接错误而被阻止。使用 'mysqladmin flush-hosts' 解除阻止”。由于数据库托管在 Amazon RDS 上,我无权发出此命令,但我可以重新启动数据库,重新启动后网站再次正常工作。直到下一次。
Drupal 在离线之前报告多个错误,有两种类型:
键 'PRIMARY' 查询的重复条目 '279890-0-all':node_access_write_grants /* Guest : node_access_write_grants */ INSERT INTO node_access(nid、realm、gid、grant_view、grant_update、grant_delete)值(279890,'all',0, 1, 0, 0) 在 /var/www/quadplex/drupal-6.20/modules/node/node.module 第 2267 行。
超过锁定等待超时;尝试重新启动事务查询: content_write_record /* Guest : content_write_record */ UPDATE content_field_rating SET vid = 503621, nid = 503621, field_rating_value = 1212 WHERE vid = 503621 in /var/www/quadplex/drupal-6.20/sites/all/modules/cck /content.module 第 1213 行。
这两个查询中的 nid 总是相同的,并且指的是两个经常被自定义模块自动更新的节点。我可以在 Apache 日志中追踪这些错误与异常多的 Web 请求之间的相关性。我会理解该网站会因此而变慢。但:
为什么会出现这些错误,如何解决?在我看来,这与尝试同时更新同一个节点的多个 Web 请求有关。但是 Drupal 肯定应该通过锁定表等来解决这个问题吗?或者我应该以某种特殊的方式处理它?
尽管 Web 负载较高,但为什么数据库会完全锁定并需要重新启动?如果网站仍然可以访问Mysql,那么一旦负载降低,它可以再次提供页面,那不是更好吗?有什么设置吗?
谢谢!