MySQL: max_user_connections túllépés

Sziasztok!

Átnéztem az utolsó egy év témáit, de nem találtam ilyet, ezért leírom a problémámat, hátha tud valaki segíteni.
Bérelt tárhelyem van, ahol Apache+MySQL+PHP fut. Néhány napja előjött a fenti hiba, azaz:

Error Code: 1226
User 'myuser' has exceeded the 'max_user_connections' resource (current value: 4294967295)

Ez elég hihetetlenül hangzik, ugyanis száznál kevesebb a napi látogatóim száma, és a PHP-ban csak mysql_connect függvényt használok csatlakozásra, ami elvileg lezárja a kapcsolatot a szkript végén. A MySQL-t ezen kívül naponta 1x hívja a CRON, három, elég hosszú (8-10 perces) nagy INSERT ... SELECT végrehajtására. Ezek eddig gond nélkül lefutottak, most Query interrupted válasszal jönnek vissza.

Miután 1-2 óra múlva ismét engedett csatlakozni (gondolom, ledobta az aktív kapcsolatokat), az alábbi SQL változókat néztem meg:

'Aborted_connects', '11838'
'Connections', '873413'
'Max_used_connections', '40'
'Threads_connected', '15'

A connections változó értéke másodpercenként kb 10-zel nő, az aborted connects első ránézésre arányosan kevesebbel.

Szerintetek hol lehet a gond? Hogyan tudnám megnézni, hogy ki/mi küld ennyi kérést? (A SHOW processlist; csak 1 folyamatot mutat, magát azt, amivel éppen kérem) Bármilyen ötletet köszönettel fogadok!

Hozzászólások

Egy próbát megér:

sudo lsof /usr/lib/libmysqlclient.so*

show full processlist a mysql konzolba.
ha ott tenyleg van egy rakas connectionod, akkor ha nem local socketen keresztul tortenik a mysql kapcsolat letrehozasa, akkor a Host oszlopban ott lesz a kettospont utan azoknak a socketeknek a szama, amin a mysql kliensek kapcsolodnak a szerverhez.
valami ilyesmi lene az eredmeny konzolbol futtatva:


+-------+--------+-----------------+------+---------+------+-------+-----------------------+
| Id    | User   | Host            | db   | Command | Time | State | Info                  |
+-------+--------+-----------------+------+---------+------+-------+-----------------------+
| 89690 | tyrael | localhost:47454 | NULL | Sleep   |  154 |       | NULL                  |
| 89723 | tyrael | localhost       | NULL | Query   |    0 | NULL  | SHOW FULL PROCESSLIST |
+-------+--------+-----------------+------+---------+------+-------+-----------------------+

innen ha lenne shelled, akkor tovabb lehetne nyomozni, hogy mi kapcsolodik azon a socketen (netstat -ntalpu|grep 47454 pl.), ami dobna valami ilyesmi eredmenyt:


tcp        0      0 127.0.0.1:47454         127.0.0.1:3306          ESTABLISHED 28920/mysql

amibol latszodna, hogy a 28920-es piddel futo mysql kliens fogja azt a socketet.
ha ez egy script lenne (apache worker), akkor lsof-fel(lsof -p 28920) meg tudnad nezni pid alapjan, hogy melyik script fut abban a workerben eppen.

tudom hogy ez a topicnyitonak nem feltetlen megoldas, mert nincs shellje, de azert gondoltam masnak hasznos lehet.

-------------------
show processlist: itt csak a sajat useredhez tartozo queryket fogod latni, kiveve ha van SUPER jogod.

Aborted_connects nem feltetlenul azt jelenti, hogy megszakadt a kapcsolat, lehet hogy pl. jogosultsagok miatt letre sem jott, lasd http://www.mysqlperformanceblog.com/2008/08/23/how-to-track-down-the-so…

"Query interrupted" jelentheti azt is, hogy a hosting cegnek van valami cronjobja, ami lelovoldozi a sokaig futo mysql lekerdezeseket, hogy vedje magat az elszabadult queryktol.
erdemes lenne megkerdezni a hosting ceget.

a Connections az egy globalis szamlalo, szoval az hogy novekszik meg nem jelenti azt, hogy te porgeted.

Tyrael

Köszönöm, Tyrael!

Az én usereimnek csak két folyamata fut, hasonlóan, ahogy nálad:

1109356 neils 80.99.127.157:43440 NULL Sleep 23 NULL
1109387 neils 80.99.127.157:43441 NULL Query 0 NULL "SHOW FULL PROCESSLIST"

a Connections az egy globalis szamlalo, szoval az hogy novekszik meg nem jelenti azt, hogy te porgeted.

Itt lehet a kutya elásva, valaki más miatt szívok? A szolgáltató kb. annyit mondott, hogy tiltsam le a WordPress plugineket. Nem, mintha használnék WordPresst :-)))))

"Query interrupted" jelentheti azt is, hogy a hosting cegnek van valami cronjobja, ami lelovoldozi a sokaig futo mysql lekerdezeseket, hogy vedje magat az elszabadult queryktol.
Ja, egyébként igen, van background process killing, csak régen még engedte, mostmár nem. Lehet, hogy szigorúbbra állították.

Segitene a user tablabol a felhasznalohoz tartozo max_* mezok tartalma, ill. megprobalhatod meg a flush user_resources parancsot is.