%
% mysql.tex
% Last update: $Id$
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Kapitel MariaDB/MySQL %%%%%%%%%%%%%%%%%%%%%%%%%

\chapter{Der MariaDB/MySQL Datenbank Server}
\marklabel{mysqldatabase}{}
\index{MariaDB}
\index{MySQL}

\section{Allgemeines}

    \emph{'MariaDB/MySQL'} ist ein vollwertiges Datenbankmanagementsystem, das
    sich als Standarddatenbank im Zusammenspiel mit Webanwendungen etabliert hat.
    In Kombination mit dem Webserver Apache und der Scriptsprache PHP spielt
    es in den unterschiedlichsten Anwendungsszenarien seine St"arken aus.
    Nahezu alle Script- und Programmiersprachen unterst"utzen
    \emph{'MariaDB/MySQL'}.

\section{Installation}

    Das Installationsscript erkennt automatisch, ob bereits ein
    \emph{'MariaDB/MySQL'} Server installiert ist. Vorhandene Datenbanken
    werden innerhalb der Versionslinie komplett "ubernommen.

    Es k"onnen mehrere Versionslinien nebeneinander auf einer Maschine
    installiert werden. Somit kann, wenn eine Anwendung auf eine bestimmte
    "altere Version angewiesen ist, auch eine Neue Versionslinie f"ur
    aktuelle Anwendungen installiert werden.

    Zwischen den Versionslinien k"onnen die Datenbanken nicht vollautomatisch
    verschoben werden. Das l"asst sich "uber die Men"ufunktionen
    Backup und Restore erledigen. Es ist somit auch m"oglich wieder
    auf der vorherigen Versionslinie zu bleiben, wenn die Anwendung doch
    nicht mit der Neuen Versionslinie zurecht kommen will.

    Sollte f"ur den MariaDB/MySQL Benutzer 'root' noch kein Kennwort vergeben
    sein, so erfragt das Aktivierrungsscript die Eingabe eines solchen.

    Aus Sicherheitsgr"unden sollte der Zugriff f"ur den Datenbank Benutzer
    'root' auf 'localhost' eingeschr"ankt werden. Es ist auch ausreichend, f"ur
    den Datenbank Benutzer 'root' ein Passwort automatisch mit 'pwgen'
    w"ahrend der Aktivierung erzeugen zu lassen.

    Es kann f"ur jeden anderen Datenbank Benutzer eine 'root' entsprechende
    Berechtigung gesetzt werden.


\section{Zugriff auf die Datenbank}

    Der Zugriff auf einen Datenbank Server erfolgt mit \glqq{}mysql\grqq{}

    Ab der MariaDB Version 11.0 erfolgt der Zugriff mit \glqq{}mariadb\grqq{},
    \glqq{}mysql\grqq{} ist da deprecated das wird dann auch angezeigt.


    \begin{verbatim}
    mysql --user=${username} --password=${passwort}
    mysql -u${username} -p${passwort}
    \end{verbatim}

    Wenn mehrere Datenbank Server auf einer Maschine laufen muss der
    lokale Zugriff mit dem Socket erfolgen, wenn nicht der default Server
    auf Port 3306 angesprochen werden soll.

    \begin{verbatim}
    mysql -u${username} -p${password} -S/run/mysql/${version}/mysql.sock
    \end{verbatim}

    Der Zugriff auf einen Datenbank Server auf einer anderen Maschine
    erfolgt dann mit der Angabe von Hostname oder IP.

    \begin{verbatim}
    mysql -h${hostname} -u${username} -p${passwort}
     \end{verbatim}

    Wenn auf der anderen Maschine mehrere Datenbank Server laufen ist auch
    die Angabe des Port erforderlich.

    \begin{verbatim}
    mysql -h${hostname} -u${username} -p${passwort} -P${port}
    \end{verbatim}


\section{Allgemeine Konfiguration}

    Die Konfiguration kann "uber den Men"upunkt \glqq{}Edit Configuration\grqq{}
    ge"andert werden. Nach Beendigung des Editors wird die Konfiguration
    automatisch auf Fehler "uberpr"uft. Werden Fehler festgestellt, so
    sollten die entsprechenden Eintr"age in jedem Fall korrigiert werden.\\

    Achtung, "Ubername der Konfiguration startet den MariaDB/MySQL Daemon
    neu und unterbricht dabei alle laufenden Datenbankzugriffe.

    In dieser Dokumentaion wird f"ur die Parameter der Name MARIADB
    verwendet. In den jeweiliegen Paketen wird der Paket Name
    verwendet und entspricht somit dem zweiten Teil des Parameters,
    es sind nicht unbedingt in allen Versionen alle Parameter vorhanden.

    Wie:

    START\_MARIADB55  \\
    START\_MARIADB103 \\
    START\_MYSQL5173  \\



%\newpage

\section{Das Men"u im Setup-Programm}

    Das Men"u im Setup-Programm ist wie folgt aufgebaut:

    \mbox {}

    \begin{tabular}{lll}
    & x. & Service administration \\
    \end{tabular}
\eline
    \begin{tabular}{p{1cm}llll}
    & x. &  Database server administration \\
    \end{tabular}
\eline
    \begin{tabular}{p{2cm}ll}
    & x. & MariaDB x.x administration\\
     \end{tabular}
\eline
    \begin{tabular}{p{3cm}lll}
    & x. &  View documentation \\
    & x. &  Edit Configuration \\
    & x. &  Advanced configuration file handling \\
    & x. &  Show status \\
    & x. &  Stop service \\
    & x. &  Start service \\
    & x. &  Show connections \\
    & x. &  MariaDB security check \\
    & x. &  MariaDB Tools \\
    \end{tabular}
\eline
    \begin{tabular}{p{4cm}lll}
    & x. &  List MariaDB user \\
    & x. &  \jump{addmariadbuser}{Add MariaDB user} \\
    & x. &  Remove MariaDB user \\
    & x. &  \jump{changemariadbpasswd}{Change MariaDB user password} \\
    & x. &  Database backup \\
    & x. &  Database restore \\
    & x. &  Database check \\
    & x. &  Initial database update \\
    & x. &  SQL Console \\
    & x. &  Logfile view \\
    \end{tabular}

     \mbox {}

\section{Die Konfigurationsdatei}

    In der Konfigurationsdatei, die "uber das Men"u zug"anglich ist, sind folgende
    Parameter vorhanden; wer sie von Hand editieren will, findet sie unter \\
    \texttt{/etc/config.d/mariadb}.


\section{Die Parameter}


\subsection{Allgemeine Einstellungen}

\begin{description}
\config{START\_MARIADB}
{START\_MARIADB}
{STARTMARIADB}
{
    Legt fest, ob der MariaDB Server automatisch gestartet wird.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{START\_MARIADB='no'}
}


\config{MARIADB\_NETWORK}
{MARIADB\_NETWORK}
{MARIADBNETWORK}
{
    Erlaubt das Warten auf eingehende TCP/IP Verbindungen (listen). Aus
    Sicherheitsgr"unden sollte hier nach M"oglichkeit 'no' stehen, so
    das alle Verbindungen zu MariaDB nur "uber die internen Unix-Sockets erfolgen.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{MARIADB\_NETWORK='no'}
}


\config{MARIADB\_CONNECT\_PORT}
{MARIADB\_CONNECT\_PORT}
{MARIADBCONNECTPORT}
{
    Hier wird der Kommunikations-Port des Servers f"ur TCP/IP basierte
    Kommunikation eingetragen. Clientsoftware erwartet hier, von Ausnahmen
    abgesehen, den Port 3306 des TCP Protokolles.

    Wenn mehrere MariaDB/MySQL Versionen auf einer Maschine laufen
    ist hier jeweils ein anderer Port als der Standard Port 3306 anzugeben.

    Sollte es erforderlich sein einen speziellen Port, ausserhalb der
    Standardvorgaben zu benutzen, wird in '/etc/mysql/portlist' ein
    entsprechender Eintrag gemacht, jeder Eintrag kommt in eine eigene
    Zeile. Wenn die Datei nicht vorhanden ist, muss sie angelegt werden.

    \achtung{Die Port Angabe wird auch gleichzeitig f"ur die Identifizierung
             der jeweiligen lokalen Datenbank Server Instanz benutzt, sie
             ist auch bei einem nur lokal verf"ugbaren Datenbank Server
             so zu setzen, da"s sie einmalig ist.}

    G"ultige Werte: Port Nummer 3306, 3307, 3308 ...

    Standardeinstellung: \texttt{MARIADB\_CONNECT\_PORT='3306'}
}


\config{MARIADB\_INSTALL\_TESTDB}
{MARIADB\_INSTALL\_TESTDB}
{MARIADBINSTALLTESTDB}
{
    Soll die test DB angelegt werden. Sie wird meistens nicht
    ben"otigt.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{MARIADB\_INSTALL\_TESTDB='no'}
}


\config{MARIADB\_DATADIR}
{MARIADB\_DATADIR}
{MARIADBDATADIR}
{
    Hier kann ein abweichender Datenbankpfad angegeben werden.
    Default ist /srv/mysql/xx.

    xx entspicht der Version: 55 \pfeil mariadb55

    G"ultige Werte: ein Absoluter Pfad

    Standardeinstellung: \texttt{MARIADB\_DATADIR='/srv/mysql/xx'}
}


\config{MARIADB\_SEND\_MAIL\_FROM}
{MARIADB\_SEND\_MAIL\_FROM}
{MARIADBSENDMAILFROM}
{
    Hier muss die MailAdresse vom Admin eingeben werden, damit die Mails
    vom Server versendet werden k"onnen.

    Wenn das Feld leer bleibt, werden keine Mail versandt.

    G"ultige Werte: leer, E-MailAdresse

    Standardeinstellung: \texttt{MARIADB\_SEND\_MAIL\_FROM='{}'}
}


\config{MARIADB\_BACKUP\_SCHEDULE\_TIME}
{MARIADB\_BACKUP\_SCHEDULE\_TIME}
{MARIADBBACKUPSCHEDULETIME}
{
    Hier wird eingestellt, zu welcher Zeit das Backup durchgef"uhrt
    werden soll.

% hier wird die Standard time definition eingebunden
\input{systemd_time_definition}

    Standardeinstellung: \texttt{MARIADB\_BACKUP\_SCHEDULE\_TIME='*-*-* 01:15:00'}
}


\config{MARIADB\_BACKUP\_TARGET}
{MARIADB\_BACKUP\_TARGET}
{MARIADBBACKUPTARGET}
{
    Hier wird das Zielverzeichnis f"ur die Backupvorg"ange eingetragen.
    Auch alle vom Auto-Backup System erstellten Dateien werden dort abgelegt.

    G"ultige Werte: ein Absoluter Pfad

    Standardeinstellung: \texttt{MARIADB\_BACKUP\_TARGET='/srv/mysql\_backup/xx'}
}


\config{MARIADB\_BACKUP\_GROUP}
{MARIADB\_BACKUP\_GROUP}
{MARIADBBACKUPGROUP}
{
    An dieser Stelle kann eine spezielle Gruppe f"ur das Backup angegeben
    werden.

    G"ultige Werte: Gruppenname

    Standardeinstellung: \texttt{MARIADB\_BACKUP\_GROUP='{}'}
}


\config{MARIADB\_BACKUP\_N}
{MARIADB\_BACKUP\_N}
{MARIADBBACKUPN}
{
    Definiert die Anzahl der eingetragenen, mit Auto-Backup zu
    "uberwachenden, Datenbanken.

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{MARIADB\_BACKUP\_N='1'}
}


\config{MARIADB\_BACKUP\_x\_NAME}
{MARIADB\_BACKUP\_x\_NAME}
{MARIADBBACKUPxNAME}
{
    Hier kann ein Name oder eine Bezeichnung f"ur diesen Auftrag eingegeben
    werden. Er dient nur der Dokumentation.

    G"ultige Werte: keine Einschr"ankung

    Standardeinstellung: \texttt{MARIADB\_BACKUP\_x\_NAME='{}'}

}


\config{MARIADB\_BACKUP\_x\_ACTIVE}
{MARIADB\_BACKUP\_x\_ACTIVE}
{MARIADBBACKUPxACTIVE}
{
    Hier kann ein Auftrag deaktiviert werden. Dabei bleiben die
    Einstellungen f"ur eine eventuelle Reaktivierung erhalten.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{MARIADB\_BACKUP\_x\_ACTIVE='no'}
}


\config{MARIADB\_BACKUP\_x\_FILE}
{MARIADB\_BACKUP\_x\_FILE}
{MARIADBBACKUPxFILE}
{
    Datenbankname der zu "uberwachenden Datenbank.

    G"ultige Werte: Datenname

    Standardeinstellung: \texttt{MARIADB\_BACKUP\_x\_FILE='mysql'}
}


\config{MARIADB\_BACKUP\_x\_MAX}
{MARIADB\_BACKUP\_x\_MAX}
{MARIADBBACKUPxMAX}
{
    Maximale Anzahl der gespeicherten Backups der Datenbank. Beim
    "uberschreiten des Wertes wird die jeweils "alteste Backupdatei
    gel"oscht. Wird dieser Wert auf '0' gesetzt, erfolgt kein
    Backupvorgang f"ur diese Datenbank.

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{MARIADB\_BACKUP\_x\_MAX='7'}
}


\config{MARIADB\_BACKUP\_x\_FORCE}
{MARIADB\_BACKUP\_x\_FORCE}
{MARIADBBACKUPxFORCE}
{
    Backup f"ur diese Datenbank immer ausf"uhren.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{MARIADB\_BACKUP\_x\_FORCE='yes'}
}


\config{MARIADB\_BACKUP\_MOUNT}
{MARIADB\_BACKUP\_MOUNT}
{MARIADBBACKUPMOUNT}
{
    Erm"oglicht das ausf"uhren eines Kommandos vor dem Starten des
    Backup- oder Restorevorganges. Das kann z.B. das Mounten eines
    MO-Disk Datentr"agers sein.

    Beispiel: \emph{mount /mo}

    Standardeinstellung: \texttt{MARIADB\_BACKUP\_MOUNT='{}'}
}


\config{MARIADB\_BACKUP\_UMOUNT}
{MARIADB\_BACKUP\_UMOUNT}
{MARIADBBACKUPUMOUNT}
{
    Erm"oglicht das Ausf"uhren eines Kommandos nach Abschlu"s des
    Cron-Autobackups. So kann z.B. ein Umount Befehl f"ur einen MO-Disk
    Datentr"ager ausgef"uhrt werden.

    Beispiel: \emph{umount /mo}

    Standardeinstellung: \texttt{MARIADB\_BACKUP\_x\_UMOUNT='{}'}
}


\config{MARIADB\_COMPRESSION\_THREADS}
{MARIADB\_COMPRESSION\_THREADS}
{MARIADBCOMPRESSIONTHREADS}
{
    Hier kann f"ur backup und restore die Anzahl der Threads (core)
    angegeben werden die f"ur die Compressions Aktion benutzt werden
    sollen.

    G"ultige Werte: eine Zahl aus dem core Pool

    Standardeinstellung: MARIADB\_COMPRESSION\_THREADS='0'
}


\end{description}

\subsection{Spezielle Konfiguration}
Die folgenden Parameter sollten nur bei Bedarf ver"andert werden.

\begin{description}


\config{MARIADB\_SECURE\_PASSWD}
{MARIADB\_SECURE\_PASSWD}
{MARIADBSECUREPASSWD}
{
    Dieser Parameter aktiviert das Plugin 'auth\_ed25519' um Passw"orter
    mit 'ed25519' zu verschl"usseln und zu benutzen.

    Bestehende Passw"orter k"onnen auch aktualisiert werden um diese
    Verschl"usselung zu benutzen.

    Nach dem "offnen der MariaDB Konsole l"asst sich der Status der
    Passw"orter Anzeigen.

\begin{verbatim}

SELECT CONCAT(user, '@', host, ' => ', JSON_DETAILED(priv)) FROM mysql.global_priv   WHERE user LIKE 'USER'\G

\end{verbatim}

    G"ultige Werte: yes, no

    Standardeinstellung: MARIADB\_SECURE\_PASSWD='no'
}


\config{MARIADB\_DEFAULT\_COLLATION}
{MARIADB\_DEFAULT\_COLLATION}
{MARIADBDEFAULTCOLLATION}
{
    Hiermit wird der Standardzeichensatz und die Sortierung vorgegeben.
    Dabei sind in den 3 Zeichensatzgruppen folgende Sortierungen m"oglich. \\
    latin1 (cp1252 West European)
\begin{itemize}
\item latin1\_bin
\item latin1\_danish\_ci
\item latin1\_general\_ci
\item latin1\_general\_cs
\item latin1\_german1\_ci (W"orterbuch Sortierung))
\item latin1\_german2\_ci (Telefonbuch Sortierung))
\item latin1\_spanish\_ci
\item latin1\_swedish\_ci
\end{itemize}
utf8 (UTF-8 Unicode)
\begin{itemize}
\item utf8\_general\_ci
\item utf8\_bin
\item utf8\_unicode\_ci
\end{itemize}
latin2 (ISO 8859-2 Central European)
\begin{itemize}
\item latin2\_bin
\item latin2\_general\_ci
\item latin2\_hungarian\_ci
\end{itemize}

    Standardeinstellung: \texttt{MARIADB\_DEFAULT\_COLLATION='utf8\_unicode\_ci'}
}


\config{MARIADB\_BIND\_IP\_ADDRESS}
{MARIADB\_BIND\_IP\_ADDRESS}
{MARIADBBINDIPADDRESS}
{
    Diese Option wird dann ben"otigt, wenn mehrere Netzwerkkarten im Server
    verwendet werden und nicht von allen ein Zugriff auf den MariaDB Server
    erlaubt werden soll. Die IP-Adresse der f"ur die Servernutzung
    freigegebenen Netzwerkkarte wird dann hier eingetragen.\\
    Dieser Wert ist nur relevant wenn MARIADB\_NETWORK='yes' gesetzt ist.

    G"ultige Werte: IP-Adresse z.B. 127.0.0.1

    Standardeinstellung: \texttt{MARIADB\_BIND\_IP\_ADDRESS='{}'}
}


\config{MARIADB\_LISTEN\_IPADDR\_N}
{MARIADB\_LISTEN\_IPADDR\_N}
{MARIADBLISTENIPADDRN}
{
    "Uber diesen Parameter wird die Anzahl der individuell konfigurierten
    IP-Adressen angegeben, auf welchen der MARIADB-Server Verbindungen entgegen
    nehmen soll. Wird der Wert dieses Parameters auf '0' gesetzt, so werden
    Verbindungen auf allen lokalen IP-Adressen des Servers entgegen genommen.

    Dieser Wert ist nur relevant wenn MARIADB\_NETWORK='yes' gesetzt ist.

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{MARIADB\_LISTEN\_IPADDR\_N='0'}
}


\config{MARIADB\_LISTEN\_IPADDR\_x\_NAME}
{MARIADB\_LISTEN\_IPADDR\_x\_NAME}
{MARIADBLISTENIPADDRxNAME}
{
    An dieser Stelle kann eine Beschreibung angegeben werden.
    Dieser Parameter wird nicht ausgewertet.

    G"ultige Werte: alles

    Standardeinstellung: \texttt{MARIADB\_LISTEN\_IPADDR\_x\_NAME='{}'}
}


\config{MARIADB\_LISTEN\_IPADDR\_x\_ACTIVE}
{MARIADB\_LISTEN\_IPADDR\_x\_ACTIVE}
{MARIADBLISTENIPADDRxACTIVE}
{
    Wird dieser Parameter auf den Wert 'yes' gesetzt, so wird der
    zugeh"orige Datensatz aktiviert, 'no' deaktiviert ihn.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{MARIADB\_LISTEN\_IPADDR\_x\_ACTIVE='no'}
}


\config{MARIADB\_LISTEN\_IPADDR\_x}
{MARIADB\_LISTEN\_IPADDR\_x}
{MARIADBLISTENIPADDR}
{
    Diese Option wird dann ben"otigt, wenn mehrere Netzwerkkarten im Server
    verwendet werden und nicht von allen ein Zugriff auf den MariaDB Server
    erlaubt werden soll. Die IP-Adresse der f"ur die Servernutzung
    freigegebenen Netzwerkkarte wird dann hier eingetragen.

    Dieser Wert ist nur relevant wenn MARIADB\_NETWORK='yes' gesetzt ist.

    Hier wird keine echte IP Adresse angegeben sondern der Index der
    Angabe \texttt{IP\_ETH\_x\_IP\_x\_IPADDR} aus der
    Base Konfiguration in \texttt{/etc/config.d/base}.

    Beispiel: \texttt{MARIADB\_LISTEN\_IPADDR\_1='2:1'}
    zeigt auf \texttt{IP\_ETH\_2\_IP\_1\_IPADDR} in
    \texttt{/etc/config.d/base}.

    Der Wert vor dem '2:' ist der Index der Netzwerkkkarte \\
    der Wert hinter dem ':1' ist der Index der IPADDR.

    Der Index kann, wenn der Editor \glqq{}\ece\grqq{} eingestellt ist,
    auch aus dem Dialog eingef"ugt werden.

    G"ultige Werte: 1:1, 1:2, 2:1 etc..

    Standardeinstellung: \texttt{MARIADB\_LISTEN\_IPADDR\_x='{}'}
}


\config{MARIADB\_MEMORY\_OPT}
{MARIADB\_MEMORY\_OPT}
{MARIADBMEMORYOPT}
{
    Hier wird das Serververhalten an den vorhandenen Arbeitsspeicher
    angepasst.


    M"ogliche Werte sind:


    \begin{tabular}{lll}
    & \texttt{'small'}  & \texttt{entspricht dabei Computern mit wenig Arbeitsspeicher} \\
    &                   & \texttt{von unter 64MB.} \\
    & \texttt{'medium'} & \texttt{d"urfte f"ur die meisten Maschinen die richtige Wahl sein.} \\
    & \texttt{'large'}  & \texttt{verwendet man f"ur SQL Server mit 512 MB und mehr.} \\
    & \texttt{'huge'}   & \texttt{verwendet man f"ur SQL Server mit 1024 MB und mehr.} \\
    \end{tabular}


    Standardeinstellung: \texttt{MARIADB\_MEMORY\_OPT='medium'}
}


\config{MARIADB\_THREAD\_STACK\_SIZE}
{MARIADB\_THREAD\_STACK\_SIZE}
{MARIADBTHREADSTACKSIZE}
{
    Angaben zur Gr"osse des thread-stack

    G"ultige Werte: 128k, 256k, ...

    Standardeinstellung: \texttt{MARIADB\_THREAD\_STACK\_SIZE='128k'}
}


\config{MARIADB\_MAX\_ALLOWED\_PACKET}
{MARIADB\_MAX\_ALLOWED\_PACKET}
{MARIADBMAXALLOWEDPACKET}
{
    Die Gr"o"se der Kommunikationspakete (in MB) l"asst sich mit diesem Wert
    einstellen.

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{MARIADB\_MAX\_ALLOWED\_PACKET='1'}
}


\config{MARIADB\_MAX\_CONNECTIONS}
{MARIADB\_MAX\_CONNECTIONS}
{MARIADBMAXCONNECTIONS}
{
    Maximale Anzahl gleichzeitiger Zugriffe auf den MariaDB Dienst.

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{MARIADB\_MAX\_CONNECTIONS='200'}
}


\config{MARIADB\_ACTIVATE\_BINLOG}
{MARIADB\_ACTIVATE\_BINLOG}
{MARIADBACTIVATEBINLOG}
{
    Mit diesem Parameter wird das Binary Logfile eingeschaltet.
    Dieser Parameter kann ausgeschaltet bleiben, wenn keine Replikationen
    zwischen mehrern Datenbanken ben"otigt werden.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{MARIADB\_ACTIVATE\_BINLOG='no'}
}


\config{MARIADB\_MAX\_BINLOG\_SIZE}
{MARIADB\_MAX\_BINLOG\_SIZE}
{MARIADBMAXBINLOGSIZE}
{
    Der Parameter erlaubt die Begrenzung der maximalen Gr"o"se des Binaer-
    Logfiles. Die Angabe erfolgt in Byte.

    G"ultige Werte: Zahl

    Standardeinstellung: \texttt{MARIADB\_MAX\_BINLOG\_SIZE='1024000'}
}

\end{description}


\subsection{MariaDB mit SSL Verbindungen}

    Ab der MariaDB-Paket-Version 11.4 kann serverseitige SSL-Verschl"usselung
    aktiviert werden. (Standard ist weiterhin off).
    Wird die SSL-Verschl"usselung aktiviert, m"ussen die Server Zertifikate
    bereitgestellt werden und in den folgenden Parametern eingetragen werden.


\begin{description}

\config{MARIADB\_SSL\_USE}
{MARIADB\_SSL\_USE}
{MARIADBSSLUSE}
{
    Bei diesem Parameter wird die Verbindung "uber SSL ein- oder ausgeschaltet.
    Bei der Einstellung 'yes' m"ussen zwingend die Server Zertifikate bei den
    nachfolgenden Parametern angegeben werden.

    G"ultige Werte: yes, no

    Standardeinstellung: \texttt{MARIADB\_SSL\_USE='no'}
}


\config{MARIADB\_SSL\_CA}
{MARIADB\_SSL\_CA}
{MARIADBSSLCA}
{
    In Abweichung von Web Zertifikaten wird/kann die 'ca' Pr"ufung nicht "uber
    die WebServer (Apache) Verbindung gepr"uft werden und somit ist hier die
    Angabe der 'ca' erforderlich.

    Normalerweise wird die 'ca' vom \glqq{}certs\grqq{} Paket f"ur den
    \eisfair{-Server} bereitgestellt.

    Wenn der Server Zugriff auch von einem Clienten mit TCP erfolgen soll,
    muss diese 'ca' auch auf dem Clienten installiert werden. Rehashen dann
    nicht vergessen.

    Bei \eisfair w"are das dann \texttt{/etc/ssl/certs/ca.pem}

    G"ultige Werte: ca.pem

    Standardeinstellung: \texttt{MARIADB\_SSL\_CA='ca.pem'}
}


\config{MARIADB\_SSL\_CERT}
{MARIADB\_SSL\_CERT}
{MARIADBSSLCERT}
{
    Hier wird das Server Zertifikat f"ur die SSL Verbindung angegeben.

    Normalerweise wird das 'Zertifikat' vom \glqq{}certs\grqq{} Paket f"ur
    den \eisfair{-Server} bereitgestellt.

    In der Konfiguration des Certs und Certs\_dehydrated Pakets m"ussen
    keine Parameter Einstellungen vorgenommen werden.

    G"ultige Werte: Zertifikat

    Standardeinstellung: \texttt{MARIADB\_SSL\_CERT='{}'}
}


\end{description}


    Sollen unverschl"usselte Client-Verbindungen zu einem MariaDB-Server mit
    aktiver SSL-Verschl"usselung hergestellt werden z.B.

    \begin{itemize}
         \item \eisfair Client  \pfeil   externer/remote MariaDB/MySQL Server \\
         \item externer Client  \pfeil   \eisfair MariaDB Server \\
    \end{itemize}

    muss auf Clientseite duch die Kommandozeilen-Option -{}-skip-ssl die
    SSL-Verschl"usselung abgeschaltet werden.

    Neuere Versionen des MariaDB-Clienten bauen standardm"assig keine
    Verbindungen mehr zu unverschl"usselten MariaDB-Servern auf, so dass
    in diesem Fall immer auf Clientseite die Kommandozeilen-Option
    -{}-skip-ssl genutzt werden muss.

    Soll eine solche Verbindung zwar verschl"usslt werden, das Zertifikat des
    Servers auf Clientseite jedoch nicht verifiziert werden k"onnen, muss die
    Verifikation auf Clientseite mit der \\
    Kommandozeilen-Option -{}-disable-ssl-verify-server-cert deaktiviert
    werden, die Abschaltung der verifikation bedeutet nicht, dass keine
    g"ultigkeits Pr"ufung des Zertifikats durchgef"uhrt wird.

    Dieses l"asst sich auch in der .my.cnf im jeweiligen USER home Verzeichnis
    hinterlegen, somit ist die Angabe auf der Kommandozeile nicht erforderlich.


\begin{verbatim}

/home/USER/.my.cnf

[mysql]
user = USER
password = PASS
ssl-verify-server-cert = 0

\end{verbatim}

    oder auch SSL ganz abschalten.

\begin{verbatim}

/home/USER/.my.cnf

[mysql]
user = USER
password = PASS
ssl = 0

\end{verbatim}


\subsection{Die MariaDB Tools}

Das MariaDB Toolmen"u ist wie folgt aufgebaut:

\begin{itemize}
\item List MariaDB user \\
        MariaDB verf"ugt "uber eine eigene Datenbank Benutzerverwaltung.
        Diese wird in der Datenbank mysql im Datenverzeichnis
        des Servers gespeichert. Dieser Men"upunkt zeigt alle eingetragenen
        Benutzer und ihre Rechtegruppe an. (lesen, "andern, administrieren) \\

\marklabel{addmariadbuser}{}
\item Add MariaDB user \\
        Hiermit werden ein neuer Benutzer seine Zugriffsoptionen und sein
        Passwort an die Benutzerdatenbank angef"ugt.
        Bei den Benutzerrechten wird lediglich zwischen den 3 Hauptkategorien
        administrieren, "andern oder nur lesen
        unterschieden. \\

        Der Parameter 'host' spezifiziert die Netzwerk"ubergreifenden
        Zugriffsrechte. Das Zeichen '\%' ist hierbei
        ein universeller Platzhalter f"ur IP-Adressen und Dom"anennamen.
        Standardwert ist hier 'localhost'. \\

        Der MariaDB Benutzer 'root' sollte aus Sicherheitsgr"unden nur eine
        Berechtigung f"ur 'localhost' oder '127.0.0.1' erhalten. \\

        F"ur Administrative Zwecke, "uber das Netzwerk, l"asst sich jeder
        beliebige andere Benutzer mit vollen Rechten ausstatten. \\

\item Remove MariaDB user \\
        Nicht mehr ben"otigte Benutzereintr"age lassen sich hiermit l"oschen.

\marklabel{changemariadbpasswd}{}
\item Change MariaDB user password \\
        Hier kann das Passwort aller MariaDB Benutzer ver"andert werden. \\

        Werden mehrere MariaDB/MySQL Datenbank Server Versionen auf einer
        Maschine betrieben, wird das Passwort f"ur den Benutzer 'root' in
        allen Datenbank Server Versionen gleichzeitig ge"andert. \\

\item Database backup \\
        Ein Dateiauswahldialog listet alle Datenbanken auf. Durch die
        Auswahl einer Datenbank wird ein Backup unter gleichem Dateinamen
        mit dem Anhang des Tagesdatum, der aktuellen Stunde und der
        Dateiendung '.sql.xz' im Verzeichnis BACKUP\_TARGET erstellt. Der
        Backup Vorgang kann im  laufenden Betrieb erfolgen. Eine bereits
        existierende Backup-Datei mit gleichen Namen wird ohne Warnung
        "uberschrieben. \\

        Bei einem Umzug auf eine Neue Datenbank Versionslinie werden die
        Backup Versionen in den Backup Ordner der Neuen Versionslinie,
        kopiert und dann mittels Restore in der neuen Versionline "uber
        das Men"u in der neuen Versionslinie installiert. \\

\item Database restore \\
        Die im BACKUP\_TARGET Verzeichnis enhaltenen '.sql.xz' Dateien
        werden in einem Dateiauswahldialog aufgelistet.
        Die Auswahl einer Datei startet den R"ucksicherungs-Vorgang.
        Die um Datum und Stunde erweiterten Dateinamen werden automatisch
        in den urspr"unglichen Namen zur"uckkonvertiert. Nicht mehr
        existierende Datenbanken werden komplett neu erstellt. \\

        Bei einem Umzug auf eine Neue Datenbank Versionslinie m"ussen
        die Backup Versionen in den Backup Ordner der Neuen Versionslinie
        kopiert werden und dann mittels Restore in der neuen Versionlinie
        "uber das Men"u in der neuen Versionslinie installiert. \\

\item Database check \\
        "Uber diesen Men"upunkt wird die ausgew"ahlte Datenbankdatei
        "uberpr"uft und gegebenenfalls Repariert und Optimiert. Die
        Auswahl der Datenbank erfolgt men"ugest"utzt. \\

\item Initial database update \\
        Bei einem Wechsel der MaridDB/MySQL Versionslinien kann nach einem
        restore in der neuen Version die mariadb/mysql\_update Funktion
        ausgef"uhrt werden. \\

\item SQL Console\\
        Hier wird der Zugriff auf alle Datenbanken "uber ein
        SQL-Kommandozeilen-Tool erm"oglicht. Die Datenbankdateiauswahl
        erfolgt men"ugest"utzt. Die Eingabe von '$\backslash$h' zeigt
        eine Hilfe an. Mit '$\backslash$q' wird die Console
        geschlossen. \\
\end{itemize}

\marklabel{mysqlbackup}{\section{Auto-Backup}}
    Da MariaDB "uber die M"oglichkeit verf"ugt, im laufenden Datenbankbetrieb
    (ohne Anhalten des SQL-Servers) Backups zu erstellen, wurde eine
    Auto-Backup-Funktion integriert.\\

    Bei den unter MARIADB\_BACKUP\_x\_FILE eingetragenen, zu "uberwachenden
    SQL Datenbanken wird durch einen Schedule Job, in vorgegebenen Abst"anden
    das "Anderungsdatum  abgefragt. Hat sich die Uhrzeit in einer der zur
    Datenbank geh"orenden Dateien seit dem letzten Backup ge"andert, so
    wird eine Backup Datei erstellt. Der Backup-Dateiname wird um die
    Datums- und Stundeninformation der letzten  "Anderung im Format:
    -JJJJMMTT-HH erweitert. So kann theoretisch bis zu
    einmal st"undlich ein Backup erstellt werden. Voreingestellt ist das
    Backup auf einmal t"aglich 01:15 Uhr.\\

    Mit dem Parameter MARIADB\_BACKUP\_x\_MAX kann die Anzahl der
    gespeicherten Backups pro Datenbank begrenzt werden. Beim
    "uberschreiten dieses Wertes wird die "alteste Backupdatei gel"oscht.\\

Beispiel:
\begin{description}
\item mysql\\
|\\
|--> mysql-20030603-10.sql.xz\\
|--> mysql-20040410-17.sql.xz\\
|--> mysql-20040411-12.sql.xz\\
\end{description}
    Das durchf"uhren von Auto-Backup-Operationen, wie Backup erstellen oder
    l"oschen der "altesten Backup Datei, wird im System-Logfile protokolliert.


\subsection{Tipps f"ur Paketentwickler}

    Es gibt eine Reihe von Paketen die einen der MariaDB/MySQL Datenbank
    Server einsetzen.

    Um an die entsprechenden default werte f"ur den jeweiligen Datenbank
    Server zu gelangen ist folgende Vorgehensweise erfolgreich.

    Dieses Beispiel ist f"ur einen Datenbank Server der lokal l"auft,
    also f"ur 'localhost/127.0.0.1'.

    Es eignen sich daf"ur z.B. folgende Parameter

    MEIN\_DATABASE\_HOST = 'localhost' \\
    MEIN\_DATABASE\_PORT = '3306' \\


    F"ur den Parameter 'MEIN\_DATABASE\_PORT'  ist ein Dialog Skript
    vorhanden, da"s eingebunden werden kann.

    MYSQL\_COMMON\_DATABASE\_PORT\_CUI.sh

    Codeschnipsel:


\begin{verbatim}
# ---------------------------------------------------------------------------
# prepare MariaDB/MySQL database
# ---------------------------------------------------------------------------
prepare_database()
{
    # es werden die Server ermittelt, anhand config Daatei
    my_server=$(find /etc/config.d  -maxdepth 1 \
                -name 'mariadb' -printf '%f\n' -o \
                -name 'mariadb[0-9]*' -printf '%f\n' -o \
                -name 'mysql' -printf '%f\n' -o \
                -name 'mysql[0-9]*' -printf '%f\n')

    # für jeden Server wird diese Schleife durchlaufen
    for SERVER in ${my_server}
    do
       # einlesen der jeweilige config Variablen
       . /etc/config.d/${SERVER}

       # umschreiben des Paketnamens von klein nach GROSS
       var_prefix=$(echo ${SERVER} | tr [:lower:] [:upper:])

       # den Port ermitteln
       eval connect_port='${'${var_prefix}'_CONNECT_PORT}'

       # den speziellen Teil des Pfad ermittel
       my_path=$(echo ${SERVER} | sed 's|[^[:digit:]]||g')

       if [ ${MEIN_DATABASE_PORT:-0} -eq ${connect_port:-1} ]
       then
           # wenn MEIN_DATABASE_PORT gefunden
           break
       fi
    done
}

# aufrufen der Funktion
prepare_database

    # Prüfen welche default Datei zuständig ist
    if [ -n "${my_path}" ]
    then
        # das ist die neue, flexible Version
        . /srv/mysql/defaults.info
    else
        # das ist die alte, statische Version
        . /var/lib/mysql/defaults.info
    fi

    # Prüfen ob der Datenbank Server läuft
    if [ ! -f ${mysql_pid_file} ]
    then
        echo
        mecho --error 'MariaDB/MySQL Server is not running.'
        echo
        exit 1
    fi

    # Prüfen ob der Datenbank Server ereichbar ist,
    # gelingt der Zugriff mit dem 'root' Passwort.
    ${mysql_basedir}/mysqladmin --socket=${mysql_socket} \
                     status >/dev/null 2>&1
    if [ ${?} -eq 0 ]
    then
        bla..bla..bla...
    fi


/etc/check.d/mein-package
MEIN_DATABASE_HOST  ''  ''    NOTEMPTY
MEIN_DATABASE_PORT  ''  ''    MYSQL_COMMON_DATABASE_PORT_CUI

/etc/check.d/mein-package.exp
MYSQL_COMMON_DATABASE_PORT_CUI = '(RE:PORT)'
                               : 'Use database port 3306, 3307 ...'


\end{verbatim}


    Durch das includen von '/var/lib/mysql/defaults.info', bzw. "uber
    die flexible Variante in '/srv/mysql/defaults.info' k"onnen
    Pakete die default Werte von MariaDB/MySQL ben"otigen, die
    includierten Werte nutzen.

    Enthalten sind folgende Variablen:

    \$\{mysql\_basedir\} \\
    \$\{mysql\_datadir\} \\
    \$\{mysql\_pid\_file\} \\
    \$\{mysql\_socket\} \\
    \$\{mysql\_log\_error\} \\
    \$\{mysql\_port\} \\


    Sollte der Zugriff direkt auf die Variablen in der jeweiligen config
    erforderlich sein. Ist folgende Vorgehensweise erfolgreich.

    . /etc/config.d/\$\{init\_server\}

    ermittelt wird z.B dann der START\_PACKAGE Parameter

    var\_prefix=\$(echo \$\{init\_server\} | tr [:lower:] [:upper:])

    eval start='\$\{START\_'\$\{var\_prefix\}'\}'

\begin{verbatim}
if [ "${start}" = "yes" ]
then
    bla..bla..bla
fi
\end{verbatim}

    Zugriff auf alle weiteren Parameter erfolg analog


    Der lokale Zugriff auf den Datenbank Server erfolgt immer mit Angabe
    des socket. Ohne Angabe des socket wird immer der default Datenbank
    Server auf Port 3306 angesprochen.

    \$\{mysql\_basedir\}/mysql\{admin\} -{}-socket=\$\{mysql\_socket\} bla..bla

    Durch das includen von '. /srv/mysql/defaults.info' werden die
    Variablen \$\{mysql\_basedir\} und \$\{mysql\_socket\}aufgel"ost.


    Der Zugriff auf einen Datenbank Server auf einer anderen Maschine
    erfolgt dann mit der Angabe \\
    von -{}-host=\$\{hostname\} und -{}-port=\$\{port\}.


\section{Desaster recovery}

    Wenn das setzen des Passworts f"ur 'root' bei einer Aktualisierung der
    MariaDB Datenbanken oder bei der Installation einer neuen Version nicht
    komplett an allen Installierten Datenbanken klappt, weil z.B. eine nicht
    lief, muss das dann sp"ater von einem user mit Adminrechten nachgeholt werden.

    USER und PASSWORT m"ussen richtig gesetzt werden und das Passwort f"ur root
    auch. Die Datenbank Version im Pfad muss auch stimmen.

    Bis zur Version 1.0.3 mariadb103: \\
\begin{verbatim}
    /usr/lib/mysql/103/bin/mysql --socket=/run/mysql/103/mysql.sock \
    --database=mysql --user=USER -pPASSWORT \
    -e 'update user set password=PASSWORD('ATxC1mN1UhgK') where user='root'; flush privileges;'
\end{verbatim}

    Ab der Version 1.1.0 mariadb110: \\
\begin{verbatim}
    /usr/lib/mysql/110/bin/mariadb --socket=/run/mysql/110/mysql.sock \
    --database=mysql --user=USER -pPASSWORT \
    -e 'ALTER USER 'root'@'localhost' IDENTIFIED BY 'ATxC1mN1UhgK'; flush privileges;'
\end{verbatim}


\jump{DATABASECOMMON}{Zur"uck zu: Die Datenbanken}
