Warning: mysql_connect() [function.mysql-connect]: Too many connections in /home/...

Caprice

Active Member
Вдигам си отново темата за компетентно мнение по следния казус

Сайтовете ми, които са на един и същи сървър се отваряха изключително бавно в продължение на няколко часа, а преди малко окапаха съвсем. Сега пък дава следната грешка:

Warning: mysql_connect() [function.mysql-connect]: Too many connections in /home/caprice/public_html/system/database/mysql.php on line 6
Error: Could not make a database connection using caprice_opct1@localhost
Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in /home/caprice/public_html/system/database/mysql.php on line 66

В сървъра ли е проблема или някъде другаде? Работещите процеси бяха 2/25. На какво се дължи проблема с многото връзки? Мерси
 
Последно редактирано:
От: От: Server down - решение?

Вдигам си отново темата за компетентно мнение по следния казус

Сайтовете ми, които са на един и същи сървър се отваряха изключително бавно в продължение на няколко часа, а преди малко окапаха съвсем. Сега пък дава следната грешка:



В сървъра ли е проблема или някъде другаде? Работещите процеси бяха 2/25. На какво се дължи проблема с многото връзки? Мерси


По принцип това ограничение се задава в глобалният конфигурационен файл на MySQL - /etc/my.cnf в който променливата е:

max_connections=

И в момента в който броя връзки се изчерпа дава грешката която си показала по-горе в поста си, по пътя на логиката е сървърен проблем и е добре да се свържеш с поддръжката за помощ.
 
Re: Server down - решение?

Този проблем съм го наблюдавал и аз. Та ще започна от самото начало (без да искам да те подценявам).
В такива случаи първото нещо което трябва да направиш е да проследиш от къде идва проблема. Бавното отваряне в комбинация с горното означава (поне при мен беше така), че имаш slow query и mysql сървъра увисва, както и апачето което товари машината. Надявам се, че имаш роот достъп за да можеш да изпълниш всичко от долните
Стъпките които е добре да направиш:
1. Отвори си конфигурационния файл който се намира тук /etc/my.cnf и добави следните редове (това ще записва всички запитвания към базата, които имат продължителност повече от 5 секунди).
Код:
log-slow-queries = /var/log/mysql-slow.log
long_query_time = 5
2. Добави този ред из файла - max_connections=300 (това ще увеличи броя на максималните връзки към базата от 100 които са по подразбиране на 300 за да нямаш проблеми докато изследваш проблема)
3. След това създай въпросния файл, примерно с командата touch /var/log/mysql-slow.log и му дай права за писане от сървъра chmod 755 /var/log/mysql-slow.log
4. Рестартирай mysqld с /etc/init.d/mysqld restart
5. С помощта на phpmyadmin оптимизирай всяка една таблица от базите ти, напълно е възможно някоя повредена таблица да ти генерира бавните запитвания.
6. Остава ти да чакаш и от време на време да проверяваш горния лог.
Имай предвид, че с увеличаване на броя връзки, ще се увеличи и размера на рам паметта, която се ползва от mysqld.

Ако си на споделен хостинг, голяма част от тях позволяват ползването на къстъм файл за конфигурация на mysql, но няма да можеш да логваш, а единствено да предадеш параметъра от точка 2 като поставиш файла my.cnf в папката /home/caprice/public_html/

Отново ако имаш руут достъп до сървъра и не ти се кисне пред терминала за да следиш натоварването, може да ползваш долното скриптче, което ползвам от преди време за имейл нотификация при високо натоварване на сървъра. Стъпките за да го ползваш са следните:
1. Създаваш файл /home/caprice/restart.sh, чието съдържание да е нещо такова:
Код:
#!/bin/sh
check=`cat /proc/loadavg | sed 's/\./ /' | awk '{print $1}'`
if [ $check -gt 8 ]
then
[email protected]

host=`hostname`
res=`top -bn 1`
/usr/sbin/sendmail -f $ADMIN -t << sendemail
To: $ADMIN
Subject: High load on [$host]
Load Average : $check

Top command :
$res
sendemail
killall httpd
killall mysqld
wait 10
/etc/init.d/httpd restart
/etc/init.d/mysqld restart
fi
Целта на скрипта е следната: Проверява натоварването на сървъра и ако то е над 8 се изпраща имейл на зададения в примера по-горе, спира всички процеси свързани с апачето, спира всички процеси свързани с mysqld, изчаква 10 секунди да се нормализират нещата и рестартира апаче и майскл. Ако искаш само да получаваш имейл, без да се рестартират услугите, скрипта трябва да изглежда така:
Код:
#!/bin/sh
check=`cat /proc/loadavg | sed 's/\./ /' | awk '{print $1}'`
if [ $check -gt 8 ]
then
[email protected]

host=`hostname`
res=`top -bn 1`
/usr/sbin/sendmail -f $ADMIN -t << sendemail
To: $ADMIN
Subject: High load on [$host]
Load Average : $check

Top command :
$res
sendemail
fi
2. Даваш му права за изпълняване chmod 744 /home/caprice/restart.sh
3. Създаваш файл /etc/cron.d/auto_restart, със съдържание
Код:
* * * * * root /home/caprice/restart.sh >> /dev/null 2>&1
Това ще стартира скрипта всяка минута, който ще проверява за натоварване над 8. Не се притеснявай, няма да получаваш информация, че кронтаба извършва тази процедура.
4. Рестартираш крон демона /etc/init.d/crond restart

Естествено тази цифра от 8 може да си я промениш на колкото ти е удобно. За едно ядро, нормално ползване на процесора е 1.00, за две 2.00. В зависимост от това колко процесора и ядра имаш, нещата може да седят по-поразличен начин при теб. Аз имам достъп до две ядра и за това съм сложил цифрата 8, което значи, че натоварването е 4 пъти повече от оптималното (което свидетелства за проблем).

Ако имаш други питания - драскай, или ми пиши в скайп за по-бързо разрешаване на проблемите.
 
От: Server down - решение?

Алекс, естествено, че се свързах първо със съпорта. За съжаление обаче нито взеха много присърце повтарящия се проблем нито получих удовлетворяващ отговор какво мога аз да направя по въпроса.

Красене, мерси страшно много за изчерпателния отговор. На споделен хостинг съм. По-късно като се прибера ще се опитам да направя това, което си описал, макар че имам леки резерви дали ще се справя :) Сигурно ще се свържа с теб за съдействие
 
Последно редактирано:
От: Warning: mysql_connect() [function.mysql-connect]: Too many connections in /home/

разделям ти старата тема Каприз в нова тема и я правя важна защото е станала много ценен ресурс :) а на ktomov не смогвам да му давам репутация :)
 
От: Warning: mysql_connect() [function.mysql-connect]: Too many connections in /home/

Задмина очакванията ми, наистина ;)
Само още веднъж да напомня, че не можете да се възползвате от препоръките по-горе, ако ползвате споделен хостинг
 
От: Warning: mysql_connect() [function.mysql-connect]: Too many connections in /home/

Е то е нормало да не може, все пак се иска root достъп до сървъра, а на споделен хост такъв достъп си е само за техническата поддръжка. За ВПС и наета машина е друга работата, там всичко заспива. Ама Томов си го знам, че е луд на тема ВПС-и, даже не съм сигурен дали изобщо ползва споделен.

И като заговорихме за репутации - наскоро не съм давал на много хора, не мога да му дам пак, а толкова помощ и съвети съм получил от него точно за ВПС-и, че не е истина просто!
 
От: Warning: mysql_connect() [function.mysql-connect]: Too many connections in /home/

Лично мое мнение, е че long_query_time = 5 е много време. Всяка MySQL заявка отнемаща над 1 максимум 2 секунди заслужава внимание.
 

Горе