Naar de inhoud
Actuele kortingscode:10% kortingGebruiken bij je bestelling

MariaDB op een VPS: installatie, beveiliging, gebruikers en externe toegang

Je installeert MariaDB met één klik in je klantaccount of handmatig, beveiligt de server, maakt een database en een gebruiker aan en maakt vanaf je computer veilig verbinding via een SSH-tunnel.

  • gevorderd
  • ~25 min
  • Bijgewerkt op 2-10-2026

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.

  1. Open in je klantaccount Mijn diensten, klik op de VPS en ga naar het tabblad Databases.
  2. 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.
  3. 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.
  4. Nu heb je de volgende subtabbladen tot je beschikking:
SubtabbladWat je er doet
DatabasesJe 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.
GebruikersJe maakt een gebruiker aan, geeft hem toegang tot een database, genereert een nieuw wachtwoord of verwijdert hem.
VerkennerJe bekijkt tabellen en hun rijen.
SQLJe 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:

bash
apt update
apt -y install mariadb-server
  • apt update – haalt de actuele pakketlijst op.
  • apt -y install mariadb-server – installeert de databaseserver en de client mariadb. De service start na de installatie vanzelf en start voortaan automatisch mee met de VPS.

Controleer of hij draait:

bash
systemctl status mariadb
mariadb --version

Je 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:

bash
mariadb-secure-installation

Antwoord volgens de tabel:

VraagAntwoordWaarom
Enter current password for root (enter for none):EnterRoot 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]nRoot 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]nEen 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]YEen anonieme gebruiker zou inloggen zonder naam mogelijk maken.
Disallow root login remotely? [Y/n]YRoot mag alleen vanaf de VPS inloggen, niet via het netwerk.
Remove test database and access to it? [Y/n]YVerwijdert de database test, waar iedereen toegang toe heeft.
Reload privilege tables now? [Y/n]YDe wijzigingen gaan meteen in.

Aan het eind zie je All done!.

Inloggen op de console van MariaDB#

Als root op de VPS:

bash
mariadb

De prompt MariaDB [(none)]> verschijnt. SQL-commando's eindigen met een puntkomma ;. Je verlaat de console met het commando exit.

Als een andere databasegebruiker:

bash
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):

SQL
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';
CommandoWat het doet
CREATE DATABASE aplikaceMaakt de database aplikace aan.
CHARACTER SET utf8mb4De 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_ciDe 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:

RechtenWat ze toestaanWanneer 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 OPTIONMag rechten aan anderen uitdelen.Alleen tools die zelf databases en gebruikers aanmaken (bijvoorbeeld een gamepanel op een eigen VPS).

Andere handige commando's:

SQL
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.

HostWaarvandaan de gebruiker verbinding maaktTypisch gebruik
localhostVanaf de VPS via de socket of TCP naar 127.0.0.1Een applicatie op dezelfde VPS. De aanbevolen standaardkeuze.
127.0.0.1Vanaf de VPS via TCPApplicaties die uitsluitend met 127.0.0.1 verbinding maken.
198.51.100.25Alleen vanaf dit IP-adresJe computer of een andere server met een vast IP.
172.18.0.%Vanuit een heel bereik (jokerteken %)Docker-containers op dezelfde VPS.
%Overal vandaanAlleen 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.

  1. 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 – poort 3307 op je computer wordt doorgestuurd naar adres 127.0.0.1, poort 3306 gezien 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.

  2. Maak in je databaseprogramma verbinding met Host 127.0.0.1, Port 3307, met de gebruiker en het wachtwoord uit de database (bijvoorbeeld aplikace).

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.

  1. Laat MariaDB op het netwerk luisteren. Maak met nano /etc/mysql/mariadb.conf.d/60-remote-access.cnf een bestand aan met deze inhoud:

    /etc/mysql/mariadb.conf.d/60-remote-access.cnfini
    [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 standaardwaarde 127.0.0.1 in het bestand 50-server.cnf wordt hiermee overschreven, omdat de bestanden op alfabetische volgorde worden geladen en het latere bestand wint).
  2. Herstart MariaDB en controleer waar hij luistert:

    bash
    systemctl restart mariadb
    ss -tlnp | grep 3306

    Je ziet 0.0.0.0:3306.

  3. 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';
  4. Sta poort 3306 alleen vanaf dit IP-adres toe in de firewall van je klantaccount (handleiding): regel Inkomend · Toestaan · TCP · poort 3306 · Bron-IP 198.51.100.25. Gebruik je de modus Alles toestaan, voeg daaronder dan nog een regel toe: Inkomend · Verwerpen · TCP · poort 3306 zonder bron-IP. De regels worden van boven naar beneden beoordeeld en de eerste overeenkomst geldt, zodat jouw IP erdoor komt en de rest niet.

  5. Gebruik je UFW, sta de poort dan ook daar toe:

    bash
    ufw allow from 198.51.100.25 to any port 3306 proto tcp
    • allow 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:

bash
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:

bash
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:

bash
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 commando CREATE 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.

/etc/mysql/mariadb.conf.d/60-tuning.cnfini
[mysqld]
innodb_buffer_pool_size = 1G
InstellingWat het doetAanbevolen waardeWanneer wijzigen
innodb_buffer_pool_sizeDe 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:

SQL
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 mariadb toont active.
  • mariadb -u aplikace -p aplikace -e "SELECT 1;" toont na het invoeren van het wachtwoord een tabel met het getal 1.
  • ss -tlnp | grep 3306 toont 127.0.0.1:3306 (alleen lokaal), of 0.0.0.0:3306 als 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:

bash
systemctl status mariadb
journalctl -u mariadb -n 50
  • journalctl -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 (mariadb als 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-transaction en bewaar ze ook buiten de VPS.

Was deze handleiding nuttig?

Geldt voor

  • Ubuntu 24.04
  • Debian 13
  • MariaDB 10.11
  • MariaDB 11.8

Diensten

Fout in de handleiding melden

Zoeken in de handleidingen