MariaDB is een databaseserver die compatibel is met MySQL. Websites, gameservers, Discord-bots en plugins gebruiken hem. We laten twee manieren zien om hem te installeren, en daarna de beveiliging, het beheer van databases en gebruikers, veilige toegang vanaf je computer en back-ups.
Wat je nodig hebt
- Een VPS bij StormHost met Ubuntu 24.04 of Debian 13
- Voor de handmatige werkwijze een SSH-verbinding als root (handleiding)
- Ongeveer 25 minuten
Hoe het werkt#
MariaDB draait op de VPS als de service mariadb en accepteert standaard alleen verbindingen vanaf de VPS zelf (adres 127.0.0.1, poort 3306, en een lokale socket). Applicaties op dezelfde VPS kunnen dus verbinding maken, vanaf internet kan niemand bij de database. Zo moet het blijven totdat je toegang van buitenaf echt nodig hebt.
De versie verschilt per systeem: Ubuntu 24.04 installeert MariaDB 10.11, Debian 13 MariaDB 11.8. Voor de stappen in deze handleiding maakt het verschil niet uit.
De databasegebruiker root wordt op zowel Ubuntu als Debian geverifieerd via een unix socket: alleen wie op de VPS is ingelogd als de systeemgebruiker root, komt als root in de database. Een wachtwoord valt hier niet te raden, want er is er geen.
Optie A: het tabblad Databases in je klantaccount#
De snelste manier, zonder opdrachtregel.
- Open in je klantaccount Mijn diensten, klik op de VPS en ga naar het tabblad Databases.
- Draait er op de VPS nog geen database, dan zie je “Op de VPS draait nog geen databaseserver”. Klik op MariaDB installeren. De installatie loopt op de achtergrond en duurt meestal 1–3 minuten, de pagina ververst vanzelf.
- Klik op Automatisch koppelen. Je klantaccount maakt verbinding met de database via een beveiligde verbinding naar de VPS, de database hoeft daarom niet vanaf internet bereikbaar te zijn.
- Nu heb je de volgende subtabbladen tot je beschikking:
| Subtabblad | Wat je er doet |
|---|---|
| Databases | Je maakt een database aan (Nieuwe database) of verwijdert er een. De optie “Ook een gebruiker met dezelfde naam en volledige toegang aanmaken” maakt meteen een gebruiker met een wachtwoord aan. |
| Gebruikers | Je maakt een gebruiker aan, geeft hem toegang tot een database, genereert een nieuw wachtwoord of verwijdert hem. |
| Verkenner | Je bekijkt tabellen en hun rijen. |
| SQL | Je voert een willekeurige SQL-query uit (Ctrl+Enter). Hoogstens de eerste 500 rijen van het resultaat worden getoond. Query's die gegevens verwijderen, moet je bevestigen. |
Belangrijke details:
- De naam van een database mag alleen letters zonder accenten, cijfers en het onderstrepingsteken bevatten en mag niet met een cijfer beginnen.
- Een database wordt aangemaakt met de codering
utf8mb4(ondersteunt heel Unicode, inclusief emoji). - Na het aanmaken van een gebruiker wordt het wachtwoord maar één keer getoond (“Bewaar de toegangsgegevens, het wachtwoord zie je niet opnieuw”). Bewaar het in een wachtwoordmanager.
- De optie Verbindingen van buitenaf toestaan maakt een gebruiker aan die overal vandaan verbinding mag maken (host
%). Dat werkt alleen als MariaDB op het openbare adres luistert (bind-address) en de poort in de firewall is toegestaan. De stappen staan hieronder in het hoofdstuk Rechtstreekse toegang van buitenaf. Heb je verbindingen van buitenaf niet nodig, vink de optie dan niet aan.
Het serviceaccount van je klantaccount
Bij het automatisch koppelen maken we in MariaDB het account stormhost_panel aan met volledige rechten, dat alleen vanaf de VPS zelf mag inloggen. Via dat account beheert je klantaccount de databases. In de lijst met gebruikers is het gemarkeerd als systeem. Verwijder het niet, anders kan het tabblad Databases geen verbinding maken met de database. Je kunt de database van je klantaccount ontkoppelen met de knop Ontkoppelen, de databases op de VPS blijven ongewijzigd.
De rest van de handleiding beschrijft dezelfde dingen vanaf de opdrachtregel. Dat is handig als je volledige controle over de database wilt, of dingen nodig hebt die het tabblad niet kan (back-ups, tuning, een SSH-tunnel).
Optie B: handmatige installatie#
Geldt voor zowel Ubuntu 24.04 als Debian 13:
apt update
apt -y install mariadb-serverapt update– haalt de actuele pakketlijst op.apt -y install mariadb-server– installeert de databaseserver en de clientmariadb. De service start na de installatie vanzelf en start voortaan automatisch mee met de VPS.
Controleer of hij draait:
systemctl status mariadb
mariadb --versionJe ziet Active: active (running) en het versienummer (10.11 op Ubuntu, 11.8 op Debian). De uitvoer van systemctl sluit je met de toets q.
Beveiliging: mariadb-secure-installation#
Het script mariadb-secure-installation verwijdert testonderdelen die in productie niets te zoeken hebben. Start het:
mariadb-secure-installationAntwoord volgens de tabel:
| Vraag | Antwoord | Waarom |
|---|---|---|
Enter current password for root (enter for none): | Enter | Root logt in via de unix socket en heeft geen wachtwoord. Het script toont OK, successfully used password, moving on... |
Switch to unix_socket authentication [Y/n] | n | Root gebruikt de unix socket al. Het script zegt het zelf: “You already have your root account protected, so you can safely answer 'n'.” |
Change the root password? [Y/n] | n | Een wachtwoord voor root heb je niet nodig, alleen de systeemgebruiker root kan inloggen. Vereist een programma uitdrukkelijk het wachtwoord van root, maak er dan liever een eigen gebruiker voor aan. |
Remove anonymous users? [Y/n] | Y | Een anonieme gebruiker zou inloggen zonder naam mogelijk maken. |
Disallow root login remotely? [Y/n] | Y | Root mag alleen vanaf de VPS inloggen, niet via het netwerk. |
Remove test database and access to it? [Y/n] | Y | Verwijdert de database test, waar iedereen toegang toe heeft. |
Reload privilege tables now? [Y/n] | Y | De wijzigingen gaan meteen in. |
Aan het eind zie je All done!.
Inloggen op de console van MariaDB#
Als root op de VPS:
mariadbDe prompt MariaDB [(none)]> verschijnt. SQL-commando's eindigen met een puntkomma ;. Je verlaat de console met het commando exit.
Als een andere databasegebruiker:
mariadb -u <USER> -p-u <USER>– de naam van de databasegebruiker.-p– vraagt om het wachtwoord (tijdens het typen wordt het niet getoond).
Als gewone gebruiker met sudo
Ben je niet ingelogd als root, maar als gewone gebruiker met sudo, voer dan sudo mariadb uit. Het commando mariadb -u root -p eindigt met de fout Access denied, omdat root niet met een wachtwoord inlogt.
Een database en gebruiker voor je applicatie#
Elke applicatie hoort een eigen database te hebben en een eigen gebruiker met rechten op alleen die database. Als iemand de applicatie dan weet binnen te dringen, komt hij alleen bij de gegevens van die applicatie.
Voer het volgende uit in de console van MariaDB (mariadb). Vervang <STRONG_PASSWORD> door een wachtwoord uit de wachtwoordgenerator (alleen letters en cijfers, minstens 24 tekens):
CREATE DATABASE aplikace CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'aplikace'@'localhost' IDENTIFIED BY '<STRONG_PASSWORD>';
GRANT ALL PRIVILEGES ON aplikace.* TO 'aplikace'@'localhost';
SHOW GRANTS FOR 'aplikace'@'localhost';| Commando | Wat het doet |
|---|---|
CREATE DATABASE aplikace | Maakt de database aplikace aan. |
CHARACTER SET utf8mb4 | De codering voor heel Unicode (letters met accenten, emoji). Het oudere utf8 in MariaDB kan alleen tekens van 3 bytes aan en slaat geen emoji op. |
COLLATE utf8mb4_unicode_ci | De regels voor het sorteren en vergelijken van tekst; ci = niet hoofdlettergevoelig. |
CREATE USER 'aplikace'@'localhost' | De gebruiker aplikace, die alleen vanaf de VPS verbinding mag maken. |
IDENTIFIED BY '…' | Het wachtwoord van de gebruiker. |
GRANT ALL PRIVILEGES ON aplikace.* | Alle rechten, maar alleen op de database aplikace (.* = alle tabellen). |
SHOW GRANTS FOR … | Toont welke rechten de gebruiker heeft (ter controle). |
Ken rechten toe op basis van wat de applicatie nodig heeft:
| Rechten | Wat ze toestaan | Wanneer je ze geeft |
|---|---|---|
ALL PRIVILEGES ON db.* | Alles in één database, inclusief wijzigingen in de structuur. | Een gewone applicatie die zelf tabellen aanmaakt (WordPress, plugins, bots). |
SELECT, INSERT, UPDATE, DELETE ON db.* | Alleen gegevens lezen en schrijven, geen wijzigingen in tabellen. | Een applicatie met een kant-en-klare structuur; een account voor rapportages. |
SELECT ON db.* | Alleen lezen. | Statistieken, exports, voorvertoningen. |
ALL PRIVILEGES ON *.* | Alles op de hele server. | Alleen de beheerder, nooit een applicatie. |
WITH GRANT OPTION | Mag rechten aan anderen uitdelen. | Alleen tools die zelf databases en gebruikers aanmaken (bijvoorbeeld een gamepanel op een eigen VPS). |
Andere handige commando's:
SHOW DATABASES;
SELECT User, Host FROM mysql.user;
ALTER USER 'aplikace'@'localhost' IDENTIFIED BY '<NEW_PASSWORD>';
REVOKE ALL PRIVILEGES ON aplikace.* FROM 'aplikace'@'localhost';
DROP USER 'aplikace'@'localhost';SHOW DATABASES;– de lijst met databases.SELECT User, Host FROM mysql.user;– de lijst met gebruikers en de hosts waarvandaan ze verbinding mogen maken.ALTER USER … IDENTIFIED BY– wijzigt het wachtwoord.REVOKE …– trekt rechten in.DROP USER …– verwijdert de gebruiker (de database blijft staan).
Een database verwijderen is onomkeerbaar
DROP DATABASE aplikace; verwijdert de database met alle tabellen en gegevens zonder verdere bevestiging. Maak vóór het verwijderen een back-up (hoofdstuk Back-ups van de database).
De host van een gebruiker: waarvandaan hij verbinding mag maken#
Een gebruiker in MariaDB is niet alleen een naam, maar het paar naam + host. 'jan'@'localhost' en 'jan'@'%' zijn twee verschillende gebruikers met een eigen wachtwoord en eigen rechten.
| Host | Waarvandaan de gebruiker verbinding maakt | Typisch gebruik |
|---|---|---|
localhost | Vanaf de VPS via de socket of TCP naar 127.0.0.1 | Een applicatie op dezelfde VPS. De aanbevolen standaardkeuze. |
127.0.0.1 | Vanaf de VPS via TCP | Applicaties die uitsluitend met 127.0.0.1 verbinding maken. |
198.51.100.25 | Alleen vanaf dit IP-adres | Je computer of een andere server met een vast IP. |
172.18.0.% | Vanuit een heel bereik (jokerteken %) | Docker-containers op dezelfde VPS. |
% | Overal vandaan | Alleen als het niet anders kan, en altijd met een firewall. |
Toegang vanaf je computer#
Wil je de database bekijken met een programma als HeidiSQL of DBeaver? Je hebt twee mogelijkheden. We raden een SSH-tunnel aan: de database blijft onbereikbaar vanaf internet en de verbinding is versleuteld.
SSH-tunnel (aanbevolen)#
Een SSH-tunnel stuurt een poort op je computer via een versleutelde SSH-verbinding door naar de poort van de database op de VPS.
Open op je computer een terminal (Windows Terminal, PowerShell, macOS Terminal) en voer uit:
bash ssh -L 3307:127.0.0.1:3306 -N [email protected]ssh– maakt via SSH verbinding met de VPS.-L 3307:127.0.0.1:3306– poort3307op je computer wordt doorgestuurd naar adres127.0.0.1, poort3306gezien vanaf de VPS (dus naar MariaDB). Poort 3307 is gekozen om niet te botsen met een eventuele database op je eigen computer.-N– geen commando op de VPS uitvoeren, alleen de tunnel openhouden.[email protected]– de gebruiker en het IP-adres van je VPS (van het tabblad Netwerk).
Na het inloggen toont de terminal niets en “hangt” hij. Dat klopt, de tunnel loopt totdat je het venster sluit of op Ctrl+C drukt.
Maak in je databaseprogramma verbinding met Host
127.0.0.1, Port3307, met de gebruiker en het wachtwoord uit de database (bijvoorbeeldaplikace).
HeidiSQL en DBeaver kunnen de tunnel ook zelf opzetten. Kies in HeidiSQL het netwerktype MariaDB/MySQL via een SSH-tunnel (… (SSH tunnel)), vul op het tabblad van de SSH-tunnel het IP-adres van de VPS, poort 22, de gebruiker en het wachtwoord of de SSH-sleutel in en stel in de hoofdinstellingen 127.0.0.1 in als host van de database. Voeg in DBeaver in de instellingen van de verbinding SSH toe (de plusknop, de optie SSH) en vink Use SSH Tunnel aan.
Rechtstreekse toegang van buitenaf#
Gebruik dit alleen als een andere server of een programma dat geen tunnels kan opzetten verbinding moet maken met de database. Beperk de toegang altijd tot een specifiek IP-adres.
Laat MariaDB op het netwerk luisteren. Maak met
nano /etc/een bestand aan met deze inhoud:mysql/ mariadb. conf. d/ 60-remote-access. cnf /etc/ mysql/ inimariadb.conf.d/ 60-remote-access.cnf [mysqld] bind-address = 0.0.0.0[mysqld]– de groep met opties van de databaseserver.bind-address = 0.0.0.0– luisteren op alle IPv4-adressen van de VPS (de standaardwaarde127.0.0.1in het bestand50-server.cnfwordt hiermee overschreven, omdat de bestanden op alfabetische volgorde worden geladen en het latere bestand wint).
Herstart MariaDB en controleer waar hij luistert:
bash systemctl restart mariadb ss -tlnp | grep 3306Je ziet
0.0.0.0:3306.Maak een gebruiker aan met het IP-adres waarvandaan je verbinding gaat maken (bijvoorbeeld je openbare IP
198.51.100.25):SQL CREATE USER 'jan'@'198.51.100.25' IDENTIFIED BY '<STRONG_PASSWORD>'; GRANT ALL PRIVILEGES ON aplikace.* TO 'jan'@'198.51.100.25';Sta poort
3306alleen vanaf dit IP-adres toe in de firewall van je klantaccount (handleiding): regel Inkomend · Toestaan · TCP · poort3306· Bron-IP198.51.100.25. Gebruik je de modus Alles toestaan, voeg daaronder dan nog een regel toe: Inkomend · Verwerpen · TCP · poort3306zonder bron-IP. De regels worden van boven naar beneden beoordeeld en de eerste overeenkomst geldt, zodat jouw IP erdoor komt en de rest niet.Gebruik je UFW, sta de poort dan ook daar toe:
bash ufw allow from 198.51.100.25 to any port 3306 proto tcpallow from 198.51.100.25– alleen vanaf jouw IP-adres.to any port 3306 proto tcp– naar TCP-poort 3306.
Dynamisch IP-adres
Een thuisverbinding krijgt vaak een ander IP-adres. Na een wijziging kun je geen verbinding meer maken en moet je de regels aanpassen. Daarom is een SSH-tunnel beter voor verbindingen vanaf thuis.
Back-ups van de database#
Het programma mariadb-dump slaat een database op in een SQL-bestand, waarmee je hem op elk moment kunt herstellen.
Een back-up van één database:
mariadb-dump --single-transaction --routines --events aplikace > /root/aplikace-$(date +%F).sql--single-transaction– maakt een consistente back-up van InnoDB-tabellen zonder vergrendeling, de applicatie kan blijven draaien.--routines– neemt opgeslagen procedures en functies mee (zonder deze optie worden ze niet geback-upt).--events– neemt geplande events mee (ook die worden anders niet geback-upt). Triggers worden automatisch geback-upt.aplikace– de naam van de database.> /root/aplikace-$(date +%F).sql– slaat de uitvoer op in een bestand met de datum van vandaag in de naam.
Een back-up van alle databases tegelijk en meteen gecomprimeerd:
mariadb-dump --single-transaction --routines --events --all-databases | gzip > /root/vsechny-db-$(date +%F).sql.gz--all-databases– alle databases, inclusief de commando's om ze aan te maken.| gzip >– comprimeert de uitvoer, SQL krimpt meestal tot een fractie van de grootte.
Herstellen:
mariadb aplikace < /root/aplikace-2026-10-01.sql
gunzip < /root/vsechny-db-2026-10-01.sql.gz | mariadb- De eerste regel laadt de back-up van één database in de bestaande database
aplikace(bestaat die niet, maak hem dan eerst aan met het commandoCREATE DATABASE). - De tweede herstelt de back-up van alle databases; de databases maakt hij zelf aan.
Herstellen overschrijft
Herstellen vanuit een back-up overschrijft de tabellen die in de back-up zitten met hun toestand uit de back-up. Nieuwere gegevens in die tabellen gaan verloren. Weet je het niet zeker, herstel de back-up dan eerst in een nieuwe database (bijvoorbeeld aplikace_test) en vergelijk.
Automatische nachtelijke back-ups en het versturen ervan naar een plek buiten de VPS staan beschreven in de handleiding Back-ups op een VPS.
De basis van prestatietuning#
De belangrijkste instelling voor de prestaties is innodb_buffer_pool_size: hoeveel RAM MariaDB mag gebruiken als cache voor gegevens en indexen. De standaardwaarde is 128 MB.
[mysqld]
innodb_buffer_pool_size = 1G| Instelling | Wat het doet | Aanbevolen waarde | Wanneer wijzigen |
|---|---|---|---|
innodb_buffer_pool_size | De grootte van de cache voor gegevens en indexen van InnoDB. Hoe meer gegevens erin passen, hoe minder er van de schijf wordt gelezen. | Op een VPS waar ook andere services draaien: ongeveer de grootte van de databases, hoogstens een kwart van het RAM (bijvoorbeeld 1G op een VPS met 8 GB). Op een VPS met alleen de database tot 80% van het RAM. | Als de database groeit en query's trager worden. Verlaag de waarde als de VPS geheugen tekortkomt. |
Herstart MariaDB na de aanpassing: systemctl restart mariadb. De grootte van de databases vraag je op met deze query:
SELECT table_schema AS db, ROUND(SUM(data_length + index_length) / 1024 / 1024) AS mb FROM information_schema.tables GROUP BY table_schema;Controle#
systemctl is-active mariadbtoontactive.mariadb -u aplikace -p aplikace -e "SELECT 1;"toont na het invoeren van het wachtwoord een tabel met het getal1.ss -tlnp | grep 3306toont127.0.0.1:3306(alleen lokaal), of0.0.0.0:3306als je rechtstreekse toegang hebt toegestaan.
Als iets niet werkt#
ERROR 1698 (28000): Access denied for user 'root'@'localhost'#
Je logt in als de root van de database met een wachtwoord (mariadb -u root -p) of als gewone systeemgebruiker. Root wordt geverifieerd via de unix socket: log op de VPS in als root en voer alleen mariadb uit, of gebruik sudo mariadb.
ERROR 1045 (28000): Access denied for user 'aplikace'@'localhost' (using password: YES)#
Het wachtwoord is onjuist, of er bestaat geen gebruiker met deze host. Controleer dat met SELECT User, Host FROM mysql.user;. Maakt de applicatie verbinding via 127.0.0.1 en noemt de fout 'aplikace'@'127.0.0.1', maak de gebruiker dan ook aan met de host 127.0.0.1 en geef hem dezelfde rechten. Het wachtwoord stel je opnieuw in met het commando ALTER USER.
ERROR 1130 (HY000): Host '198.51.100.25' is not allowed to connect to this MariaDB server#
Voor dit IP-adres bestaat geen gebruiker. Maak een gebruiker aan met een host die overeenkomt met jouw IP (hoofdstuk Rechtstreekse toegang van buitenaf), of gebruik een SSH-tunnel.
ERROR 2002 (HY000): Can't connect to local … server through socket '/run/mysqld/mysqld.sock' #
MariaDB draait niet. Controleer de status en de log:
systemctl status mariadb
journalctl -u mariadb -n 50journalctl -u mariadb -n 50– de laatste 50 regels van de log van de service. Na een aanpassing van de configuratie is de oorzaak vaak een typfout in een.cnf-bestand; de regel met de fout staat in de log vermeld.
ERROR 2003 (HY000): Can't connect to … server on '203.0.113.10'#
De verbinding van buitenaf is er niet doorgekomen. Controleer of MariaDB op 0.0.0.0 luistert (ss -tlnp | grep 3306), of zowel de firewall van je klantaccount als UFW poort 3306 voor jouw IP toestaat en of je IP-adres niet is veranderd.
Het importeren van een back-up meldt Unknown command '\-'#
Nieuwe versies van mariadb-dump zetten aan het begin van het bestand een regel die de “sandboxmodus” inschakelt, en die begrijpt de MySQL-client niet en een oudere MariaDB-client evenmin. Importeer de back-up met een mariadb-client van dezelfde of een nieuwere versie. Moet je in MySQL importeren, verwijder dan uit een kopie van het bestand de eerste regel met de tekst enable the sandbox mode.
Samenvatting
- MariaDB installeer je op het tabblad Databases (MariaDB installeren) of met het commando
apt -y install mariadb-server. - Root logt zonder wachtwoord in via de unix socket (
mariadbals root); applicaties hebben eigen gebruikers met rechten op alleen hun eigen database. - Maak databases aan met
utf8mb4. - Maak vanaf je computer verbinding via een SSH-tunnel; rechtstreekse toegang alleen met
bind-address, een gebruiker voor een specifiek IP en een firewall. - Maak back-ups met het commando
mariadb-dump --single-transactionen bewaar ze ook buiten de VPS.