====== MariaDB ====== MariaDB ist eine von der Community entwickelte und kommerziell unterstützte Abspaltung des relationalen Datenbankmanagementsystems (RDBMS) MySQL, die als freie und quelloffene Software unter der GNU General Public License weitergeführt werden soll. Die Entwicklung wird von einigen der ursprünglichen Entwickler von MySQL geleitet, die es aufgrund von Bedenken wegen der Übernahme durch die Oracle Corporation im Jahr 2009 abgezweigt haben. MariaDB soll eine hohe Kompatibilität mit MySQL aufrechterhalten, mit Bibliotheks-Binärparität und exakter Übereinstimmung mit MySQL-APIs und -Befehlen, so dass es in vielen Fällen als direkter Ersatz für MySQL fungieren kann. Die neuen Funktionen weichen jedoch voneinander ab. Sie umfasst neue Speicher-Engines wie Aria, ColumnStore und MyRocks. Der leitende Entwickler/CTO ist Michael "Monty" Widenius, einer der Gründer von MySQL AB und der Gründer von Monty Program AB. Am 16. Januar 2008 gab MySQL AB bekannt, dass das Unternehmen einer Übernahme durch Sun Microsystems für rund 1 Milliarde US-Dollar zugestimmt hat. Die Übernahme wurde am 26. Februar 2008 abgeschlossen. Sun wurde im darauffolgenden Jahr von der Oracle Corporation übernommen. MariaDB ist nach der jüngeren Tochter von Widenius, Maria, benannt. (MySQL ist nach seiner anderen Tochter My benannt.) ===== Paket ===== pacman -S mariadb ===== Datenverzeichnis anlegen ===== mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql ===== Start ===== systemctl enable --now mariadb.service ===== Verbesseruang der Sicherheit ===== Gebe das Passwort für den mysql-Root-Benutzer ein, und die meisten Fragen können mit Ja beantwortet werden, wenn du zum Beispiel keinen Fernzugriff brauchst. mysql_secure_installation ===== Lokalen Benutzer anlegen ===== mysql -u root -p CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'mypassword'; FLUSH PRIVILEGES; EXIT; ===== Remote Benutzer erstellen ===== mysql -u root -p CREATE USER 'user_name'@'%' IDENTIFIED BY 'mypassword'; FLUSH PRIVILEGES; EXIT; ===== Datenbank erstellen ===== mysql -u root -p CREATE DATABASE db_name; GRANT ALL ON db_name.* to 'user_name'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES; \q oder etwas Ausführlicheres GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX, DROP, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON db_name_here.* TO 'myuser'@'localhost'; ===== Datenbank anzeigen und löschen ===== mysql -u root -p SHOW DATABASES; DROP DATABASE db_name; FLUSH PRIVILEGES; EXIT; ===== Benutzer anzeigen und löschen ===== mysql -u root -p SELECT User FROM mysql.user; DROP USER user_name@localhost; FLUSH PRIVILEGES; EXIT; ===== Passwort festlegen oder ändern ===== SET PASSWORD FOR 'user_name'@'localhost' = PASSWORD('password'); FLUSH PRIVILEGES; EXIT; ===== Datenbank sichern ===== Du kannst alle Datenbanken mit dem folgenden Befehl ''mysqldump -u root -p %%--%%all-databases | gzip > all_databases.sql.gz'' sichern oder nur eine einzige Datenbank mit ''mysqldump -u root -p --databases database_name | gzip > database_name.sql.gz''. Oder verwende das folgende Skript, das Folgendes enthält: * getrennte Datenbanken (wenn du die Datei extrahierst) * Festlegen, nach wie vielen Tagen die alten Backups gelöscht werden sollen * E-Mail-Benachrichtigung #!/bin/bash # Shell script to backup MySQL database # Set these variables MyUSER="my_user" # DB_USERNAME MyPASS="mypassword" # DB_PASSWORD MyHOST="localhost" # DB_HOSTNAME # Backup Dest directory DEST="/path/to/backup/mysql/" # Email for notifications # EMAIL="email" # How many days old files must be to be removed DAYS="60" # Linux bin paths MYSQL="$(which mysql)" MYSQLDUMP="$(which mysqldump)" GZIP="$(which gzip)" # Get date in dd-mm-yyyy format NOW="$(date +"%d-%m-%Y_%H-%M")" # Create Backup sub-directories MBD="$DEST/$NOW/mysql" install -d $MBD # DB skip list SKIP="information_schema performance_schema" # Get all databases DBS="$($MYSQL -h $MyHOST -u $MyUSER -p$MyPASS -Bse 'show databases')" # Archive database dumps for db in $DBS do skipdb=-1 if [ "$SKIP" != "" ]; then for i in $SKIP do [ "$db" == "$i" ] && skipdb=1 || : done fi if [ "$skipdb" == "-1" ] ; then FILE="$MBD/$db.sql" $MYSQLDUMP -h $MyHOST -u $MyUSER -p$MyPASS $db > $FILE fi done # Archive the directory, send mail and cleanup cd $DEST tar -cf $NOW.tar $NOW $GZIP -9 $NOW.tar #echo -e "Subject: MySQL backup $(hostname)\r\n\r\nMySQL backup is completed! Backup name is $NOW.tar.gz" | msmtp -a default $EMAIL rm -rf $NOW # Remove old files find $DEST -mtime +$DAYS -exec rm -f {} \; Use [[en/server/services/crontab#examples|crontab]] for automation. ===== Restore database ===== mysql -u root -p db_name < database.sql ===== Überprüfung/Aktualisierung der Datenbank ===== Bei einer neuen Hauptversion von Mariadb (z.B. mariadb-10.7.4-1 auf mariadb-10.8.3-1) ist es ratsam, die Datenbanken zu aktualisieren: - den Datenbank-Daemon 10.7.4-1 laufen lassen - das Paket aktualisieren - führe mysql_upgrade (von der neuen Paketversion) gegen die alte, noch laufenden Daemon aus. Dies wird einige Fehlermeldungen erzeugen, aber das Upgrade wird erfolgreich sein - den Daemon neu starten, damit der 10.8.3-Daemon läuft systemctl restart mariadb.service mariadb-upgrade -u root -p Um alle Tabellen in allen Datenbanken zu prüfen: mariadb-check --all-databases -u root -p -c Um alle Tabellen in allen Datenbanken zu analysieren: mariadb-check --all-databases -u root -p -a Um alle Tabellen in allen Datenbanken zu reparieren: mariadb-check --all-databases -u root -p -r Um alle Tabellen in allen Datenbanken zu optimieren: mariadb-check --all-databases -u root -p -o Alle Befehle "Datenbank prüfen/aktualisieren" in einem Block systemctl restart mariadb.service mariadb-upgrade -u root -p mariadb-check --all-databases -u root -p -c mariadb-check --all-databases -u root -p -a mariadb-check --all-databases -u root -p -r mariadb-check --all-databases -u root -p -o