当流量激增时,MySQL 就会消失

当流量激增时,MySQL 就会消失

我有 2 台服务器运行 1 个网站。服务器 #1 专用于 Apache,向互联网提供网站文件。服务器 #2 专用于 MySQL,向服务器 #1 提供数据库。千兆以太网连接 2 台服务器。

我遇到的问题是服务器 #2,当流量激增时,它会导致 MySQL 停止运行,我不得不重新启动 MySQL 才能使其重新上线。当在线流量过多时,页面就会挂起,每个人都会看到数据库错误屏幕。

我认为my.cnf文件没有正确拨入,需要进行优化。

两台服务器都是相同的 Dell PowerEdge 服务器,规格如下:

  • CPU - 双 Intel Xeon 2.40GHz
  • 内存 - 3GB RAM
  • 存储 - 2x36GB 10K SCSI 硬盘(RAID 1)
  • Linux - Debian GNU/Linux 4.0 (etch) 内核版本 2.6.18-6-686 (SMP)
  • Apache v2.2.3
  • PHP 5.2.0-8+etch16
  • MySQL 5.0.51a-24+lenny2+spu1-log

答案1

http://www.day32.com/MySQL/有一个脚本可以为您提供一些非常基本的调整参数。您的错误日志说了什么?服务器是否真的崩溃了?推送到交换区是否会导致机器运行速度极慢,但它会恢复?

必须等待发布,serverfault 认为我是一个机器人。

答案2

尝试增加服务器端允许的最大数据包大小和等待超时值

另外,也许您的应用服务器尝试连接到 mysql 但出现错误,如果是这样,一段时间后它将被列入黑名单。尝试执行 mysqladmin flush-hosts 而不是完全重启。如果这有帮助,请将命令放入 crontab 中,然后您将有时间调查问题而不会导致生产停机。启用所有客户端日志并开始。

答案3

(作为答案发布,以便我可以使用格式)

发布以下内容:

grep -vE '^#' /etc/my.cnf
for db in $(mysql -e 'show databases' | sed 1d); do mysql -e 'show table status' $db | awk '{print $2,$5}'; done
mysqlreport

获取 mysqlreporthttp://hackmysql.com/mysqlreport如果你无法获得 apt-get 它。

答案4

我猜你需要适当调整你的 my.cnf。MySQL 默认配置太保守了。

一个常见的错误是将索引块使用的缓冲区大小设置为较低的值,这可能会减慢 MySQL 的速度key_buffer_size。请将其调整为 RAM 的至少 30%,否则重新索引过程可能会太慢。

另一方面,通过激活 来记录您的慢查询slow_query_log。这将记录所有运行时间超过 2 秒的查询(这也可以调整)。然后,查看此日志并查看可以优化哪些查询。有时,这只是创建索引的问题。

您还可以show processlist在 MySQL shell 中运行并查看哪些查询不断出现。这些查询也值得关注,因为它们可能可以进行优化。

您也许还会受益于 MySQL 查询缓存。

网上有一些很好的脚本可以帮助您调整 MySQL 服务器。MySQL 调谐器就是其中之一。点击链接,你还会发现一些很好的提示和常见的错误。

希望这可以帮助!

相关内容