Update: Uberspace.de bietet inzwischen eine eigene Übergangslösung für MariaDB 10.0 an.
Die Server bei Uberspace.de basieren zur Zeit noch auf CentOS 6, das eine relativ alte MySQL Version (5.1) an Bord hat:
mysql -V
mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
Wenn man Software laufen lassen möchte, die neuere Versionen benötigt (z.B. TYPO3 7), kann man entweder warten bis die CentOS 7 Hosts fertig sind oder seinen eigenen Server laufen lassen.
Dies ist ein kleines HowTo, wie man bei Uberspace.de einen eigenen MariaDB Server betreiben kann.
jemalloc installieren
MariaDB benötigt die Bibliothek jemalloc, die auf den Uberspace Hosts nicht vorhanden ist. Diese kann man mit toast installieren:
$ toast arm https://github.com/jemalloc/jemalloc/releases/download/4.0.4/jemalloc-4.0.4.tar.bz2
Da MariaDB nach der Datei libjemalloc.so.1 sucht, toast aber nur libjemalloc.so.2 installiert, wird noch ein Symlink benötigt:
cd ~/.toast/armed/lib
ln -s libjemalloc.so.2 libjemalloc.so.1
MariaDB installieren
Zunächst muss die korrekte Version heruntergeladen werden. Die verfügbaren Versionen findet man auf der Downloadseite von MariaDB.
Wichtig ist hier, dass man die Version für Linux x86_64
verwendet und zwar die ohne (requires GLIBC_2.14+)
im Dateinamen. Das folgende Script lädt die Version 10.1.8 herunter:
mkdir -p ~/opt/mysql
cd ~/opt/mysql
wget https://downloads.mariadb.org/interstitial/mariadb-10.1.8/bintar-linux-x86_64/mariadb-10.1.8-linux-x86_64.tar.gz/from/http%3A//mirrors.n-ix.net/mariadb/ -O mariadb-10.1.8-linux-x86_64.tar.gz
tar -xzf mariadb-10.1.8-linux-x86_64.tar.gz
ln -s ~/opt/mysql/mariadb-10.1.8-linux-x86_64 ~/mysql
Im Verzeichnis ~/opt/mysql
können mehrere Versionen von MariaDB entpackt werden, der Symlink ~/mysql
zeigt immer auf die Version, die aktuell verwendet werden soll. Das ganze ist nur ein Vorschlag für eine mögliche Struktur und kann natürlich an die eigenen Bedürfnisse und Geschmäcker angepasst werden.
MariaDB konfigurieren
Wir müssen MariaDB noch sagen, dass es seine Daten in unserem Home-Verzeichnis ablegen und auch nur auf einem Socket in unserem Home-Verzeichnis lauschen soll.
Dazu erzeugen wir zunächst die benötigten Verzeichnisse:
mkdir ~/opt/mysql/data
mkdir ~/opt/mysql/tmp
Außerdem machen wir ein Backup von der my.cnf
Datei von Uberspace und legen eine neue Version an:
mv ~/.my.cnf ~/.my.cnf.orig
vi ~/.my.cnf
Die my.cnf
Datei sollte folgenden Inhalt haben (kann bei Bedarf natürlich auch angepasst werden):
[client-server]
# Socket konfigurieren, auf dem der Server lauscht
socket=/home/uberuser/mysql/mysql.sock
[client]
# Standard Benutzername und Passwort konfigurieren, damit können mysql
# Befehle ohne Angabe von Zugangsdaten auf der Shell ausgeführt werden.
user=root
password=[Das festgelegte root Passwort]
[mysqld]
# Netzwerk deaktivieren, nur per Socket lauschen
skip-networking
# Datenverzeichnis konfigurieren
data=/home/uberuser/opt/mysql/data
# Verzeichnis für temporäre Dateien konfigurieren
tmpdir=/home/uberuser/opt/mysql/tmp
# Sprachdatei konfigurieren
language=/home/uberuser/mysql/share/english
# Aus der Standardkonfiguration von
# https://mariadb.com/kb/en/mariadb/mysqld-configuration-files-and-groups/
# Create a file where the InnoDB/XtraDB engine stores it's data
loose-innodb_data_file_path = ibdata1:1000M
loose-innodb_file_per_table
# This is the prefix name to be used for all log, error and replication files
log-basename=mysqld
Umgebung einrichten
Damit die MySQL Befehle der Servers mit den MariaDB Befehlen überschrieben werden, muss das ~/mysql/bin
Verzeichnis in die $PATH
Variable aufgenommen werden.
Dazu in der Datei ~/.bash_profile
die Zeile mit der $PATH
Initialisierung wie folgt anpassen:
PATH=$HOME/bin:$HOME/mysql/bin:$PATH
Wichtig ist dabei, dass das mysql
Verzeichnis vorne steht.
Datenbank erstellen
Bevor man die Datenbank starten kann, muss das data
-Verzeichnis initialisiert werden.
Dazu kann folgender Befehl verwendet werden:
cd ~/mysql/
./scripts/mysql_install_db --defaults-file=~/.my.cnf
Sollte dabei etwas schieflaufen, kann man das Verzeichnis einfach löschen und neu anlegen.
Service einrichten
Um den Server zu starten, können die daemontools verwendet werden. Diese müssen zunächst initialisiert werden:
test -d ~/service || uberspace-setup-svscan
Anschließend kann der Dienst eingerichtet werden:
uberspace-setup-service mariadb ~/mysql/bin/mysqld_safe
Da der Befehl noch angepasst werden muss, damit alles richtig läuft, stoppen wir den Dienst:
svc -d ~/service/mariadb
Jetzt bearbeiten wir die Datei ~/service/mariadb/run und passen die letzte Zeile an:
cd $HOME/mysql/
exec ./bin/mysqld_safe --defaults-file=~/.my.cnf 2>&1
Anschließend kann der Dienst wieder gestartet werden:
svc -u ~/service/mariadb
phpMyAdmin
Man kann logischerweise für die Administration nicht das vorinstallierte phpMyAdmin von Uberspace nutzen. Daher installieren wir unser eigenes:
cd /var/www/virtual/$USER/html
wget https://files.phpmyadmin.net/phpMyAdmin/4.5.1/phpMyAdmin-4.5.1-all-languages.zip
unzip phpMyAdmin-4.5.1-all-languages.zip
mv phpMyAdmin-4.5.1-all-languages pma
Anschließend ist phpMyAdmin mit der Standardkonfiguration unter https://uberuser.uberserver.uberspace.de/pma/ erreichbar.
Jetzt müssen wir noch die Konfiguration für unsere Umgebung anpassen:
cd pma
cp config.sample.inc.php config.inc.php
vi config.inc.php
In der Datei config.inc.php
müssen folgende Einstellungen angepasst werden:
$cfg['Servers'][$i]['socket'] = '/home/uberuser/mysql/mysql.sock';
$cfg['Servers'][$i]['connect_type'] = 'socket';
Außerdem sollte ein Blowfish-Secret gesetzt werden:
$cfg['blowfish_secret'] = '[SECRET]';
Da wir zunächst noch kein Passwort für root
haben, müssen wir, solange wir das nicht geändert haben, auch folgende Einstellung anpassen:
$cfg['Servers'][$i]['AllowNoPassword'] = true;
Diese Änderung sollte rückgängig gemacht werden, sobald ein Passwort für root
vergeben wurde!
Empfehlung: das gesamte phpMyAdmin Verzeichnis sollte noch mit einem .htaccess
Schutz versehen werden. Die Anleitung dazu gibts im Uberspace Wiki.
logrotate einrichten
Damit die Log-Dateien von MariaDB nicht zu groß werden, sollte ein logrotate script eingerichtet werden.
Dazu muss zunächst ein eigener logrotate Aufruf eingerichtet werden, wie im Wiki von Uberspace beschrieben.
Schließlich muss in der Datei ~/etc/my-logrotate.conf noch die passende Konfiguration hinterlegt werden:
/home/uberuser/opt/mysql/data/mysqld.err {
create 640 uberuser uberuser
notifempty
daily
rotate 3
missingok
compress
postrotate
# just if mysqld is really running
if test -x /home/uberuser/mysql/bin/mysqladmin && /home/uberuser/mysql/bin/mysqladmin ping &>/dev/null; then
/home/uberuser/mysql/bin/mysqladmin flush-logs
fi
endscript
}
Letzte Hinweise
Der Verwendete Benutzer uberuser
muss natürlich durch euren eigenen Uberspace Namen ersetzt werden.
Zur Zeit läuft das ganze bei mir im Testbetrieb. Sollten Probleme auftreten oder auch nicht, werde ich das hier ergänzen.
Ich freue mich auf eure Erfahrungen und euer Feedback.
[yellow_box]Update!
4.11.2015: Sorry, der Abschnitt Datenbank erstellen hat gefehlt und wurde ergänzt.[/yellow_box]
10 Antworten auf „MariaDB bei Uberspace.de“
Danke für die sehr gut nachvollziehbare Anleitung. Da ich auf Uberspace eine aktuelle Typo3-Installation ausprobieren möchte wollte ich auf diesem Wege eine MySQL auf den benötigten Stand bringen. Leider habe ich wenig Anhnung von der Materie.
Am Ende der Prozedur kann ich mich nicht per phpMyAdmin mit der Datenbank verbinden.
Rufe ich auf der Kommandozeile mysql -v, kommt eine Fehlermeldung:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/home/XXXX/mysql/mysql.sock’ (2 “No such file or directory”). Tatsächlich gibt es auch keine solche Datei. Habe ich etwas übersehen?
Danke für jeden Tip oder Hinweis!
Vielen Dank für das positive Feedback 🙂
Beim Socket gibt es zwei mögliche Fehlerquellen. Zum einen muss in der ~/.my.cnf die Socket Datei richtig konfiguriert sein:
Zum Anderen muss in der
~/etc/service/mysql/run
der Pfad zur~/.my.cnf
angegeben werden:Schließlich muss der Server natürlich noch korrekt laufen. Dazu kann man auch einfach mal den Befehl zum Starten des Servers direkt in der Konsole eingeben bzw. die Datei
~/opt/mysql/data/mysqld.err
prüfen.Ich hoffe ich konnte dir weiterhelfen.
Sorry, mir ist gerade aufgefallen, dass ich einen wichtigen Schritt in der Dokumentation vergessen habe. Daher wird vermutlich deine Datenbank nicht starten.
Bitte den Schritt Datenbank erstellen ausführen. Ich hoffe dann klappt es.
Das war tatsächlich (neben einem weiteren kleinen Fehler) das Problem. Der tolle Support von Uberspace hat das für mich auch parallel rausgefunden. Schönen Dank auch an dieser Stelle.
Mit der deiner Ergänzung sollte es dann auch bei anderen Newbies funktionieren 😉
Gibt es einen Grund warum du das Verzeichnis
~/opt/mysql
nennst und nicht~/opt/mariadb
?Hmm, nein, kein spezieller Grund. Du hast schon recht, man könnte konsequenterweise alle Verzeichnisse
mariadb
anstattmysql
nennen.Leider kann ich meinen Beitrag nicht bearbeiten, deswegen im Nachgang eine Frage: Muss man den normalen MySQL-Prozess noch irgendwie killen, damit dieser nicht in Konflikt mit MariaDB gerät? Bzw. ist es alternativ möglich beide DBS parallel zu betreiben? (Vor allem für die Umstellung interessant.)
Also bei Uberspace wirst du den Prozess nicht killen können, weil der unter einem Useraccount läuft, auf den du keinen Zugriff hast 😉
Aber das ist auch kein Problem. Zum einen, weil die Datenbank nicht auf einem Port lauscht (mit
skip-networking
), sondern nur auf einem Socket. Zum anderen, weil wir unser eigenes Data-Verzeichnis benutzen.Ich hatte leider das Problem, dass ich zwar die MariaDB-Konsole mit
mysql
starten konnte ($PATH
stimmte also schonmal), dort dann aber weiterhin mit den Daten der MySQL-Datenbank zu tun hatte (SHOW DATABASES;
etc), obwohl ich eigentlich bis auf phpMyAdmin und logrotate alle Schritte deiner Anleitung nachvollzogen habe (inklusive des Inititialiseren desdata
-Verzeichnis).Hab’s jetzt erstmal gelassen und hoffentlich alle Spuren wieder entfernt (inklusive Daemon).
Hmm, OK, schade dass es nicht geklappt hat.
Wenn die
~/.my.cnf
korrekt ausgetauscht wurde, sollte eigentlich der Socket der MariaDB Instanz angesprochen werden.Man kann sonst auch den Pfad zur
my.cnf
Datei auch explizit beim Aufruf vonmysql
angeben: