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]