Aktuelle mysql-Version für Uberspace kompilieren

Auf Uberspace.de kann es passieren, dass die installierte MySQL-Version veraltet ist und man eine aktuellere Version verwenden möchte. Hier die Schritte um das zu realisieren.

In Kürze bedeutet es: CentOS installierenMySQL kompilierenkompilierte Version von MySQL zu Uberspace übertragenMySQL einrichtenStartscripte erstellenz.B. in WordPress verwendenaufräumenBackup einrichten

Ich benutze folgende beispielhafte Konventionen in dieser Anleitung:

  • grobi: der Username auf uberspace.de
  • enif: der Servername auf dem der Uberspace-Account liegt. Alle Server haben Namen von Sternen oder Sternbildern. Z.B. hamal.uberspace.de oder capella.uberspace.de
  • ich verwende hier CentOS 6.6
  • ich installiere hier im Beispiel die MySQL-Version 5.6.24
  • ich installiere die Version nach ~/.mymysql
  • die MySQL-Version soll auf Port 33306 laufen

CentOS installieren

Zuerst finden wir raus, welche CentOS auf uberspace läuft. Also per SSH verbinden und dieses Kommando absetzen:

> cat /etc/redhat-release
CentOS release 6.6 (Final)

Also laden wir erstmal die Version herunter: Minimal ISO 64 Bit von http://wiki.centos.org/Download. Danach diese Version installieren, z.B. in eine VirtualBox VM.

  • Deutsches System
  • Rechnername: enif (siehe oben)
  • Netzwerk konfigurieren: eth0 bearbeiten → Automatisch verbinden
  • Zeitzone: Berlin

Nach der Installation loggen wir uns als root ein und richten einen Account für grobi ein:

> adduser grobi
> passwd grobi

MySQL kompilieren

Jetzt als root ein paar Pakete installieren:

> yum install wget cmake gcc-c++ ncurses-devel

Wir loggen uns als grobi ein, damit wir beim kompilieren auch ja nicht in den Genuss von root-Rechten kommen, denn die haben wir ja auf Uberspace auch nicht. Nicht dass da was passiert, was uns nachher - als normaler User - das Genick bricht.

> sudo su - grobi

Nun laden wir die gewünschte MySQL als Sourcen herunter:

  • per Browser auf einem anderen Rechner auf http://dev.mysql.com/downloads/mysql/ gehen
  • "Source Code" und "Generic Linux" auswählen
  • bei "Compressed TAR Archive" auf Download klicken
  • auf der nächsten Seite den Link "No thanks, just start my download." kopieren
  • im CentOS mit wget die Sourcen runterladen, entpacken und ins Verzeichnis wechseln. Z. B.:

> wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.24.tar.gz
> tar xzf MySQL-5.6.24.tar.gz
> cd mysql-5.6.24

Zum kompilieren müssen wir ein paar Optionen mitgeben (mehr hier: http://dev.mysql.com/doc/mysql-sourcebuild-excerpt/5.5/en/source-configuration-options.html) und dann geht's los:

> cmake -DCMAKE_INSTALL_PREFIX=/home/grobi/.mymysql/ -DSYSCONFDIR=/home/grobi/.mymysql/
> make
> make install

zu Uberspace übertragen

MySQL 5.6 ist nun im Verzeichnis /home/grobi/.mymysql installiert. Wir übertragen das ganze Verzeichnis in unser $HOME auf Uberspace. Z.B. mit scp:

> cd
> tar czf mymy.tgz .mymysql/
> scp mymy.tgz grobi@enif.uberspace.de: # nicht den Doppelpunkt am Ende vergessen

Es sind ca. 1 GB Daten - gepackt ein Viertel davon. Keine Ahnung, was davon alles wirklich benötigt wird... Vielleicht fummel ich das später mal raus ...

Fahr dein CentOS jetzt runter, es frisst nur Strom.

MySQL einrichten

Unser selbst installiertes CentOS hat jetzt ausgedient. Wir brauchen es nicht mehr. Eigentlich. Wenn du eventuell noch ein paar andere Optionen beim Kompilieren ausprobieren willst, solltest du es noch nicht wegwerfen.

Wir loggen uns erstmal per ssh auf unserem Uberspace ein, entpacken die übertragene Datei und wechseln ins Installationsverzeichnis

> ssh grobi@enif.uberspace.de
> tar xzf mymy.tgz
> cd .mymysql/

Next step: Wir erstellen hier die Datei my.cnf mit diesem Inhalt:

[mysqld]
socket=
port=33306
datadir=/home/grobi/.mymysql/data/
tmpdir=/tmp/

[mysql]
socket=
port=33306
protocol=TCP

Wir erstellen jetzt die Systemtabellen und können dann unseren MySQL-Server starten:

> scripts/mysql_install_db --basedir=/home/grobi/.mymysql/
> bin/mysqld

Nun noch root-Passwort vergeben und ein paar Einstellungen machen (auf einer weiteren Konsole). Dazu muss die Datei bin/mysql_secure_installation angepasst werden, so dass korrekte Werte für port und protocol verwendet werden (dies kann bei MySQL 5.7 angeblich per Kommandozeile geschehen). MySQL 5.6: In der Funktion "sub make_config" fügen wir diese Werte hinzu (nur die 2. Zeile ist neu):

"passwort='$sec_pass'",
"socket=''", "port=33306", "protocol=TCP", # diese Zeile einfügen
"connect-expired-password");

Und ausführen:

> bin/mysql_secure_installation

  • current password: Enter
  • set root password: Y
  • remove anonymous users: Y
  • disallow root login remotely: Y
  • remove test database and access to it: Y
  • reload privilege tables now: Y

Ok! Wir haben fertig und die Datenbank läuft! Cool? Sehr cool!

Jetzt kann man mit

> bin/mysql --port=33306 -u root -p

das Client-Programm verwenden. Dafür sollte man sich einen Alias einrichten. Zum Beispiel so:

> alias mymy='/home/grobi/.mymysql/bin/mysql --port=33306'

Dies funktioniert bei mir ohne User / Password, weil in der schon vorhandenen ~/.my.cnf Passwort und User der alten MySQL-Version stehen. Ich habe für die 5.6er die gleichen Werte für User und Passwort ringerichtet.

Startscripte erstellen

Auch Uberspace-Server werden wohl ab und an mal neugestartet. Selten, aber wenn, dann soll unser MySQL beim hochfahren mitgestartet werden.

> uptime
05:58:35 up 301 days, 10:50, 0 users, load average: 0.29, 0.51, 0.50

Dazu müssen wir einen Service einrichten. Die ganze Anleitung dazu gibt es hier: https://wiki.uberspace.de/system:daemontools. Wir beginnen mit der Vorbereitung:

> test -d ~/service || uberspace-setup-svscan

Schreib jetzt ein Script ~/bin/mymysqld das den MySQL-Daemon startet und mach es ausführbar. Inhalt:

#!/bin/sh

exec ~/.mymysql/bin/mysqld

Die Startscripte erstellst du mit

> uberspace-setup-service mymysqld ~/bin/mymyslqd

Hier kannst du nachlesen, wie du ausprobierst, ob das Starten und Stoppen funktioniert (-u / -d / usw). Loggingausgaben kannst du dir mit

> tail -f ~/service/mymysqld/log/main/*

anzeigen lassen.

Beispiel: in WordPress verwenden

In WordPress musst du die DB_HOST Variable so setzen:

define('DB_HOST', '127.0.0.1:33306'); /* nicht localhost verwenden */

Aufräumen

  • dein selbst installiertes CentOS kann jetzt gelöscht werden
  • Datei mymy.tgz im Home deines Uberspace kann gelöscht werden

Backup einrichten

So! Nachdem nun alles sauber läuft, sollte man sich noch um den Backup kümmern. Denn auch wenn dein Server gesichert wird, ist es keine gute Idee, auf eine Dateisicherung des MySQL-Arbeitsverzeichnisses zu vertrauen. Hier im Beispiel machen wir einen MySQL-Dump in die Datei ~/.mymymsql/backup.dump.

~/.mymysql/bin/mysqldump --host=127.0.0.1 --port=33306 --all-databases > ~/.mymysql/backup.dump

Diesen Befehl in die crontab und gut ist. Denn die Datei backup.dump wird ja beim nächsten Backup mitgesichert.

Man beachte: während eines Dumps wird die Datenbank kurz gesperrt. Bei großen Datenbanken kann das natürlich zu Problemen führen (siehe auch hier).

7 Comments

  1. egal says: - reply

    Ein Hinweis auf Backups wäre auch noch sehr hilfreich! 🙂 Die wird man bei einer eigenen Version auch selbst erstellen müssen.
    Ansonsten natürlich Danke für die Anleitung!

  2. dermats says: - reply

    Vielen Dank für die Anleitung!

    Bis zur Hälfte habe ich mich, manchmal mühsam wie der Ochs vorm Berg, ohne große Kenntnisse durchgeschlagen.

    Bei „> bin/mysql_secure_installation“ jedoch komme ich nicht weiter. Ich erhalte dort nach dem Current Password (Enter) immer folgenden Fehler:

    „Enter current password for root (enter for none):
    ERROR 1045 (28000): Access denied for user ‚root’@’localhost‘ (using password: NO)
    Unable to connect to the server as root user, giving up.
    Cleaning up…“

    Hat jemand eine Idee, wie ich das Problem beheben könnte? Vielen Dank im Voraus!

  3. Leon says: - reply

    Tach,

    was würde gegen das verwenden von cmake direkt auf uberspace sprechen?

    • koem says: - reply

      Hi Leon,

      das ist schon etwas länger her, ich glaube es fehlten einfach ein paar libs. Probier es doch mal aus. Wenn es klappt, können wir eine Anleitung erstellen und hier posten.

      K

  4. Felix says: - reply

    Hey,

    ich hab versucht deiner anleitung mit mysql-5.7.19 zu folgen, leider bricht make bei mir mit dem Fehlern

    [libmysqld/examples/mysql_client_test_embedded] Fehler 1
    [libmysqld/examples/CMakeFiles/mysql_client_test_embedded.dir/all]

    ab. Hast du ne Idee warum?

    Grüße Felix

    • koem says: - reply

      Hi Felix,

      ich hab’s auch mal versucht, leider bekomme ich die gleiche Meldung… Es geht aber anderen auch so – siehe Google.

      hmm
      K