KI: MariaDB Vector +MistralAI +PHP SoftCreatR = Semantische Suche
MariaDB Vector 11.6 Preview ist seit ca. drei Wochen in der Preview, man muss die sich aber aktuell noch von Source selbst kompilieren. Geppaart mit MistralAI, meiner Favourit-AI, die übrigens auch perfekt deutsch kann, plus der PHP Mistral API Anbindung SoftCreatR sind die ersten testweisen semantischen Similarity-Suchen ein Erfolg gewesen. Seht selbst, es folgt nun der Output des PHP-Testscripts:
Hallo MariaDB Vector
MariaDB Vector table created
Kurz: Embedding bzw. Vekotoren, sind nichts anderes als eine Übersetzung unserer Sprache in Zahlen, damit die Maschine sich das zurecht ordnen kann und auch mit unserer Sprache klar kommt.
Es folgen die Test-Texte fürs Embedding an MistralAI.
MistralAI übersetzt die Texte in Vektoren, welche im Anschluss in der MariaDB Vektor Seite an Seite mit den ursprünglichen Texten gespeichert werden. So gibt es danach in der Datenbank die normalen Texte für uns Menschen und parallel dazu die „(Zahlen)-Texte“, die die Maschine „versteht“.
Die Test-Texte:
- Katze Pupsinette – Katze Pupsinette ist eine blaue Katze, die in einem Körbchen schläft, und dabei gelegentlich ein kleines aber sehr stinkendes Püpschen läßt
- Buch Klappazuck – Buch Klappazuck ist ein pinkes Buch, das wenn man mal nicht so genau hinschaut, gerne in den Club geht, einen abrockt und öfters mal eine Bücherin abbschleppt
- Taurus, das Einhorn – Taurus, das Einhorn ist ein fetter Kumpel von Brutus, dem blauen und flinken Eichhörnchen
Ab jetzt wird es spannender. Wir nähern uns der Beantwortung der Fragen und können sehen, ob die Maschine die Fragen richtig versteht.
Die Embeddings (Vektoren bzw. „Zahlen-Texte“) sind nun in der MariaDB Vector, jetzt kommen die sogenannten semantischen „Gleichheits-Suchen“ (Similarity Searches) mit ins Spiel, denn darum geht es; Je nach Frage die relevantesten Einträge in der eigenen Datenbank zu finden, die dann zusammen mit weiteren Anweisungen (Prompt) für die Weiterverwendung an ein LLM(AI) geschickt werden können, oder aber nur für eine bessere Suche verwendet werden können, anstatt einer reinen Suche nach Keyword.
Wenn die relevantesten Ergebnisse an eine LLM (KI) weiter gegeben werden, nennt man das RAG (Retrieval Augmented Generation) und bedeutet nichts anderes, als dass eigene Infos zur Beantwortung einer Frage oder Erledigung einer Sache, eben an eine AI übermittelt werden, damit die besser Bescheid weiß und so ihren Job besser erledigen kann.
Jetzt die Fragen. Für den Test ist wichtig was Treffer Nr.1, der Volltreffer, ist. Das ist der relevanteste Text, der die Frage am besten beantwortet und der als Kontext zusammen mit dem Prompt (augmented) an das LLM (KI) geschickt wird.
Wer läßt im Körbchen gerne mal ein Püpschen?
1 – Katze Pupsinette – Katze Pupsinette ist eine blaue Katze, die in einem Körbchen schläft, und dabei gelegentlich ein kleines aber sehr stinkendes Püpschen läßt
2 – Buch Klappazuck – Buch Klappazuck ist ein pinkes Buch, das wenn man mal nicht so genau hinschaut, gerne in den Club geht, einen abrockt und öfters mal eine Bücherin abbschleppt
3 – Taurus, das Einhorn – Taurus, das Einhorn ist ein fetter Kumpel von Brutus, dem blauen und flinken Eichhörnchen
Wer geht gerne mal Gassi und schleppt ab?
1 – Buch Klappazuck – Buch Klappazuck ist ein pinkes Buch, das wenn man mal nicht so genau hinschaut, gerne in den Club geht, einen abrockt und öfters mal eine Bücherin abbschleppt
2 – Katze Pupsinette – Katze Pupsinette ist eine blaue Katze, die in einem Körbchen schläft, und dabei gelegentlich ein kleines aber sehr stinkendes Püpschen läßt
3 – Taurus, das Einhorn – Taurus, das Einhorn ist ein fetter Kumpel von Brutus, dem blauen und flinken Eichhörnchen
Wer ist blau?
1 – Katze Pupsinette – Katze Pupsinette ist eine blaue Katze, die in einem Körbchen schläft, und dabei gelegentlich ein kleines aber sehr stinkendes Püpschen läßt
2 – Taurus, das Einhorn – Taurus, das Einhorn ist ein fetter Kumpel von Brutus, dem blauen und flinken Eichhörnchen
3 – Buch Klappazuck – Buch Klappazuck ist ein pinkes Buch, das wenn man mal nicht so genau hinschaut, gerne in den Club geht, einen abrockt und öfters mal eine Bücherin abbschleppt
Bei wem stinkt es mal gerne?
1 – Katze Pupsinette – Katze Pupsinette ist eine blaue Katze, die in einem Körbchen schläft, und dabei gelegentlich ein kleines aber sehr stinkendes Püpschen läßt
2 – Buch Klappazuck – Buch Klappazuck ist ein pinkes Buch, das wenn man mal nicht so genau hinschaut, gerne in den Club geht, einen abrockt und öfters mal eine Bücherin abbschleppt
3 – Taurus, das Einhorn – Taurus, das Einhorn ist ein fetter Kumpel von Brutus, dem blauen und flinken Eichhörnchen
Wer geht in den Club?
1 – Buch Klappazuck – Buch Klappazuck ist ein pinkes Buch, das wenn man mal nicht so genau hinschaut, gerne in den Club geht, einen abrockt und öfters mal eine Bücherin abbschleppt
2 – Katze Pupsinette – Katze Pupsinette ist eine blaue Katze, die in einem Körbchen schläft, und dabei gelegentlich ein kleines aber sehr stinkendes Püpschen läßt
3 – Taurus, das Einhorn – Taurus, das Einhorn ist ein fetter Kumpel von Brutus, dem blauen und flinken Eichhörnchen
Wer ist der Kumpel von Taurus?
1 – Taurus, das Einhorn – Taurus, das Einhorn ist ein fetter Kumpel von Brutus, dem blauen und flinken Eichhörnchen
2 – Katze Pupsinette – Katze Pupsinette ist eine blaue Katze, die in einem Körbchen schläft, und dabei gelegentlich ein kleines aber sehr stinkendes Püpschen läßt
3 – Buch Klappazuck – Buch Klappazuck ist ein pinkes Buch, das wenn man mal nicht so genau hinschaut, gerne in den Club geht, einen abrockt und öfters mal eine Bücherin abbschleppt
Darauf habe ich gewartet und das freut mich gerade. Mit einer der wichtigsten Open-Source Datenbanken fürs Web liefert schon als Previw handfest. Es ist also in greifbarer Nähe: Relationale Datenbank, mit den Inhalten und der Abfragesprache wie bisher, plus Vektoren gleich nebenan, also alles in einem und ohne den Einsatz einer zweiten spezialisierten Vektoren-Datenbank.
Gleichzeitig ist eine MariaDB „Umrüstung auf Vektor“ relativ einfach zu bewerkstelligen, denn zu einer bestehenden MairiaDB-Tabelle müssen genau nur zwei Dinge hinzu. Ein Embedding-Feld, in das die Embeddings bzw Vektoren gespeichert werden (Blob), und ein Index auf dieses Feld. Das war’s. Danach kann man eine Distance-Abfrage machen bzw. zu seiner SQL-Anweisung mit dazu tun, je nach Bedarf.
Ab hier für technisch Interessierte:
Wie ich’s gemacht habe?
Für einen ersten schnellen Test auf meinem Windows Rechner, inklusive dem MariaDB Build from Source. Alles, was noch in meiner lokalen Xampp-Umgebung gefehlt hat, kam per Composer dazu. Ansonsten braucht ihr Visual Studio Community 2022 und cmake. perl (Strawberry) hatte ich mir auch dazu installiert, aber ihr braucht es (wohl) nur für den MariaDB-Test. Beim Maria-DB Build wurde OpenSSL emofohlen, aber das braucht es für einen ersten schnellen Test nicht. Also wenn nicht bereits drauf, könnt ihr in diesem Fall skippen.
Für den Test waren folgende Info-Resourcen hilfreich und wichtig:
Diese ganz besonders, und deswegen ganz besonderen Dank an meinen lieben Kollegen:
Spielen mit MariaDB Vector für erste KI-Tests
https://www.fromdual.com/spielen-mit-mariadb-vector-fuer-erste-ki-tests
MistralAI Embeddings:
https://docs.mistral.ai/capabilities/embeddings/
Falls sich das jemand fragt, so wie ich. Ja, Mistral Embeddings sind immer 1024 Zahlen lang, egal ob der Text nur aus einem Wort oder einem ganzen Buch besteht. Gut erklärt warum da so ist, oben auf der verlinkten Seite.
SoftCreatR, die PHP Anbindung an die Mistral-API von Sascha Greuel
https://github.com/SoftCreatR/php-mistral-ai-sdk
Es gibt mehrere MistralAI-API-Anbindungs-Wrapper aber die war die, die bei mir wollte.
Es gab einen Punkt, bei dem es bei mir gehakt hat. Es braucht Guzzle für das Funktionieren des SoftCreatR-Wrappers. Guzzle kann auch bequem per composer installiert werden:
https://github.com/guzzle/guzzle
und
https://github.com/guzzle/psr7
Bei mir im Script sieht es dann so aus, ähnlich wie im SoftCreatR Example, hier abzuschauen:
https://github.com/SoftCreatR/php-mistral-ai-sdk/blob/main/examples/MistralAIFactory.php
So:
require_once ‚vendor/autoload.php‘;
$apiKey = ‚…xxx…‘;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\HttpFactory;
use SoftCreatR\MistralAI\MistralAI;
$httpClient = new \GuzzleHttp\Client();
$psr7Factory = new \GuzzleHttp\Psr7\HttpFactory();
$mistral = new MistralAI($psr7Factory, $psr7Factory, $psr7Factory, $httpClient, $apiKey);
——————————
…und natürlich die Doku- und Info Seiten von MariaDB Vector (Preview 11.6) selbst.
Zum MariaDB Build auf Windows
Folge diesen Anleitungen, es ist kein Hexenwerk, auch wenn es einem zuerst so vorkommt..
1. MariaDB Source für die 11.6. Preview (Vector) herunterladen
Das Vector-Feature ist aktuell nur in der 11.6.0 Preview Vector enthalten. In der 11.6.1 RC, die es auch als binary gibt etc. ist es nicht enthalten.
2. Howto MariaDB (Vector) Windows Build
3. MariaDB (Vector) starten
Bei mir z.B. hat sich die mariadb.exe, nach dem Build, im Build-Verzeichnis gefunden, hier:
C:\mariadb-11.6.0_vector\bld\sql\RelWithDebInfo
In der Console dahin und gestartet mit
mariadb.exe –console
Davor Xampp so, dass nur Apache startet und nicht die MySQL-DB.
Verbindung in PHP/MySQLi
Um die frisch installierte MariaDB Vector, in deinem PHP-Script zu verbinden ( mysqli connect ): User ist root, und Passwort ist nichts, also „“
Noch eine interessante Sache, die ich bei den Recherchen zu MariaDB Vector entdeckt habe:
Zwar noch ohne MariaDB Vector, aber mit MistralAI …und es ist eine PHP-AI-Blibliothek:
LLPhant – A comprehensive PHP Generative AI Framework
https://github.com/theodo-group/LLPhant
…und das jetzt noch mit MariaDB Vector…
MariaDB Vector from Source auf Linux Mint 22.04
Kein Spaß, am besten warten bis Xampp das in einer der neuen Versionen mitbringt. Geschlagene zwei Tage habe ich dafür gebraucht, trotz der Erfahrung durch die vorherige Windows-Installation.
Was jetzt folgt ist das, was noch frisch im Kopf ist. Es ist keine Step-by-Step Anleitung, aber eine Umschiffung für die blödesten Fallstricke.
Eine Seite, die mir dabei gut geholfen hat:
Xampp installieren
Wenn nicht bereits installiert, Xampp vor allem anderen installieren.
https://www.apachefriends.org/de/index.html
Das installiert auch eine MariaDB-Datenbank (aber noch ohne Vector Feature), aber die lassen wir dann aus und starten über das Xampp GUI nur den Apache Webserver.
Xampp installiert sich hier: /opt/lampp
Build Environment Setup for Linux – Required Tools
Wie auf dieser Seite beschrieben ….funktioniert nicht. Das war eine der größten Hürden.
https://mariadb.com/kb/en/Build_Environment_Setup_for_Linux/
apt build-dep mariadb-server …nope
und das hier auch alles nope:
deb http://ftp.debian.org/debian buster main contrib
deb http://security.debian.org buster/updates main contrib
deb-src http://ftp.debian.org/debian buster main contrib
deb-src http://security.debian.org buster/updates main contrib
Abhilfe: Die Abhängigkeiten manuell installieren. Die meisten Anforderungen sind schon auf der Kiste. cmake per apt manuell dazu installieren,
sudo apt install cmake
dann von dieser Seite:
https://mariadb.com/kb/en/get-build-and-test-latest-mariadb-the-lazy-way/
hat wenigsttens das hier funktioniert:
apt install -y build-essential bison libgnutls28-dev
Zusammen mit cmake waren die Anforderungen bei mir dann für den Build erfüllt.
Die sind zu alt: libncurses.so.5 und libtinfo.so.5 …müssen per ln -s auf die 6er-Version zeigen
Wenn man später den mysql-Client starten möchte und z.B: dem User root ein Passwort zu setzen, kommt der Fehler, dass die Bibliothek libncurses5 nicht gefunden wird. libncurses5 ist eine alte Bibliothek. Auf Linix Mint 22.04 ist die neuere libncurses6 am Start, die alles das kann, was die libncurses5 auch kann.
Davor hab ich noch das gemacht: sudo apt instal libncurses5-dev, weil diese Bibliothek gibt es noch in den Repositories. Ob es das gebraucht hat kann ich aber nicht sagen, das Folgende ist wichtiger:
Die libncurses6 fand sich bei mir im Ordner: /usr/lib/x86_64-linux-gnu
Dort mit ln -s symbolische Links setzten von
libncurses.so.5 -> libncurses.so.6
und
libncursesw.so.5 -> libncursesw.so.6
Das Gleiche auch für die zweite angemeckerte Blibliothek libtinfo im gleichen Ordner:
libtinfo.so.5 -> libtinfo.so.6
Danach startete der mysql-Client.
Download
Nur die Version 11.6.0 Vector Preview hat die Vector-Features. Die 11.6.1 RC hat das Vector-Feature nicht.
Build
Am besten dafür auf die Seite wechseln, die den Build für Windows erklärt. Der cmake-Teil funktioniert für Linux blitzegleich und ich finde die Windows-Beschreibung erklärt das um einiges unkomplizierter.
https://mariadb.com/kb/en/Building_MariaDB_on_Windows/
mkdir bld cd bld cmake .. cmake --build . --config RelWithDebInfo
System-Tabellen installieren
https://mariadb.com/kb/en/installing-system-tables-mariadb-install-db/
…schauen, wo sich mariadb-install-db befindet, hab das gerade nicht mehr im Kopf.
Das dann ausführen
mariadb-install-db –user=mysql
make install
Nach dem Build dann das hier nicht vergessen. Im Build-Verzeichnis
make install
Das installiert MariaDB dann in /usr/local/mysql
data
Wenn in /user/local/mysql kein data Verzeichnis sein sollte, eines anlegen
cd /usr/local/mysql
sudo mkdir data
User-Rechte in /usr/local/mysql setzen
Ein Verbund aus User root und Group mysql
Grob so: User überall root und Gruppe überall mysql. Wenn das nicht klappt überall sowohl user als auch group mysql. Es ist eine lokale Testinstallation und da langt das. Hauptsache es funktioniert.
Während der Installation kommen dazu Hints, beziehungsweise steht das nach dem Build und auch nach der Installation in den Readmes. Die lesen. Das mit dgit muss aber nicht mehr gemacht werden. Das ist nur, wenn man sich per git ein binary holt. Nur das mit den User-Rechten machen.
Access denied for user root@localhost – User root braucht ein Passwort
In Terminal:
mysql
use mysql
Dann von dieser Seite
https://stackoverflow.com/questions/41645309/mysql-error-access-denied-for-user-rootlocalhost
den ALTER Befehl:
ALTER USER ‚root’@’localhost‘ IDENTIFIED VIA mysql_native_password USING PASSWORD(’some password‘);
und
FLUSH PRIVILEGES;
Socket ist
/tmp/mysql.sock
my.cnf in etc
/tmp/mysql.sock dort an den ensprechenden Stellen setzen.
Weiß nicht mehr woher ich die hab, deswegen hier in voller Pracht:
# Example MariadB config file.
# You can copy this to one of:
# /etc/my.cnf to set global options,
# /mysql-data-dir/my.cnf to get server specific options or
# ~/my.cnf for user specific options.
#
# One can use all long options that the program supports.
# Run the program with –help to get a list of available options
# This will be passed to all MariaDB clients
[client]
#password=my_password
port=3306
socket=/tmp/mysql.sock
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
# The mariadb server (both [mysqld] and [mariadb] works here)
[mariadb]
port=3306
socket=/tmp/mysql.sock
# The following three entries caused mysqld 10.0.1-MariaDB (and possibly other versions) to abort…
# skip-locking
# set-variable = key_buffer=16M
loose-innodb_data_file_path = ibdata1:1000M
loose-mutex-deadlock-detector
gdb
######### Fix the two following paths
# Where you want to have your database
datadir=/usr/local/mysql/data
# Where you have your mysql/MariaDB source + sql/share/english
language=/usr/local/mysql/sql/share/english
########## One can also have a different path for different versions, to simplify development.
#[mariadb-10.1]
#lc-messages-dir=/my/maria-10.1/sql/share
#[mariadb-10.2]
#lc-messages-dir=/my/maria-10.2/sql/share
[mysqldump]
quick
set-variable = max_allowed_packet=16M
[mysql]
no-auto-rehash
[myisamchk]
——————————————————————
Den Server Starten
Manuell:
cd /usr/local/mysql
sudo ./bin/mariadb
Als Service:
Auf der MariaDB-Seite erfährt man nur, dass in den meisten Binary-Installationen eine Datei mariadb.service dabei ist, aber in der Build from Source-Version ist keine dabei.
Abhilfe: Eine systemd-MariaDB-Variante herunterladen und sich von dort die mariadb.service Datei als Vorlage schnappen und anpassen.
Die Datei findet sich in einer systemd-Variante hier;
/usr/local/mysql/support-files/systemd/mariadb.service
Die Datei muss dann hierhien,
/etc/systemd/system/mariadb.service
auch auf dieser Seite beschrieben:
sudo cp /usr/local/mysql/support-files/systemd/mariadb.service /etc/systemd/system/mariadb.service
sudo systemctl daemon-reload
In der mariadb.service müssen Anpassungen gemacht werden. Bei Socket, beim Pfad und bei den Timeouts. Die müssen beide auf 0. So war das zumindest bei mir.
Starten dann mit
sudo systemctl start mariadb
Stoppen
sudo systemctl stop mariadb
Wenn alles funktioneit dann mit
sudo systemctl enable mariadb
den Service ins System eintragen. So startet MariaDB be jedem Rechner-Start gleich mit.
Der Einfachheit halber hier die ganze mariadb.service
Wictigsten Stellen:
# ProtectSystem=full (da muss ein Hash davor)
ExecStart=/usr/local/mysql/bin/mariadbd $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION
und
TimeoutStartSec=0
TimeoutStopSec=0
und
LimitNOFILE=100000
# It’s not recommended to modify this file in-place, because it will be
# overwritten during package upgrades. If you want to customize, the
# best way is to create a file „/etc/systemd/system/mariadb.service“,
# containing
# .include /usr/lib/systemd/system/mariadb.service
# …make your changes here…
# or create a file „/etc/systemd/system/mariadb.service.d/foo.conf“,
# which doesn’t need to include „.include“ call and which will be parsed
# after the file mariadb.service itself is parsed.
#
# For more info about custom unit files, see systemd.unit(5) or
# https://mariadb.com/kb/en/mariadb/systemd/
#
# Copyright notice:
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=MariaDB 11.6.1 database server
Documentation=man:mariadbd(8)
Documentation=https://mariadb.com/kb/en/library/systemd/
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
##############################################################################
## Core requirements
##
Type=notify
# Setting this to true can break replication and the Type=notify settings
# See also bind-address mariadbd option.
PrivateNetwork=false
##############################################################################
## Package maintainers
##
User=mysql
Group=mysql
# CAP_IPC_LOCK To allow memlock to be used as non-root user
# CAP_DAC_OVERRIDE To allow auth_pam_tool (which is SUID root) to read /etc/shadow when it’s chmod 0
# does nothing for non-root, not needed if /etc/shadow is u+r
# CAP_AUDIT_WRITE auth_pam_tool needs it on Debian for whatever reason
AmbientCapabilities=CAP_IPC_LOCK CAP_DAC_OVERRIDE CAP_AUDIT_WRITE
# PrivateDevices=true implies NoNewPrivileges=true and
# SUID auth_pam_tool suddenly doesn’t do setuid anymore
PrivateDevices=false
# Prevent writes to /usr, /boot, and /etc
# ProtectSystem=full
# Database dir: ‚/usr/local/mysql/data‘ should be writable even
# ProtectSystem=full prevents it
ReadWritePaths=-/usr/local/mysql/data
# Doesn’t yet work properly with SELinux enabled
# NoNewPrivileges=true
# Prevent accessing /home, /root and /run/user
ProtectHome=true
# Use an environment file to pass variable _WSREP_NEW_CLUSTER
EnvironmentFile=-/tmp/wsrep-new-cluster
# Use an environment file to pass variable _WSREP_START_POSITION
EnvironmentFile=-/tmp/wsrep-start-position
# Perform automatic wsrep recovery. When server is started without wsrep,
# galera_recovery simply returns an empty string. In any case, however,
# the script is not expected to return with a non-zero status.
# It is always safe to remove /tmp/wsrep-start-position
# environment file.
# Do not panic if galera_recovery script is not available. (MDEV-10538)
ExecStartPre=/bin/sh -c „[ ! -e /usr/local/mysql/bin/galera_recovery ] && VAR= || \
VAR=`/usr/local/mysql/bin/galera_recovery`; [ $? -eq 0 ] \
&& echo _WSREP_START_POSITION=$VAR > /tmp/wsrep-start-position || exit 1″
# Needed to create system tables etc.
# ExecStartPre=/usr/local/mysql/scripts/mysql_install_db -u mysql
# Start main service
# MYSQLD_OPTS here is for users to set in /etc/systemd/system/mariadb.service.d/MY_SPECIAL.conf
# Use the [Service] section and Environment=“MYSQLD_OPTS=…“.
# This isn’t a replacement for my.cnf.
# _WSREP_NEW_CLUSTER is for the exclusive use of the script galera_new_cluster
ExecStart=/usr/local/mysql/bin/mariadbd $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION
# Unset _WSREP_START_POSITION environment variable.
ExecStartPost=/bin/rm -f /tmp/wsrep-start-position
KillSignal=SIGTERM
# Don’t want to see an automated SIGKILL ever
SendSIGKILL=no
# Restart crashed server only, on-failure would also restart, for example, when
# my.cnf contains unknown option
Restart=on-abort
RestartSec=5s
UMask=007
##############################################################################
## USERs can override
##
##
## by creating a file in /etc/systemd/system/mariadb.service.d/MY_SPECIAL.conf
## and adding/setting the following under [Service] will override this file’s
## settings.
# Useful options not previously available in [mysqld_safe]
# Kernels like killing mariadbd when out of memory because its big.
# Lets temper that preference a little.
# OOMScoreAdjust=-600
# Explicitly start with high IO priority
# BlockIOWeight=1000
# If you don’t use the /tmp directory for SELECT … OUTFILE and
# LOAD DATA INFILE you can enable PrivateTmp=true for a little more security.
PrivateTmp=false
# Set an explicit Start and Stop timeout of 900 seconds (15 minutes!)
# this is the same value as used in SysV init scripts in the past
# Galera might need a longer timeout, check the KB if you want to change this:
# https://mariadb.com/kb/en/library/systemd/#configuring-the-systemd-service-timeout
TimeoutStartSec=0
TimeoutStopSec=0
# Set the maximium number of tasks (threads) to 99% of what the system can
# handle as set by the kernel, reserve the 1% for a remote ssh connection,
# some monitoring, or that backup cron job. Without the directive this would
# be 15% (see DefaultTasksMax in systemd man pages).
TasksMax=99%
##
## Options previously available to be set via [mysqld_safe]
## that now needs to be set by systemd config files as mysqld_safe
## isn’t executed.
##
# Number of files limit. previously [mysqld_safe] open-files-limit
LimitNOFILE=100000
# Maximium core size. previously [mysqld_safe] core-file-size
# LimitCore=
# Nice priority. previously [mysqld_safe] nice
# Nice=-5
# Timezone. previously [mysqld_safe] timezone
# Environment=“TZ=UTC“
# Library substitutions. previously [mysqld_safe] malloc-lib with explicit paths
# (in LD_LIBRARY_PATH) and library name (in LD_PRELOAD).
# Environment=“LD_LIBRARY_PATH=/path1 /path2″ „LD_PRELOAD=
# Flush caches. previously [mysqld_safe] flush-caches=1
# ExecStartPre=sync
# ExecStartPre=sysctl -q -w vm.drop_caches=3
# numa-interleave=1 equalivant
# Change ExecStart=numactl –interleave=all /usr/local/mysql/bin/mariadbd……
# crash-script equalivent
# FailureAction=
Guter Moment um jetzt den Rechner neu zu starten.
Zusammenspiel mit php und apache
php.ini von Xampp …Socket /tmp/mysql.sock eintragen.
An zwei Stellen.
Die php.ini befindet sich hier
/opt/lampp/etc/php.ini
Suchen nach socket…
mysqli.default_socket=/tmp/mysql.sock
und
pdo_mysql.default_socket=/tmp/mysql.sock
Das Xampp GUI starten
cd /opt/lampp
sudo ./manager-linux-x64.run
Jetzt den Apache starten und sonst nichts anderes. Die MariaDB-Vector läuft nach dem Neustart des Rechners bereits durch den Service.
Und jetzt kann php-gescriptet werden, endlich.
Abschließend
Es ist keine tolle Anleitung, aber wenn sie hilft jemandem einen Tag oder so einzusparen, dann ist sie es wert.
Meine größten Fallstricke waren das mit dem
Build Environment Setup for Linux
und
libncurses5, weil wie soll man sonst das root-Passwort setzen, wenn man den Client nicht starten kann…
…was nicht heißen soll, dass die anderen Sachen besonders unnerviger waren. All in all kann ich es nicht empfehlen MariaDB from Source auf Linux zu installieren, es macht einfach nur Anti-Spaß.
Auf der anderen Seite sieht man, was man an Xampp hat. Damit wäre das Ganze in 5 Minuten erledigt gewesen und irgendwann wird das auch so sein.
Wenigstens eine Sache ganz am Ende ging wie ÖL Die Installation von phpMyAdmin.
phpMyAdmin aber blos nicht über die Paket-Verwaltung installieren, weil das installiert die ganze Lampp-Umgebung mit php und MySQL und Apache und Perl usw. mit ….und davon abgesehen, wollte die DB bei keinem meiner Versuche …immer error und avon abgesehen, kommt da auch nicht die MariaDB Vector mit.
phpMyAdmin hier herunterladen:
Auspacken und dann in /opt/lampp/htdocs schieben.
Danach
http://localhost/phpMyAdmin/Setup/ ….Name rein, Port 3306, Socket /tmp/mysql.socket, Passwort setzen und fertig.
MariaDBVector ab jetzt komfortabel über http://localhost/phpMyAdmin verwalten.
Von der MariaDB Installation abgesehen (wirklich was für ein Üüüüber-Mist) bin ich aber von Linux Mint 22.04. begeistert. Blitzsauber, sieht gut aus, ist schnell …100% Empfehlung …und Unity 🙂 läuft darauf auch wie auf Windows, kein Unterscheid.