我有 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 调谐器就是其中之一。点击链接,你还会发现一些很好的提示和常见的错误。
希望这可以帮助!