PDA

Bekijk Volledige Versie : Mysql gaat down



Unipolair
19/02/10, 22:13
Hallo allemaal,
Ik heb nu al een paar weken een probleem met mijn webserver, daarop draait:
rocessor Name Intel(R) Pentium(R) 4 CPU 3.20GHz
Vendor ID GenuineIntel
Processor Speed (MHz) 3193.585
Processor Name Intel(R) Pentium(R) 4 CPU 3.20GHz
Vendor ID GenuineIntel
Processor Speed (MHz) 3193.585
Total Memory 2073804 kB
Free Memory 1648760 kB
Total Swap Memory 4192956 kB
Free Swap Memory 4192956 kB
System Uptime 0 Days, 0 Hours and 5 Minutes
Apache 2.2.9 Running
DirectAdmin 1.33.6 Running
Exim 4.67 Running
MySQL 5.1.31 Running
Named 9.2.4 Running
ProFTPd 1.3.1 Running
sshd Running
dovecot 1.1.3 Running
Nu is het zo dat er ergens op een site een script draait (tenminste dat zegt mijn netwerkbeheerder) welke ervoor zorgt dat de mysql 2 tot 3 x per dag over zijn nek gaat en dat ik een reboot moet uitvoeren.
Is er iemand die mij kan vertellen hoe ik achter kom welk proces dit is of hoe ik dit kan oplossen?
Dank!

marsipulami
19/02/10, 22:25
Het is niet 123 gezegd welk script dat kan zijn. Wat is "over zijn nek gaan". Stopt hij en start hij niet weer?

Welk OS, logs?
/tmp al uitgemest?
Is het voorspelbaar wanneer hij gaat?

Lite-On
19/02/10, 22:34
TIP; Update je software ;-)

Al eens in de logs gekeken? 9 van de 10 keer staat er zeer bruikbare informatie in betreft crashes :)

Unipolair
19/02/10, 22:36
dank allen voor het meedenken.

de /tmp uitgemest, ook de logs nagekeken en nergens staat iets herleidbaars.

Het gaat erom dat in mijn service monitor de https erg snel oploopt en daarna wordt de server traag en gaat mysql over zijn nek 'service unavailable' of 'to many connections'

PreServer
19/02/10, 22:38
je zou is kunnen kijken naar: http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html of (als het lukt) kunnen kijken welke queries er draaien als die (bijna) down gaat.

Vaak is het een opeenstapelling van queries als er 1 blocked of heel traag is, waardoor er steeds meer resources gebruikt worden en de server gaat swappen ed.

Lite-On
19/02/10, 22:42
Zet ook eens je server-status feature van apache aan, misschien dat je daar wat bruikbare informatie kunt vinden (oa het aantal req. per sec, en naar welke domeinen o.a. gaan.)

Unipolair
19/02/10, 22:43
weet je wat het rare is ... in de service monitor loopt de httpd snel op in aantallen terwijl de mysql slecht een klein aantal heeft staan.

kunnen jullie wellicht ook de commando's neerzetten, ik ben nog niet zolang command line bezig, maar wil het graag onder de knie krijgen.

thx a million

Lite-On
19/02/10, 22:45
Dit even in je globale httpd.conf zetten:


<Location /server-status>
SetHandler server-status
</Location>

Naderhand; http://ip/server-status

Unipolair
19/02/10, 22:47
ok, en hoe zet ik dat in mijn global http.conf?

sorry voor de newbie

Lite-On
19/02/10, 22:48
ok, en hoe zet ik dat in mijn global http.conf?

sorry voor de newbie

nano /etc/httpd/conf/httpd.conf
:)

PreServer
19/02/10, 22:50
weet je wat het rare is ... in de service monitor loopt de httpd snel op in aantallen terwijl de mysql slecht een klein aantal heeft staan.

kunnen jullie wellicht ook de commando's neerzetten, ik ben nog niet zolang command line bezig, maar wil het graag onder de knie krijgen.

thx a million

Als er een query in mysql blocked of lang duurt wachten alle andere mysql queries totdat deze uitgevoerd is (en dus ook de bij behorende php/httpd proccessen) zeker als mensen het te lang vinden duren en lekker op F5 gaan zitten meppen. Je zou het aantal httpd proccess kunnen beperken en kijken of dat uit maakt (de clients krijgen dan wel een to busy error oid)

Ik denk dat je probleem toch bij mysql zit, en niet bij de webserver.

Unipolair
19/02/10, 22:58
:-( server-status: No such file or directory
heb het toegevoegd met nano, maar vi kan ook?
wat did i do wrong?

ik weet niet wat ik gedaan heb, maar heb zolang ik hier al bezig ben geen problemen, terwijl dit de afgelopen dagen eigenlijk steeds erger werd, maar ik wil graag het lek boven hebben om naar de toekomst problemen te voorkomen

PreServer
19/02/10, 22:59
Btw gaat heel de server over zijn nek of alleen mysql en kan je dus nog wel sshen?

Als het heel de server is, dan is het bijna altijd het geheugen (swappen, en random proccessen worden gekilled ed), als het alleen mysql is dat is het vaak een blocking//slow query, wat vaak is door slechte mysql optimalisatie (max connections, of geheugen gebruik, of gewoon een rotte query)

Unipolair
19/02/10, 23:01
het is echt de mysql, want ik kan wel met ssh inloggen om de bak te rebooten, en ik heb een aantal verschillende (test) sites gemaakt om te checken wat wel en niet werkt .. dus een .html een .php een site met een database (mysql)..

dus ik ben ook van mening dat het in mysql misgaat, alleen zou ik graag achterhalen wie dit op zijn geweten heeft van mijn klanten, die gaat ik dan helpen om er vanaf te komen.

Lite-On
19/02/10, 23:04
:-( server-status: No such file or directory
heb het toegevoegd met nano, maar vi kan ook?
wat did i do wrong?

ik weet niet wat ik gedaan heb, maar heb zolang ik hier al bezig ben geen problemen, terwijl dit de afgelopen dagen eigenlijk steeds erger werd, maar ik wil graag het lek boven hebben om naar de toekomst problemen te voorkomen

Even apache restarten:thumbup:

PreServer
19/02/10, 23:05
het is echt de mysql, want ik kan wel met ssh inloggen om de bak te rebooten, en ik heb een aantal verschillende (test) sites gemaakt om te checken wat wel en niet werkt .. dus een .html een .php een site met een database (mysql)..

dus ik ben ook van mening dat het in mysql misgaat, alleen zou ik graag achterhalen wie dit op zijn geweten heeft van mijn klanten, die gaat ik dan helpen om er vanaf te komen.


Als het weer gebeurt, sshen en dan
mysql -u root -p
starten (zonder -p als er geen password op root zit(

en dan
SHOW FULL PROCESSLIST;
typen en kijken welke qeuries er draaien en welke state ze hebben hoelang ze draaien
waarschijnlijk staat er heel veel op locked en eentje of een paar copying to tmp table

de copying to temp table wil je verbeteren/verwijderen.

je kan ze ook gelijk killen met
kill [proccess id];
(alles wat op copying to tmp table staat)

en je zult zien dat mysql weer tot leven komt

Aan de user of db zou je moeten kunnen zien welke klant het is

Suc6

Unipolair
19/02/10, 23:10
ok, dank allemaal voor de hulp, laten we het even afwachten, maar hier:

[root@web ~]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@web ~]# show full processlist
-bash: show: command not found

??

systemdeveloper
19/02/10, 23:12
Het beste is natuurlijk om het even uit te zoeken, aangezien een 'foute' cronjob ook nog wel eens tabellen helemaal wilt locken.
Je kunt ook even een scriptje in elkaar flansen om elke query die langer dan 5 seconden duurt gewoon te killen. Een dag laten draaien en je hebt een redelijk overzicht van de 'ellende' terwijl je niet direct aanwezig hoeft te zijn.

Edit: Hmm, als bovenstaande post al niet lukt dan zal zo'n scriptje bakken ook niet lukken. In dat geval zou ik uitkijken naar een managed oplossing.

Lite-On
19/02/10, 23:12
ok, dank allemaal voor de hulp, laten we het even afwachten, maar hier:

[root@web ~]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@web ~]# show full processlist
-bash: show: command not found

??

[root@web ~]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)


Staat er heel duidelijk, "access denied".
Blijkbaar is het root password niet correct.

Aangezien je directadmin gebruikt, probeer dit eens (met het gebruik van je directadmin admin-password:
mysql -u da_admin -p

PreServer
19/02/10, 23:12
ok, dank allemaal voor de hulp, laten we het even afwachten, maar hier:

[root@web ~]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)


wel het goede (of geen password) opgeven.
mysql -u root -p
voor root met password
mysql -u root
voor root zonder password

het moet er zo uitzien:

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1746
Server version: 5.1.41-3 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show full processlist;
+------+------+-----------+------+---------+------+-------+-----------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+------+-----------+------+---------+------+-------+-----------------------+
| 1746 | root | localhost | NULL | Query | 0 | NULL | show full processlist |
+------+------+-----------+------+---------+------+-------+-----------------------+
1 row in set (0.02 sec)

mysql> quit
Bye
#

Unipolair
19/02/10, 23:13
ehm ... ik ben toch ook met root passwd ingelogd op de machine, dan hoef ik eigenlijk toch niet meer te su-en naar root? of snap ik het even niet

Lite-On
19/02/10, 23:14
ehm ... ik ben toch ook met root passwd ingelogd op de machine, dan hoef ik eigenlijk toch niet meer te su-en naar root? of snap ik het even niet

Het systeem heeft er zelf ook helemaal niks mee te maken ;)
Het gaat erom dat je inlogged op MySQL met root privileges. Met de root privileges kun je vervolgens de MySQL status uitlezen.

Unipolair
19/02/10, 23:16
ok, maar het rootwachtwoord wat ik gekregen heb is dan dus niet de goede .. dus ik moet dus even passwd voor mysql aanpassen?

PreServer
19/02/10, 23:16
ok, maar het rootwachtwoord wat ik gekregen heb is dan dus niet de goede .. dus ik moet dus even passwd voor mysql aanpassen?

Probeer is zonder password of met je direct admin password.

Het mysql root password is onafhankelijk van je linux root password

Unipolair
19/02/10, 23:17
werkt allemaal niet .. ook het da password niet..
zal wel iets fout doen ..

Lite-On
19/02/10, 23:18
Probeer is zonder password of met je direct admin password.

Het mysql root password is onafhankelijk van je linux root password

Of eventueel:
mysql -u da_admin -p


Met vervolgens het admin wachtwoord wat je gebruikt voor DirectAdmin.

Unipolair
19/02/10, 23:19
als ik nu passwd mysql doe?

marsipulami
19/02/10, 23:20
Tenzij hij het wachtwoordt van DA veranderd heeft voor het gemak. Het "da_admin" password staat op /usr/local/directadmin/conf/mysql.conf

PreServer
19/02/10, 23:20
als ik nu passwd mysql doe?

No offence, maar meschien is het handiger als je iemand met verstand van linux en mysql naar je probleem laat kijken voordat je dingen stuk maakt.

Dit zijn redelijk basis dingen.

Lite-On
19/02/10, 23:21
als ik nu passwd mysql doe?

Dat werkt niet, daarmee wijzig je geen MySQL root password.
Tevens moet je nooit het root password van MySQL zomaar verwijderen, dit kan tot veel problemen lijden.



Had je dit al gedaan?:
Of eventueel:
mysql -u da_admin -p

Met vervolgens het admin wachtwoord wat je gebruikt voor DirectAdmin.

Unipolair
19/02/10, 23:22
ja, maar nu heb ik het wel ..

en nee, no offence, ik waardeer de hulp en kijk goed uit wat ik wel en niet (kan).
ik heb geen passwd veranderd, want dat levert problemen op in de processen..

Marco Mahieu
19/02/10, 23:23
Doe even het volgende:

cat /usr/local/directadmin/conf/mysql.conf
mysql -u da_admin -p

En dan het wachtwoord dat je na het eerste commando op je scherm te zien kreeg...

Lite-On
19/02/10, 23:23
ja, maar nu heb ik het wel ..

en nee, no offence, ik waardeer de hulp en kijk goed uit wat ik wel en niet (kan).
ik heb geen passwd veranderd, want dat levert problemen op in de processen..

Als ik het goed begrijp ben je nu wel succesvol ingelogd op MySQL?

Unipolair
19/02/10, 23:25
YES :-).
Ik moest het default passwd van DA gebruiken en niet het admin ww naar welke ik het veranderd heb.

Mikey
19/02/10, 23:50
Het beste is om te wachten op de to many connections error. Het admin account kan altijd inloggen omdat die +1 op de limit krijgt. Kijk daarna naar je proces list en je ziet welke user de verbindingen openlaat. Hoogstwaarschijnlijk iemand die met pconnect werkt en de verbinding(en) niet meer sluit (slordig). Wat je kan doen is je limit verschijven en een kortere timeout hanteren. Niet de beste oplossing maar geeft je wel adem om je probleem op te zoeken en te verhelpen.

wonko
20/02/10, 08:43
als je het nogmaals hebt, log dan in met ssh, tik dan "mysql" (of "mysql -u username -p" als je my.cnf niet goed staat), en tik daar dan "show full processlist". Post dat eens hier.