mysql – Django偶尔也无法连接到数据库(Centos)

前端之家收集整理的这篇文章主要介绍了mysql – Django偶尔也无法连接到数据库(Centos)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个非常奇怪的问题,我有一个运行mod_wsgi的Apache服务器.该网站运行良好,但每隔一段时间我就得到了

IOError: Failed to write data

网站的所有页面上的错误.然后我解决

sudo service MysqLd restart

由于网站不能长时间停机,我没有时间调试这个问题,我只是每次都发生这个命令.我只看到日志中的错误,这就是为什么我无法真正调试它,它没有明确的复制步骤,它只是随机发生.

任何帮助将不胜感激,如果您需要我发布任何配置文件,请告诉我.

编辑:django显示的确切错误是:

(2002,"Can't connect to local MysqL server through socket '/var/lib/MysqL/MysqL.sock' (2)")

我保存了错误消息,它托管了here.(密码已删除)

编辑:
这是MysqL服务器错误日志的摘录.

160610 10:51:53 MysqLd_safe Starting MysqLd daemon with databases from /var/lib/MysqL
160610 10:51:53 [Note] /usr/libexec/MysqL55/MysqLd (MysqLd 5.5.46) starting as process 7658 ...
160617 14:35:47 [Note] /usr/libexec/MysqL55/MysqLd (MysqLd 5.5.46) starting as process 32054 ...
160617 14:35:47 [Note] Plugin 'FEDERATED' is disabled.
160617 14:35:47 InnoDB: The InnoDB memory heap is disabled
160617 14:35:47 InnoDB: Mutexes and rw_locks use GCC atomic builtins
160617 14:35:47 InnoDB: Compressed tables use zlib 1.2.8
160617 14:35:47 InnoDB: Using Linux native AIO
160617 14:35:47 InnoDB: Initializing buffer pool,size = 128.0M
InnoDB: mmap(137363456 bytes) Failed; errno 12
160617 14:35:47 InnoDB: Completed initialization of buffer pool
160617 14:35:47 InnoDB: Fatal error: cannot allocate memory for the buffer pool
160617 14:35:47 [ERROR] Plugin 'InnoDB' init function returned error.
160617 14:35:47 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE Failed.
160617 14:35:47 [ERROR] Unknown/unsupported storage engine: InnoDB
160617 14:35:47 [ERROR] Aborting

我保存了完整的MysqLd.log here.

最佳答案
为什么会崩溃

这似乎是罪魁祸首

160617 14:35:47 InnoDB: Initializing buffer pool,size = 128.0M
InnoDB: mmap(137363456 bytes) Failed; errno 12

这种情况是由服务器耗尽物理内存引起的.这就是errno 12代表的内核错误.

已在Stack Overflowdba.stackexchange上讨论过此主题.如果要模拟低内存情况或尝试手动重现错误,请尝试以下某些工具:
How to fill 90% of the free memory?

快速解决方

如果您能够升级内存,可以试试.如果没有,您可以尝试创建一个大的交换文件.您可能根本没有交换.默认情况下,某些AWS EC2实例没有.您可以通过在shell中键入top来找到答案.如果你没有看到靠近顶部的交换,那意味着你没有.

交换文件会使查询慢很多,但至少比站点下线要好.

您可能想尝试修改systemd文件以使MysqL自动启动.更新:@PeterBrittain指出MysqL正在自动重启,如日志所示.有时虽然数据库可能需要一些时间来重新启动,但如果数据损坏,它将拒绝重新启动.

为什么记忆力耗尽?

如果您没有运行任何其他服务器,2GB将足以托管每天服务6000页的站点.可能是你有一些相当繁重的查询会给数据库带来不必要的负担.可以采取一些补救措施

>使用django-debug-toolbar识别执行许多查询页面,并查看是否可以使用select_related或prefetch_related来减少数量.
>使用MysqL查询日志查找需要很长时间才能执行和优化它们的查询.
>使用缓存来保存复杂查询的结果.

原文链接:https://www.f2er.com/mysql/432860.html

猜你在找的MySQL相关文章