MySQL Tuning mit tuning-primer.sh

Diskutiere MySQL Tuning mit tuning-primer.sh im Datenbankserver Forum im Bereich Server; Auf meinem Root-Server (Debian, 8GB RAM, AMD6000, SW1, 1Gbit) hatte der MySQL Server viel Ressourcen und somit einen hohen Load verursacht...
developr

developr

Teammitglied
Dabei seit
11.11.2008
Beiträge
336
Auf meinem Root-Server (Debian, 8GB RAM, AMD6000, SW1, 1Gbit) hatte der MySQL Server viel Ressourcen und somit einen hohen Load verursacht. Daraufhin habe ich das Internet leer gesurft und bin auf dieses kleine Tuning-Script gestoßen. Somit konnte ich die CPU Auslastung um das 4-fache verringern :), d.h. der Server wird nun entsprechend das 4-fache an Besuchern verkraften können.


  1. Zu aller erst loggen wir uns auf den Root Server per SSH ein und statten uns mit Root-Rechten aus, anschließend ziehen wir erst einmal das Tuning-Script:
    Code:
    cd /etc/mysql
    wget http://www.day32.com/MySQL/tuning-primer.sh
  2. Nun machen wir das Script ausführbar:
    Code:
    chmod 755 tuning-primer.sh
  3. Optional: Falls wir "bc" nicht installiert haben, müssen wir das auch noch installieren:
    Code:
    apt-get install bc
  4. Nun können wir das Tuning-Script ausführen und unsere my.cnf entsprechend anpassen.
    Code:
    ./tuning-primer.sh
Auch wenn einem das Script dazu rät, die Einstellungen weiter herabzusetzen, stellt sich das später als Trugschluss heraus. Der MySQL Server muss einige Zeit laufen, damit valide Ergebnisse entstehen können. Der Buffer oder auch der Cache beispielsweise braucht ein wenig, damit er sich füllen kann. Lasst euren MySQL Server also ca. 48 Stunden laufen und schaut noch einmal, was das Script rät und optimiert dementsprechend.

Hier meine relevanten Einstellungen aus dermy.cnf für einen 8GB Root:
Code:
bind-address = 127.0.0.1
skip-networking
key_buffer= 2G
max_allowed_packet= 64M
thread_stack= 128K
thread_cache_size = 64K
thread_concurrency= 4
concurrent_insert = 2
low_priority_updates= 1
max_connections = 32
connect_timeout = 10
read_rnd_buffer_size= 4M
read_buffer_size= 4M
table_cache = 1M
sort_buffer = 16M
tmp_table_size= 512M
max_heap_table_size = 512M
query_cache_limit = 512M
query_cache_size= 512M
query_cache_type= 1
 
P

psychotyper

New member
Dabei seit
23.03.2010
Beiträge
3
Ort
Hamburg
Ich habe das Scipt installiert. Allerdings bekomme ich es auch nach erheblicher Anstrngung nicht zum laufen:

tuning-primer.sh
führt dazu, dass er das passwort nicht versteht. Ich habe in der my.cnf das passwort als root unter [client] definiert. Alle Versuche scheitern. Auch auf die Frage, ob ich ein Login parat habe kann ich alle Passwörter eingeben, die je auf der ganzen Welt existiert haben.

Zum Schluss meckert er noch, dass er die Socketdatei nicht öffnen kann. Diese ist vorhanden und auch in der my.cnf unter client und server eingegeben.

Auf dem Server laufen 2 Domain mit shared ip. Auf dieser Maschine läuft auch mysql.


Ich steig da nicht mehr durch. Ich hoffe das Programm lohnt diesen Zeitaufwand
 
developr

developr

Teammitglied
Dabei seit
11.11.2008
Beiträge
336
Ich habe es gerade noch einmal getestet und es läuft fehlerlos. Hast du die tuning-primer.sh in /etc/mysql kopiert?

Do you have your login handy ? [y/N]
y

Dann die Logindaten des MySQL-Root angeben.

Would you like me to create a ~/.my.cnf file for you? [y/N]
n
 
P

psychotyper

New member
Dabei seit
23.03.2010
Beiträge
3
Ort
Hamburg
Do you have your login handy ? [y/N] : y

Das Passwort ist Korrekt. Ich habe als User root verwendet und das Passwort benutzt, welches in der /etc/psa/.psa.shadow steht, also das root Passwort für Mysql.

Danach

Would you like me to create a ~/.my.cnf file for you? [y/N] : n
- FINAL LOGIN ATTEMPT FAILED -
Unable to log into socket: /var/run/mysqld/mysqld.sock


Ich habe in der tuning-primer.sh Datei folgenden Pfad eingefügt socket=/var/run/mysqld/mysqld.sock

der ist auch in der my.cnf angegeben ist.

Funktioniert trotzdem nicht. Die Rechte sind auf chmod 777 warum die einander nicht mögen weiss ich nicht. Und den server habe ich auch neu gebootet. Da Webseiten laufen scheint mit mysq alles ok zu sein

An dieser Stelle de Scripts muckt er auf:

HTML:
final_login_attempt () {
        is_up=$($mysqladmin ping 2>&1)
        if [ "$is_up" = "mysqld is alive" ] ; then
                echo UP > /dev/null
        elif [ "$is_up" != "mysqld is alive" ] ; then
                cecho "- FINAL LOGIN ATTEMPT FAILED -" boldred
        cecho "Unable to log into socket: $socket" boldred
                exit 1
        fi
}
Kann ich nur nicht ganz interpretieren, da fehlt noch ein wenig Sachkenntnis
 
Zuletzt bearbeitet:
developr

developr

Teammitglied
Dabei seit
11.11.2008
Beiträge
336
Puhh.... ich kann jetzt auch nur noch raten. Das MySQL-PW dürfte aber eigentlich nicht in der shadow stehen. Es sind die Zugangsdaten, die du auch bei phpMyAdmin benutzt. Vielleicht hatte ich mich da nicht genau genug ausgedrückt =)?
 
P

psychotyper

New member
Dabei seit
23.03.2010
Beiträge
3
Ort
Hamburg
Es sind die Zugangsdaten, die du auch bei phpMyAdmin benutzt.

Ehm, diese Zugangsdaten zum phpmyadmin sind doch genau die root Zugangsdaten für mysql, damit stehen Sie auch unverschlüsselt in der shadow. Oder habe ich etwa etwas verpasst?

Da ich auf dem Server zwei Domains betreibe, habe ich folglich auch zwei phpmyadmin Zugänge und einen für mysql root. Dieses Passwort für mysql root verwende ich. Tuning-primer.sh soll doch Optimierungsvorschläge für die mysqlserver einstellungen machen. Auf dem Server läuft aber nur ein mysql server und dafür habe ich das Passwort verwendet. Ich frage mich nur grade, ob das bei mir ein Systemspezifisches Problem ist, denn wirklich niemand im Netz kennt sich damit aus oder hat jewals ähliche Probleme damit gehabt. Ich schätze, ganz ehrlich, dass mein Provider an den Sicherheitseinstellungen geschraubt hat, bevor er die Standardinstallationen ausführt. Denn man kann theoretisch 20GB Arbeitsspeicher haben und damit noch nicht einmal eine Webseite in vernünftiger Geschwindigkeit zu laufen bekommen, wenn man einfach die my.cnf nicht richtig konfiguriert.

Echt nervig !


Ne, jetzt hat es funktioniert. Die Socketverbindung ist nicht zustande gekommen, da ein interner Stringvergleich zwischen Server und Client fehlgeschlagen ist. Verantwortlich waren dafür Fehlermeldungen. Ich habe die Fehler behoben und schon läuft alles wunderbar bei mir :)


Danke nochmal für die Hilfe !
 
Zuletzt bearbeitet:
Thema:

MySQL Tuning mit tuning-primer.sh

Oben