Terug naar hoofdinhoud
Databases voor Joomla
Op deze pagina
# Topics

Databases voor Joomla

28 juni 2026

Elke Joomla-site bewaart vrijwel alles wat erin staat in een database: je artikelen, menu’s, gebruikers, instellingen, extensies en de uitgebreide geschiedenis van wijzigingen die daaraan ten grondslag liggen. De pagina’s die een bezoeker te zien krijgt, worden bij elk verzoek opnieuw opgebouwd door rijen uit die database op te halen. Hoewel de database dus het onderdeel van Joomla is waar je nooit rechtstreeks naar kijkt, is het wel het onderdeel dat de hele site bij elkaar houdt. Kies de juiste database-engine en houd deze in goede conditie, dan blijft je site snel en betrouwbaar. Verwaarloos je deze, dan krijg je trage pagina’s, vreemde fouten en back-ups die niet kunnen worden hersteld.

Dit artikel geeft uitleg over de databases waarop Joomla draait: MariaDB en MySQL, PostgreSQL. En geeft informatie over de minder bekende SQLite en Microsoft SQL Server. Het behandelt de basisprincipes voor site-eigenaren, de details over verbindingen en onderhoud voor beheerders, en de technische laag waarmee ontwikkelaars werken, inclusief het tabelvoorvoegsel, tekensets, de querybouwer en schema-updates.

Joomla genereert de pagina’s, maar de database onthoudt alles.

Het doel is simpel: je helpen begrijpen welke database het beste bij je Joomla site past en hoe Joomla daarmee communiceert.

1. De basis

1.1 Wat is een database?

Een database is een geordende opslag van informatie die andere programma's snel kunnen lezen en schrijven. Joomla gebruikt een relationele database, die gegevens in tabellen bewaart. Elke tabel heeft kolommen (de velden) en rijen (de records). Een artikel is een rij in een tabel met artikelen; een gebruiker is een rij in een tabel met gebruikers.

De software die deze tabellen beheert, is de database-engine (ook wel databaseserver of DBMS genoemd). Joomla bewaart de gegevens niet zelf; het vraagt de engine om dat te doen, met een taal die SQL heet (Structured Query Language).

1.2 Waarom Joomla er een nodig heeft

Een Joomla-pagina is geen bestand op schijf. Als een bezoeker een artikel opent, draait Joomla PHP die een SQL-query naar de database stuurt, het resultaat leest en de HTML ter plekke opbouwt. Bijna alles wat je in de beheeromgeving beheert, staat in de database:

  • Inhoud: artikelen, categorieen, tags, contacten en aangepaste velden.
  • Structuur: menu's, modules en hun posities.
  • Mensen: gebruikers, groepen en toegangsniveaus.
  • Configuratie: de meeste extensie-instellingen en de lijst met geinstalleerde extensies.

Een klein aantal dingen staat juist als bestand, bijvoorbeeld media-uploads, het bestand configuration.php en templatecode. Al het andere staat in de database.

1.3 Waar de database draait

De database-engine draait meestal op dezelfde server als je site, of op een aparte databaseserver ernaast. Joomla maakt er verbinding mee via een netwerksocket met een hostnaam, een gebruikersnaam, een wachtwoord en een databasenaam. Die vier waarden stel je eenmalig in tijdens de installatie, en Joomla bewaart ze in configuration.php.

Naar boven

2. De database-engines die Joomla ondersteunt

2.1 Officieel ondersteund versus beschikbaar

Joomla is gebouwd op het joomla/database-framework, dat drivers meelevert voor meerdere engines. Maar er is een verschil tussen een engine die een driver heeft en een engine die het Joomla-CMS officieel ondersteunt voor een volledige site. Het CMS levert zijn installatie- en updateschema maar voor twee families:

EngineDrivernaam in JoomlaCMS-ondersteuning
MySQL (via MySQLi) mysqli Volledig ondersteund (standaard)
MySQL (via PDO) pdomysql Volledig ondersteund
MariaDB mysqli of pdomysql Volledig ondersteund
PostgreSQL pgsql Ondersteund
SQLite sqlite Alleen framework, niet voor een CMS-site
Microsoft SQL Server sqlsrv Alleen framework, niet voor een CMS-site
Azure SQL sqlazure Alleen framework, niet voor een CMS-site

2.2 Hoe je het verschil herkent

Het bewijs zit in de schemamap. Joomla levert zijn database-updatescripts in administrator/components/com_admin/sql/updates/, en die map bevat precies twee submappen: mysql en postgresql. Er is geen schema voor SQLite of SQL Server, dus hoewel de drivers bestaan, kun je er geen normale Joomla-site op draaien zonder dat schema zelf te schrijven.

2.3 Servertype versus driver

Joomla groepeert de drivers in een kleinere set servertypes. Zowel mysqli als pdomysql melden het servertype mysql; pgsql meldt postgresql; de SQL Server-drivers melden mssql. Extensies controleren het servertype, niet de exacte driver, zodat een query die voor "mysql" is geschreven werkt of de site nu MySQLi of PDO MySQL gebruikt.

Naar boven

3. MySQL en MariaDB

3.1 De standaardkeuze

De grote meerderheid van de Joomla-sites draait op MySQL of MariaDB. Dit zijn de databases die bij vrijwel elk shared hosting-account en elke cPanel-server zitten, en het is wat een verse Joomla-installatie verwacht. Als je niets bijzonders doet, is dit wat je krijgt.

3.2 MariaDB is een fork van MySQL

MariaDB begon als een community-fork van MySQL nadat Oracle MySQL had overgenomen, en de oorspronkelijke MySQL-ontwikkelaars bouwden hem. Voor Joomla zijn ze vrijwel uitwisselbaar: dezelfde SQL, dezelfde tabelindeling, dezelfde Joomla-driver. Joomla detecteert met welke van de twee het praat en past automatisch een paar details aan. Veel hosts leveren tegenwoordig standaard MariaDB en noemen dat gewoon "MySQL".

3.3 MySQLi versus PDO MySQL

Joomla biedt twee manieren om verbinding te maken met een MySQL- of MariaDB-database, en je kiest er een tijdens de installatie:

OptiePHP-extensieWanneer gebruiken
MySQLi mysqli De standaard en meest gebruikte. Stabiel en goed getest.
MySQL (PDO) pdo_mysql Gebruikt de PDO-laag van PHP. Kies dit als je host of werkwijze PDO verkiest.

Voor vrijwel alle sites maakt het verschil niet uit. MySQLi is de veilige standaard. Beide praten met dezelfde database en slaan gegevens op dezelfde manier op, dus je kunt ertussen wisselen door een regel in configuration.php te wijzigen, zolang de bijbehorende PHP-extensie is geinstalleerd.

3.4 Minimale versies

Joomla 6.x vereist MySQL 8.0.13 of hoger (aanbevolen: MySQL 8.4), of MariaDB 10.4 of hoger (aanbevolen: MariaDB 12.0), zie: Joomla! Programmers Documentation: Requirements for Joomla! 6.x. Oudere versies die je soms ziet (MySQL 5.6, MariaDB 10.0) zijn de ondergrens van de onderliggende joomla/database-bibliotheek, niet de eis van het moderne CMS; een Joomla 6-site draait er niet op. Draai een actuele, ondersteunde release voor betere snelheid, beveiliging en volledige utf8mb4-ondersteuning. Een host die nog MySQL 5.7 of een oude MariaDB aanbiedt, draait software die zijn beste tijd heeft gehad, en je zou moeten upgraden of verhuizen voordat je Joomla 6 installeert.

Naar boven

4. PostgreSQL

4.1 Een ondersteund alternatief

PostgreSQL (vaak afgekort tot "Postgres") is een krachtige open-source relationele database met een lange reputatie op het gebied van correctheid en naleving van standaarden. Joomla ondersteunt hem als volwaardig alternatief voor MySQL en MariaDB: het CMS levert een compleet PostgreSQL-schema en updatepad, zodat je er een echte Joomla-site op kunt installeren en draaien.

4.2 Waarom je hem zou kiezen

Mensen kiezen PostgreSQL als hun organisatie er al standaard op werkt, als ze de geavanceerde datatypes en strikte gegevensverwerking nodig hebben, of als een hostingplatform hem als managed standaard aanbiedt. Het is een volwassen, betrouwbare engine.

4.3 De eerlijke afweging

De adder onder het gras is het extensie-ecosysteem. De overgrote meerderheid van de Joomla-extensies is geschreven en getest tegen MySQL of MariaDB. Veel gebruiken MySQL-specifieke SQL en worden nooit op PostgreSQL getest, dus ze kunnen op subtiele manieren falen. De Joomla-core werkt prima op PostgreSQL, maar voordat je een productiesite eraan toevertrouwt, controleer je of elke extensie van derden waar je op leunt het ondersteunt. Joomla 6.x vereist PostgreSQL 12.0 of hoger (het oude cijfer 9.x is alleen de ondergrens van de onderliggende bibliotheek), dus draai een actuele hoofdversie.

Naar boven

5. SQLite en Microsoft SQL Server

5.1 SQLite: de bestandsgebaseerde engine

SQLite is bijzonder: het is helemaal geen server. De hele database is een enkel bestand op schijf, en de engine draait binnen de applicatie die hem opent. Er valt niets te installeren of via een netwerk te benaderen, wat het perfect maakt voor testen, geautomatiseerde testsuites en kleine embedded tools.

Het framework van Joomla levert een SQLite-driver mee, en het Joomla-project gebruikt SQLite intern voor sommige van zijn eigen geautomatiseerde tests. Maar het Joomla-CMS levert geen SQLite-installatieschema, dus je kunt er geen normale Joomla-website op draaien. Beschouw de SQLite-driver als een tool voor ontwikkelaars en het framework, niet als een hostingoptie.

5.2 Microsoft SQL Server en Azure SQL

Het framework levert ook drivers voor Microsoft SQL Server (sqlsrv) en Azure SQL (sqlazure), beide gemeld als servertype mssql. Net als bij SQLite heeft het CMS geen MSSQL-installatie- of updateschema, dus deze drivers bestaan voor maatwerkapplicaties op het Joomla-framework, niet voor een standaard Joomla-site. Als een host of artikel suggereert om Joomla op SQL Server te installeren, wees dan voorzichtig: het ondersteunde pad voor een Microsoft-omgeving is MySQL of MariaDB op Windows draaien, of IIS voor een MySQL-database zetten.

5.3 De praktische conclusie

Voor een echte Joomla-website zijn je echte keuzes MySQL, MariaDB of PostgreSQL. SQLite en SQL Server zijn alleen relevant als je een ontwikkelaar bent die een maatwerkapplicatie bovenop het Joomla-framework bouwt.

Naar boven

6. De juiste database kiezen

6.1 Een praktische vergelijking

Voor de meeste mensen wordt de keuze gemaakt door hun host. Als je wel kunt kiezen, zijn dit de punten die ertoe doen:

EngineGeschikt voorExtensie-ondersteuningCMS-installatie
MariaDB De meeste sites; de moderne standaard Uitstekend Ja
MySQL Sites op hosts die Oracle MySQL leveren Uitstekend Ja
PostgreSQL Organisaties die op Postgres standaardiseren Beperkt (eerst testen) Ja
SQLite Frameworktests en tooling Niet van toepassing Nee
MS SQL Server Alleen maatwerk-frameworkapps Niet van toepassing Nee

6.2 Een eenvoudige vuistregel

  • Kies voor vrijwel elke Joomla-site MariaDB (of MySQL als dat is wat je host biedt). Het hele extensie-ecosysteem is erop gebouwd en getest.
  • Kies PostgreSQL alleen als je een sterke reden hebt en je hebt gecontroleerd dat je extensies het ondersteunen.
  • Probeer geen productie-Joomla-site te draaien op SQLite of SQL Server.

Het merk database doet er veel minder toe dan hem op een actuele versie houden, voldoende geheugen geven en back-uppen. Een goed afgestelde MariaDB verslaat een verwaarloosd wat-dan-ook.

Naar boven

7. Hoe Joomla verbinding maakt met de database

7.1 Het bestand configuration.php

Joomla bewaart de databaseverbindingsgegevens in het rootbestand configuration.php, ingesteld tijdens de installatie. Vijf instellingen bepalen de verbinding:

public $dbtype = 'mysqli';        // de driver: mysqli, pdomysql of pgsql
public $host = 'localhost';       // adres van de databaseserver
public $user = 'joomla_user';     // databaseaccount
public $password = 'secret';      // het wachtwoord
public $db = 'joomla_site';       // de databasenaam
public $dbprefix = 'abcd1_';      // de tabelprefix (zie sectie 8)

De waarde $dbtype is de drivernaam uit sectie 2. Om een MySQL-site van MySQLi naar PDO over te zetten, wijzig je hier mysqli in pdomysql, mits de PHP-extensie pdo_mysql is geinstalleerd. Omdat dit bestand het wachtwoord in platte tekst bevat, mag de webserver het nooit serveren; Joomla en een correcte serverconfiguratie houden het afgeschermd.

7.2 De host-waarde

De $host is meestal localhost of 127.0.0.1 als de database op dezelfde machine draait. Managed en cloudhosting geeft je vaak een aparte hostnaam en soms een poort, geschreven als host:poort. Sommige opstellingen verbinden via een Unix-socket in plaats van TCP. Je host vertelt je de juiste waarde; een verkeerde host is de meest voorkomende oorzaak van "Could not connect to the database" tijdens de installatie.

7.3 Wat er bij elke aanvraag gebeurt

Als er een aanvraag binnenkomt, leest Joomla configuration.php, laadt de bijbehorende driver en opent een verbinding met de engine. Elke query in die aanvraag gaat over die ene verbinding, en Joomla sluit hem als de aanvraag eindigt. Daarom maakt een trage of overbelaste database de hele site traag: elke pagina wacht erop.

7.4 Verbinden met een database op afstand

Als je lokaal ontwikkelt maar wilt werken tegen een database op een server op afstand, heb je twee manieren om hem te bereiken, en die hebben heel verschillende beveiligingsprofielen.

Directe verbinding met een IP-allowlist. Je wijst Joomla rechtstreeks naar de server op afstand door $host op zijn adres en poort te zetten, bijvoorbeeld db.example.com:3306. Hiervoor moet de database op afstand verbindingen van buitenaf accepteren, moet de firewall jouw IP-adres toestaan en moet de databasegebruiker vanaf dat adres mogen verbinden. Dit is eenvoudig, maar het stelt de databasepoort bloot aan het internet en gaat stuk zodra je thuis- of kantoor-IP verandert.

SSH-tunnel (de veiligere optie). In plaats van de database voor de hele wereld open te zetten, stuur je een lokale poort via SSH door naar de server op afstand. Joomla verbindt dan met die lokale poort alsof de database op je eigen machine staat. Je opent de tunnel met een commando:

ssh -N -L 3307:127.0.0.1:3306 Dit e-mailadres wordt beveiligd tegen spambots. JavaScript dient ingeschakeld te zijn om het te bekijken.

Dit koppelt lokale poort 3307 aan 127.0.0.1:3306 zoals de server op afstand die ziet, dus zijn eigen MySQL. Wijs Joomla nu naar het lokale uiteinde van de tunnel:

public $host = '127.0.0.1:3307';   // lokale uiteinde van de SSH-tunnel
public $user = 'remote_db_user';
public $password = 'remote_db_password';
public $db = 'remote_db_name';

Omdat de tunnel eindigt op de server op afstand, ziet MySQL de verbinding alsof die van zijn eigen localhost komt, zodat het databaseaccount beperkt kan blijven tot localhost en de databasepoort nooit naar het internet hoeft te wijzen. Alleen SSH (met sleutel-authenticatie) staat open, en daarom is een tunnel veiliger dan de poort openzetten en een IP op een allowlist plaatsen.

Twee belangrijke details:

  • Gebruik 127.0.0.1, niet localhost. De MySQLi-driver behandelt het letterlijke woord localhost als een verzoek om een Unix-socket en negeert de poort, waardoor de tunnel wordt omzeild. 127.0.0.1 dwingt een echte TCP-verbinding naar de doorgestuurde poort af.
  • De SSH-inloggegevens staan niet in Joomla. De SSH-host, gebruiker en sleutel staan in je SSH-client (het commando hierboven of een vermelding in ~/.ssh/config), nooit in configuration.php. Joomla ziet alleen de databaseverbinding met 127.0.0.1:3307. Dit zijn twee aparte logins: SSH authenticeert de tunnel, de databasegegevens authenticeren Joomla.

Houd de tunnel open zolang Joomla draait; als hij wegvalt, meldt Joomla meteen "Could not connect to the database". Een tool als autossh opent hem automatisch opnieuw. Onthoud ook dat je op live data werkt, dus behandel destructieve acties met dezelfde zorg als op productie.

Naar boven

8. De tabelprefix en het schema

8.1 Waarom tabellen een prefix hebben

Joomla noemt zijn tabellen niet rechtstreeks content of users. Elke tabel begint met een korte prefix, bijvoorbeeld abcd1_content of abcd1_users. Het installatieprogramma genereert een willekeurige prefix (die je kunt wijzigen) en bewaart die als $dbprefix. De prefix doet twee nuttige dingen:

  • Hij laat meerdere applicaties een database delen zonder dat hun tabellen botsen.
  • Hij maakt blinde aanvallen wat lastiger, omdat een aanvaller je exacte tabelnamen niet kan raden.

8.2 De placeholder #__

In Joomla-code en SQL schrijf je nooit de echte prefix. Je schrijft de placeholder #__ (hekje, underscore, underscore), en Joomla vervangt die op het moment van de query door de echte prefix. Deze query:

SELECT * FROM #__content WHERE state = 1

wordt dus SELECT * FROM abcd1_content WHERE state = 1 voordat hij de database bereikt. Daarom verwijzen extensie-SQL en de documentatie altijd naar tabellen als #__content, #__users, #__menu, enzovoort. Het houdt code overdraagbaar tussen sites met verschillende prefixes.

8.3 Een overzicht van de kerntabellen

Een standaard Joomla-installatie maakt tientallen tabellen. Een paar van de belangrijkste:

TabelWat hij bevat
#__content Artikelen.
#__categories Categorieen voor alle inhoudstypen.
#__users Gebruikersaccounts.
#__user_usergroup_map Welke gebruikers bij welke groepen horen.
#__menu Menu-items en hun routering.
#__modules Modules en hun instellingen.
#__extensions Elke geinstalleerde extensie en zijn parameters.
#__fields / #__fields_values Aangepaste velden en hun opgeslagen waarden.
#__assets De toegangsrechten-boom (ACL).

Je raakt deze zelden met de hand aan. Joomla en zijn extensies lezen en schrijven ze via de databaselaag die hierna wordt beschreven.

Naar boven

9. Tekensets en collation

9.1 Waarom codering ertoe doet

Een tekenset bepaalt welke tekens de database kan opslaan; een collation bepaalt hoe hij ze sorteert en vergelijkt. Als dit fout gaat, veranderen letters met accenten, emoji of niet-Latijnse schriften in vraagtekens of mojibake, en gaat het sorteren raar. Joomla streeft naar volledige Unicode zodat een site elke taal aankan.

9.2 Hoe collation het sorteren verandert

Collation gaat niet alleen over opslag; het bepaalt de volgorde van een alfabetische lijst, en die volgorde hangt af van de taal. Dezelfde woorden sorteren anders onder een algemene (ASCII/Engelse) collation dan onder een taalspecifieke. Een klassiek voorbeeld is de Zweedse stad Örebro:

  • Algemene (ASCII/Engelse) collation: Ö wordt behandeld als een gewone O, dus "Örebro" wordt gesorteerd alsof het "Orebro" is en belandt tussen de O-vermeldingen.
  • Zweedse collation: Ö is een aparte letter die na Z komt. Het Zweedse alfabet eindigt met X, Y, Z, Å, Ä, Ö, dus "Örebro" sorteert bijna helemaal achteraan in de lijst.

Het effect op een lijst met plaatsnamen is goed te zien:

Algemene / Engelse sorteringZweedse sortering
Malmö (behandeld als "Malmo") Malmö
Örebro (behandeld als "Orebro") Stockholm
Stockholm Uppsala
Uppsala Örebro

Daarom kan een meertalige Joomla-site een categorie- of taglijst tonen in een volgorde die voor een moedertaalspreker verkeerd lijkt: de database sorteert correct, alleen onder de verkeerde collation voor die taal. De oplossing is de collation af te stemmen op de taal van de inhoud in plaats van alles op een enkele algemene collation te laten.

9.3 utf8mb4 op MySQL en MariaDB

Op MySQL en MariaDB gebruikt Joomla utf8mb4, de vier-byte UTF-8-codering die elk Unicode-teken kan opslaan, inclusief emoji. De oudere utf8 in MySQL is eigenlijk maar drie bytes en kan geen emoji of sommige Aziatische tekens opslaan, wat jarenlang voor subtiele bugs zorgde. Joomla controleert de databaseversie en zet utf8mb4-ondersteuning aan zodra de server nieuw genoeg is (MySQL of MariaDB vanaf de 5.5.3-generatie). Een typische Joomla-tabel gebruikt de collation utf8mb4_unicode_ci, waarbij ci staat voor hoofdletterongevoelig (case-insensitive).

9.4 Het detail van de null-datum

Elke engine vertegenwoordigt een "lege" tijdstempel anders, en Joomla kent de juiste waarde per driver. Op MySQL en MariaDB is de historische null-datum 0000-00-00 00:00:00; als de server in strict mode draait die nuldatums verbiedt, gebruikt Joomla in plaats daarvan 1000-01-01 00:00:00. PostgreSQL gebruikt 1970-01-01 00:00:00 en SQL Server 1900-01-01 00:00:00. Dit is onzichtbaar in dagelijks gebruik, maar het verklaart waarom je nooit 0000-00-00 hard in je eigen query's moet zetten. Vraag de driver in plaats daarvan om de null-datum, met $db->getNullDate().

Modern Joomla is waar het kan afgestapt van de nuldatum-vervanger. Veel datumkolommen zijn nu nullable, en een lege datum wordt opgeslagen als een echte SQL-NULL in plaats van 0000-00-00; een actueel Joomla 6-schema geeft geen enkele kolom meer standaard een nuldatum. De null-datum die getNullDate() teruggeeft, blijft van belang voor de kolommen die niet-nullable zijn, bijvoorbeeld created in #__content. De veilige regel heeft dus twee delen: vergelijk met $db->getNullDate() voor niet-nullable datumkolommen, en controleer op SQL-NULL bij de nullable kolommen, in plaats van ooit met de hand 0000-00-00 te schrijven.

Naar boven

10. Onder de motorkap: de databaselaag van Joomla

10.1 De driver en de interface

Joomla laat je code nooit rechtstreeks met MySQL-functies praten. In plaats daarvan geeft het je een databasedriver-object dat Joomla\Database\DatabaseInterface implementeert. Welke engine eronder zit, je code gebruikt dezelfde methodes, zodat dezelfde PHP zowel op MySQL als op PostgreSQL werkt. Je haalt de gedeelde driver op uit de dependency-container:

use Joomla\CMS\Factory;
use Joomla\Database\DatabaseInterface;

$db = Factory::getContainer()->get(DatabaseInterface::class);

Dit ene object is de deur naar de hele database. Oudere code gebruikte Factory::getDbo(); de container-aanpak hierboven is de moderne, aanbevolen manier.

10.2 Een eenvoudige query draaien

Zodra je de driver hebt, zet je een query klaar en vraag je het resultaat in de vorm die je wilt:

$db->setQuery('SELECT title FROM #__content WHERE id = 42');

$title  = $db->loadResult();      // een enkele waarde
$row    = $db->loadObject();      // een rij als object
$rows   = $db->loadObjectList();  // meerdere rijen
$column = $db->loadColumn();      // een kolom uit meerdere rijen

De load*-familie verbergt de verschillen tussen engines en geeft je gewone PHP-waarden, -objecten of -arrays.

10.3 De servertype-schakelaar

Als je engine-specifieke SQL moet schrijven, raad dan niet op basis van de drivernaam. Vraag het servertype op en vertak daarop:

if ($db->getServerType() === 'postgresql') {
    // PostgreSQL-specifieke SQL
} else {
    // MySQL / MariaDB-SQL
}

Dit is dezelfde controle die de Joomla-core gebruikt, en het houdt een extensie werkend op beide ondersteunde engines.

Naar boven

11. Query's schrijven op de Joomla-manier

11.1 De query builder

Handgeschreven SQL-strings zijn kwetsbaar en makkelijk fout te krijgen, vooral rond quoting. Joomla biedt een query builder die correcte, overdraagbare SQL voor de actieve engine schrijft. Je haalt een lege query op met $db->getQuery(true) en ketent er methodes aan:

use Joomla\CMS\Factory;
use Joomla\Database\DatabaseInterface;
use Joomla\Database\ParameterType;

$db    = Factory::getContainer()->get(DatabaseInterface::class);
$query = $db->getQuery(true);

$query->select($db->quoteName(['id', 'title']))
      ->from($db->quoteName('#__content'))
      ->where($db->quoteName('state') . ' = :state')
      ->order($db->quoteName('created') . ' DESC');

$query->bind(':state', 1, ParameterType::INTEGER);

$db->setQuery($query);
$articles = $db->loadObjectList();

11.2 Quote namen en bind waarden

Twee regels houden je query's veilig en overdraagbaar:

  • Quote identifiers (tabel- en kolomnamen) met $db->quoteName(). Het voegt het juiste quote-teken voor de engine toe, backticks op MySQL en dubbele aanhalingstekens op PostgreSQL.
  • Bind waarden met benoemde parameters en bind(), of quote ze met $db->quote(). Plak nooit een rauwe waarde uit een formulier rechtstreeks in SQL.

11.3 Waarom dit SQL-injectie tegenhoudt

SQL-injectie is de aanval waarbij een gebruiker SQL in een formulierveld typt en de server het uitvoert. Parameters binden verslaat dit, want een gebonden waarde wordt altijd als data behandeld, nooit als code. De query builder is niet alleen netjes; het is de eerste verdedigingslinie van Joomla's databasebeveiliging. De meeste meldingen van datalekken in Joomla-extensies zijn terug te voeren op een query die deze stap oversloeg.

Naar boven

12. Storage engines, transacties en integriteit

12.1 De storage engine

Op MySQL en MariaDB is de storage engine het deel van de database dat de tabelgegevens daadwerkelijk opslaat en bepaalt hoe ze worden gelezen, geschreven en vergrendeld. De keuze doet ertoe, en Joomla maakt hem voor je: kerntabellen worden aangemaakt met ENGINE=InnoDB. Vrijwel alle Joomla-kerntabellen gebruiken InnoDB. Sommige gespecialiseerde of tijdelijke tabellen die Joomla of extensies aanmaken, gebruiken misschien de MEMORY-engine, maar dat is ongebruikelijk.

KenmerkInnoDBMyISAM (oud)
Transacties Ja Nee
Locking Op rijniveau Op tabelniveau
Crash recovery Sterk Zwak
Foreign keys Ondersteund Niet ondersteund
Joomla-gebruik Alle kerntabellen Alleen oude sites

De oudere MyISAM-engine kan snel zijn voor puur lezen, maar hij vergrendelt een hele tabel bij elke schrijfactie en heeft geen transacties en zwakke crash recovery. Op een drukke site die lezen en schrijven mengt, laat tabel-locking pagina's achter elkaar in de wachtrij staan. Als je een oude site erft waarvan de tabellen nog MyISAM zijn, zet ze dan om naar InnoDB; dat is een veilige, beproefde wijziging.

12.2 Transacties en ACID

Een transactie groepeert meerdere query's zodat ze allemaal slagen of allemaal samen falen. Het klassieke voorbeeld is een bestelling: maak de bestelling aan, verlaag de voorraad, leg de betaling vast. Als de betalingsstap mislukt, wil je de voorraad niet al verlaagd hebben. Een transactie laat de database de eerdere stappen ongedaan maken alsof ze nooit zijn gebeurd.

Dit is het idee achter ACID, de vier garanties die een serieuze database geeft: Atomiciteit (alles of niets), Consistentie (de gegevens blijven geldig), Isolatie (gelijktijdige transacties bederven elkaar niet) en Duurzaamheid (een vastgelegde wijziging overleeft een crash). InnoDB is een ACID-conforme storage engine; MyISAM is dat niet, nog een reden waarom Joomla op InnoDB standaardiseert.

De databaselaag van Joomla biedt transacties via drie methodes op de driver:

$db->transactionStart();

try {
    // meerdere samenhangende query's die samen moeten slagen
    $db->setQuery($query1)->execute();
    $db->setQuery($query2)->execute();

    $db->transactionCommit();
} catch (\Exception $e) {
    $db->transactionRollback();
    throw $e;
}

Gebruik een transactie wanneer een logische wijziging meer dan een tabel of rij beslaat, zodat een half afgemaakte bewerking de database niet in een kapotte staat kan achterlaten.

12.3 Waarom Joomla foreign keys vermijdt

Een foreign key is een databaseregel die een kolom in de ene tabel koppelt aan een rij in een andere, bijvoorbeeld de catid van een artikel aan een echte rij in #__categories. De database weigert dan een artikel op te slaan dat naar een categorie wijst die niet bestaat. InnoDB ondersteunt foreign keys, en toch declareert het Joomla-kernschema er vrijwel geen. Dit verrast ontwikkelaars die van andere frameworks komen.

De reden is bewust. Joomla handhaaft deze relaties in PHP, in zijn models en table-klassen, in plaats van in de database. Dat houdt het schema overdraagbaar tussen MySQL, MariaDB en PostgreSQL, en het stamt uit de tijd dat MyISAM (dat geen foreign keys heeft) de standaard was. Het praktische gevolg is belangrijk: omdat de database je niet tegenhoudt, kan het met de hand verwijderen of bewerken van rijen verweesde records achterlaten, bijvoorbeeld een module die naar een menu-item wijst dat niet meer bestaat. Gebruik voor regulier sitebeheer de Joomla-beheeromgeving of de database-API van Joomla. Directe SQL-updates kun je het beste reserveren voor beheerders die de relaties tussen Joomla-tabellen begrijpen.

Naar boven

13. Schema-updates en migraties

13.1 Hoe Joomla de database wijzigt

Als Joomla of een extensie wordt bijgewerkt, heeft de nieuwe versie vaak nieuwe kolommen of tabellen nodig. Joomla past deze wijzigingen toe via geversioneerde SQL-updatebestanden. De kernbestanden staan in administrator/components/com_admin/sql/updates/, opgesplitst per engine in de mappen mysql/ en postgresql/, met een bestand per wijziging benoemd naar versie en datum.

13.2 Het database-reparatieprogramma

Soms wordt een update onderbroken, of raakt een database uit de pas met de versie die Joomla verwacht. Joomla heeft een ingebouwde controle bij Systeem → Onderhoud → Database. Het vergelijkt je werkelijke schema met het schema dat de geinstalleerde versie zou moeten hebben en biedt een knop Herstel die de ontbrekende wijzigingen uitvoert. Zie je ooit "Database schema is not up to date", dan is dit de pagina die het repareert.

13.3 De command line

Hetzelfde onderhoud bestaat op de command line, handig voor geautomatiseerde deployments:

php cli/joomla.php maintenance:database

Dit controleert het schema en meldt of repareert problemen zonder de beheeromgeving te openen. Het is het database-equivalent van een vastgelopen update met de hand vlottrekken.

13.4 Extensies doen hetzelfde

Goed gebouwde extensies leveren hun eigen SQL-updatebestanden en een installatiescript mee, zodat het installeren van een nieuwe versie hun tabellen automatisch bijwerkt. Daarom werk je extensies bij via het Joomla-installatieprogramma in plaats van bestanden eroverheen te kopieren: het installatieprogramma voert de schemawijzigingen uit die losse bestanden zouden overslaan.

Naar boven

14. Back-ups en onderhoud

14.1 Een back-up is een databaseback-up

Omdat de site in de database leeft, is een back-up zonder de database vrijwel waardeloos. Een complete Joomla-back-up heeft twee delen: de bestanden (media, templates, extensies, configuration.php) en een volledige SQL-dump van de database. Tools als Akeeba Backup bundelen beide in een archief; een kale bestandskopie alleen zet je inhoud niet terug.

14.2 Met de hand een dump maken

Op een server met shell-toegang exporteer je de database met de eigen tool van de engine. Voor MySQL of MariaDB:

mysqldump -u USER -p DATABASE > backup.sql        # exporteren
mysql -u USER -p DATABASE < backup.sql            # importeren

Voor PostgreSQL zijn de equivalenten pg_dump en psql. Bewaar de export en de bijbehorende bestandskopie samen, en test af en toe een restore; een back-up die je nooit hebt teruggezet is alleen maar hoop.

14.3 Regulier onderhoud

Een paar gewoontes houden een Joomla-database gezond:

  • Ruim oude gegevens op die Joomla laat oplopen: actielogs, verlopen sessies en oude inhoudsversies in #__history.
  • Verwijder extensies die je niet meer gebruikt, zodat hun tabellen niet blijven hangen.
  • Houd de engine op een actuele, gepatchte versie.
  • Houd de databasegrootte in de gaten; uit de hand lopende log- of cachetabellen zijn de gebruikelijke oorzaak van plotselinge groei.
Naar boven

15. Performance en tuning

15.1 Indexen zijn de grote hefboom

Een index is een opzoekstructuur waarmee de database rijen vindt zonder de hele tabel te doorlopen, net als de index achter in een boek. De kerntabellen van Joomla zijn goed geindexeerd. De performanceproblemen waar mensen tegenaan lopen, komen meestal van grote maatwerktabellen of extensies die niet-geindexeerde kolommen bevragen. Als een bepaalde pagina traag is, is de oorzaak vaak een query zonder index. Indexen zijn niet gratis: elke index versnelt het lezen maar voegt een beetje kosten toe aan elke insert en update, dus indexeer de kolommen waarop je zoekt en filtert, niet elke kolom.

15.2 De trage query's vinden

Zet Joomla's Debug-modus aan in de Globale configuratie, en de Debug-plugin toont elke query die een pagina draaide, met tijden. De database-engine kan ook trage query's loggen (de slow query log van MySQL). Samen vertellen ze je precies welke query je moet aanpakken, in plaats van gissen.

15.3 Lees het queryplan met EXPLAIN

Zodra je weet welke query traag is, vraag de database waarom. Elke engine heeft een query planner die bepaalt hoe een query wordt uitgevoerd, en je ziet zijn plan door EXPLAIN voor de query te zetten:

EXPLAIN SELECT title FROM #__content WHERE state = 1;

De uitvoer vertelt je of de database een index gebruikt of de hele tabel doorloopt (let op "ALL", wat een volledige tabelscan betekent). Op PostgreSQL gaat EXPLAIN ANALYZE verder en draait de query echt om reele tijden te melden. Dit is de nuttigste gewoonte om een trage query te diagnosticeren: gis niet of een index helpt, meet het.

15.4 Caching spaart de database

De snelste query is degene die je nooit draait. Joomla's caching (de System - Page Cache-plugin en view-caching) bewaart opgebouwde pagina's en queryresultaten zodat herhaalbezoeken de database helemaal overslaan. Op een drukke site haalt dit enorm veel belasting van de engine. Combineer het met een persistente cache-opslag als Redis of Memcached voor het beste effect.

15.5 Geef de engine ruimte

Een database-engine is veel sneller als hij de werkgegevens in het geheugen kan houden. Op een managed host is dit voor je afgesteld; op je eigen server bepalen instellingen als MariaDB's innodb_buffer_pool_size hoeveel van de database in RAM gecachet blijft. Genoeg geheugen voor de engine doet vaak meer voor de snelheid dan welke losse Joomla-instelling ook.

15.6 Een echt voorbeeld: DISTINCT vermijden

Een les uit de ontwikkeling van de Joomla-core zelf laat zien waarom de vorm van een query meer uitmaakt dan de engine eronder. Toen ik in 2015 de functie Category Item Count voor Joomla ontwikkelde, gebruikte mijn eerste versie het SQL-sleutelwoord DISTINCT om dubbele rijen te verwijderen. Op kleine sites werkte het prima. Maar mensen met heel grote sites, veel categorieen met elk een enorm aantal artikelen, meldden ernstige vertragingen.

De reden is dat DISTINCT de database dwingt uit te zoeken welke rijen dubbel zijn voordat hij een resultaat kan teruggeven, vaak met extra sortering, een tijdelijke tabel of hashing. Op een grote dataset wordt dat duur. De query is later herschreven om hetzelfde resultaat zonder DISTINCT te leveren, en de vertraging verdween.

Een query die er elegant uitziet, is niet altijd de snelste query.

Als je SQL voor een Joomla-extensie schrijft en je naar DISTINCT grijpt om dubbele rijen te verbergen, stop dan en vraag waar de dubbelingen vandaan komen. Vaak haalt een betere JOIN, een selectievere WHERE, een GROUP BY of een extra index de noodzaak ervan helemaal weg. En bevestig altijd met EXPLAIN (MySQL en MariaDB) of EXPLAIN ANALYZE (PostgreSQL) in plaats van aan te nemen dat de query al optimaal is.

Naar boven

16. SEO en metadata

De database bevat geen metatags of sitemaps rechtstreeks, maar hij vormt SEO op twee stille manieren. Ten eerste bewaart hij de gegevens waar SEO van afhangt: artikel-metadata, de URL-aliassen in #__content en #__menu, en de redirect-tabel #__redirect_links die kapotte links omzet in nette 301's. Ten tweede, en belangrijker, voedt databasesnelheid de Core Web Vitals. Een pagina die op een trage query wacht, is een trage pagina, en zoekmachines meten dat.

  • Houd query's snel met indexen en caching zodat pagina's snel laden, wat Google beloont.
  • Houd de tabel #__redirect_links op orde zodat verplaatste pagina's 301 in plaats van 404 teruggeven.
  • Maak een back-up voordat je in bulk aliassen of categorieen bewerkt; een misgelopen massawijziging kan in een keer elke URL op de site breken.

Hiervoor heb je geen SEO-extensie nodig. Een gezonde, snelle database is zelf een SEO-troef, want elke pagina wordt eruit opgebouwd.

Naar boven

17. Veelgemaakte fouten en valkuilen

17.1 Verkeerde verbindingsgegevens

Symptoom: de installatie of de site mislukt met "Could not connect to the database".

Oplossing: controleer de vier waarden in configuration.php tegen wat je host je gaf: host (vaak localhost of met een poort), gebruiker, wachtwoord en databasenaam. Een verkeerde host of een database die nog niet bestaat, is de gebruikelijke oorzaak.

17.2 PostgreSQL kiezen zonder extensies te controleren

Symptoom: de core werkt, maar een extensie van derden gooit SQL-fouten op PostgreSQL.

Oplossing: bevestig dat elke extensie PostgreSQL ondersteunt voordat je je vastlegt. Bij twijfel gebruik je MariaDB, waar het hele ecosysteem op mikt.

17.3 De valkuil utf8 versus utf8mb4

Symptoom: emoji of sommige tekens worden opgeslagen als vraagtekens, of een gemigreerde database toont mojibake.

Oplossing: zorg dat de database en tabellen utf8mb4 gebruiken, niet de oude drie-byte utf8. Zet een oudere database om naar utf8mb4 in plaats van hem op utf8 te laten.

17.4 Tabellen met de hand bewerken

Symptoom: gegevens zien er goed uit in phpMyAdmin, maar Joomla gedraagt zich vreemd, verliest toegangsrechten of toont verweesde items.

Oplossing: vermijd directe tabelbewerkingen. Joomla houdt samenhangende tabellen in de pas (assets, history, associaties); een rij met de hand wijzigen kan die koppelingen breken. Gebruik de beheeromgeving of de databaselaag.

17.5 Geen database in de back-up

Symptoom: een "back-up" zet de bestanden terug maar de site is leeg of blijft op een oude versie hangen.

Oplossing: maak altijd back-up van bestanden en de SQL-dump samen, en test een restore. Een kopie van alleen bestanden is geen Joomla-back-up.

17.6 De tabelprefix hardcoderen

Symptoom: maatwerk-SQL werkt op de ene site maar faalt op een andere met een andere prefix.

Oplossing: schrijf #__tabelnaam, nooit de letterlijke prefix. Joomla vervangt de echte prefix tijdens het draaien.

Naar boven

18. Best practices

Als je maar een paar dingen uit dit artikel onthoudt, onthoud dan deze:

  • Gebruik voor vrijwel elke site MariaDB of MySQL; het hele extensie-ecosysteem is erop gebouwd.
  • Kies PostgreSQL alleen met een duidelijke reden en na het testen van elke extensie.
  • Draai geen productie-Joomla-site op SQLite of SQL Server; hun drivers zijn voor frameworkapps, niet voor het CMS.
  • Houd de engine op een actuele, ondersteunde versie en zorg dat hij utf8mb4 gebruikt.
  • Bescherm configuration.php; het bevat het databasewachtwoord in platte tekst.
  • Gebruik in code altijd de databaselaag: quoteName() voor namen en gebonden parameters voor waarden, om SQL-injectie tegen te houden.
  • Schrijf #__ in plaats van de echte tabelprefix zodat je SQL overdraagbaar blijft.
  • Maak back-up van bestanden en de SQL-dump samen, en test regelmatig een restore.
  • Houd tabellen op InnoDB, en verpak meerstaps-wijzigingen in een transactie zodat ze niet half kunnen blijven steken.
  • Gebruik Debug-modus, de slow query log en EXPLAIN om trage query's te vinden, en voeg dan indexen of caching toe.
  • Wees voorzichtig met DISTINCT; het verbergt vaak een query die een betere JOIN, WHERE, GROUP BY of index sneller zou oplossen.
  • Draai het database-reparatieprogramma na elke onderbroken update.
Naar boven

19. In het kort

ONDERSTEUND (CMS)  MariaDB, MySQL, PostgreSQL
ALLEEN DRIVER      SQLite, MS SQL Server, Azure SQL (frameworkapps)
DBTYPE-WAARDEN     mysqli, pdomysql, pgsql
SERVERTYPES        mysql, postgresql, mssql, sqlite
VEREISTEN          Joomla 6.x: MySQL 8.0.13+, MariaDB 10.4+, PostgreSQL 12.0+
VERBINDING         configuration.php: dbtype, host, user, password, db, dbprefix
TABELPREFIX        Schrijf #__tabel; Joomla zet de echte prefix erin
CODERING           utf8mb4 op MySQL/MariaDB (niet 3-byte utf8)
DRIVER OPHALEN     Factory::getContainer()->get(DatabaseInterface::class)
QUERY              $db->getQuery(true) + quoteName() + bind()
SERVERTYPE-CHECK   $db->getServerType()  // 'mysql' of 'postgresql'
STORAGE ENGINE     InnoDB voor alle kerntabellen (niet MyISAM)
TRANSACTIES        $db->transactionStart() / transactionCommit() / Rollback()
INTEGRITEIT        Joomla gebruikt geen DB-foreign-keys; in PHP afgedwongen
SCHEMABESTANDEN    administrator/components/com_admin/sql/updates/{mysql,postgresql}
SCHEMA HERSTELLEN  Systeem → Onderhoud → Database  (of CLI hieronder)
CLI                php cli/joomla.php maintenance:database
BACK-UP            Bestanden + SQL-dump samen (mysqldump / pg_dump)
SNELHEID           Indexen + caching (Page Cache, Redis) + enginegeheugen
DIAGNOSE           EXPLAIN (MySQL) / EXPLAIN ANALYZE (PostgreSQL); vermijd DISTINCT
Naar boven

20. Samenvatting

De database is waar je Joomla-site echt leeft. Bijna elk artikel, menu, gebruiker en instelling is een rij die Joomla leest om elke pagina op te bouwen, dus de gezondheid van de database is de gezondheid van de site.

  • MariaDB en MySQL zijn de standaard en de veilige keuze, ondersteund door het hele extensie-ecosysteem.
  • PostgreSQL is een volwaardig alternatief, maar alleen als je extensies het ook ondersteunen.
  • SQLite en SQL Server hebben frameworkdrivers maar geen CMS-schema, dus ze zijn voor maatwerkapplicaties, niet voor websites.
  • Joomla praat met al deze via een enkele databaselaag, met de #__-prefix, de query builder en gebonden parameters om overdraagbaar en veilig te blijven.
  • Goede codering, back-ups, indexen en caching doen er meer toe dan het merk engine dat je kiest.

Als je Joomla-site traag is, schemafouten gooit na een update, of de verkeerde tekens opslaat, ligt de oorzaak vaak in de database in plaats van in Joomla zelf. Een zorgvuldige blik op de versie, de codering, de trage query's en de back-ups vindt het probleem meestal snel, en het is precies het soort stille, fundamentele werk dat een site jarenlang snel en betrouwbaar houdt.

Naar boven
Databases voor Joomla
Peter Martin
Peter Martin
Joomla Specialist

Peter is Joomla specialist en Linux admin voor snelle, veilige en schaalbare websites.

Veelgestelde vragen

Welke database gebruikt Joomla?

Joomla gebruikt MySQL of MariaDB als primaire database voor het opslaan van website-inhoud, gebruikersaccounts, menu’s, extensies, instellingen en configuratiegegevens. Joomla ondersteunt ook PostgreSQL, hoewel MySQL en MariaDB de aanbevolen en meest gebruikte opties zijn voor optimale compatibiliteit en prestaties.

Waar wordt de Joomla database opgeslagen?

De Joomla database wordt opgeslagen op een databaseserver, meestal MySQL of MariaDB, en niet in de bestanden van je website. Joomla slaat de gegevens voor de databaseverbinding, waaronder de databasenaam, gebruikersnaam, wachtwoord en host, op in het bestand configuration.php, zodat het toegang heeft tot de inhoud en instellingen van je site.

Wat is het tabelvoorvoegsel van Joomla?

Joomla slaat zijn gegevens op in verschillende databasetabellen, die elk een specifiek doel hebben. Elke tabelnaam begint met een uniek tabelvoorvoegsel (in de Joomla-code weergegeven als #__, bijvoorbeeld jos_ of een willekeurig voorvoegsel zoals abc12_). Dit voorvoegsel wordt geconfigureerd in configuration.php en helpt conflicten te voorkomen en de beveiliging te verbeteren wanneer meerdere Joomla-installaties dezelfde database delen. In de Joomla-code wordt naar tabellen verwezen met #__, wat Joomla automatisch vervangt door het daadwerkelijke tabelvoorvoegsel dat is geconfigureerd in configuration.php.

Wat zijn de belangrijkste databasetabellen van Joomla?

Hoewel een standaard Joomla website tientallen tabellen bevat, zijn dit de belangrijkste die je het vaakst zult tegenkomen:

  • #__content - je artikelen.
  • #__categories - de categorieën die worden gebruikt voor artikelen, contacten en andere inhoud.
  • #__users - de gebruikersaccounts waarmee kan worden ingelogd.
  • #__usergroups en #__user_usergroup_map - de gebruikersgroepen en welke gebruikers daar deel van uitmaken.
  • #__menu en #__menu_types - je menu-items en de menu’s waartoe ze behoren.
  • #__modules en #__modules_menu - je modules en de menupagina’s waarop ze verschijnen.
  • #__extensions - alle geïnstalleerde componenten, modules, plug-ins, sjablonen en talen.
  • #__fields - aangepaste velden die zijn toegevoegd aan artikelen, gebruikers en contacten.
  • #__tags - de tags die worden gebruikt om inhoud te labelen en te groeperen.
  • #__template_styles - de geconfigureerde stijlen voor uw sjablonen.
  • #__assets - de machtigingenboom voor toegangscontrole (ACL).
  • #__session - actieve bezoekers- en gebruikerssessies.
  • #__languages - de talen die op uw site zijn geïnstalleerd.

Normaal gesproken bewerk je deze tabellen nooit handmatig. Joomla en de bijbehorende extensies lezen en schrijven hier automatisch in via de beheerdersinterface. Inzicht in de inhoud van elke tabel is vooral nuttig voor back-ups, probleemoplossing en ontwikkeling. Sommige extensies maken hun eigen tabellen aan, waardoor het totale aantal databasetabellen per Joomla-installatie kan verschillen.

Is het veilig om de Joomla database rechtstreeks te bewerken?

Wijzigingen in de database mogen alleen worden aangebracht wanneer dat noodzakelijk is en altijd pas nadat er een volledige back-up is gemaakt. Onjuiste wijzigingen kunnen uw website onbruikbaar maken of tot gegevensverlies leiden. Gebruik waar mogelijk de Joomla-beheerdersinterface of betrouwbare extensies in plaats van tabellen handmatig te bewerken met phpMyAdmin of andere databasetools.

Waarom is mijn Joomla database zo groot?

Een Joomla-database groeit vaak in de loop van de tijd naarmate uw website inhoud, gebruikers, logbestanden, sessies, aangepaste velden, extensiegegevens en andere informatie verzamelt. Extensies van derden kunnen ook hun eigen tabellen aanmaken, waardoor de omvang van de database aanzienlijk kan toenemen. Een grote database is niet per se een probleem, maar het verwijderen van ongebruikte extensies, het opschonen van verlopen sessies en het verwijderen van verouderde gegevens kan helpen om het opslaggebruik te verminderen en de prestaties op peil te houden.

Hoe kun je een Joomla database optimaliseren?

Om je Joomla-website snel en betrouwbaar te houden, moet je regelmatig:

  • ongebruikte extensies verwijderen
  • verlopen sessies opschonen
  • databasetabellen optimaliseren met phpMyAdmin of via het controlepaneel van je hostingprovider (indien van toepassing)
  • beschadigde tabellen herstellen indien nodig
  • oude loggegevens verwijderen waar dat nodig is
  • Joomla en de bijbehorende extensies up-to-date houden.

Regelmatig onderhoud van de Joomla-database verbetert de prestaties, vermindert het opslaggebruik en minimaliseert het risico op fouten.

Hoe repareer ik een Joomla-database?

Als op de Joomla-databasepagina schemaverschillen worden gemeld, kun je de database herstellen door in het Joomla-beheerdersgedeelte naar Extensies → Beheren → Database te gaan. Joomla vergelijkt de databasestructuur met de geïnstalleerde versie en herstelt waar mogelijk ontbrekende of verouderde tabellen. Als het probleem hierdoor niet wordt opgelost, is het terugzetten van een recente back-up vaak de veiligste oplossing.

Hoe maak ik een back-up van een Joomla database en hoe zet ik deze terug?

Je kunt een back-up van een Joomla-database maken met Akeeba Backup, phpMyAdmin, het configuratiescherm van je hostingprovider of mysqldump. Gebruik waar mogelijk Akeeba Backup, omdat dit programma een volledige back-up maakt van zowel je websitebestanden als je database. Om de database te herstellen, moet je de SQL-back-up importeren en ervoor zorgen dat de inloggegevens voor de database in configuration.php overeenkomen met die van de herstelde database. Test je back-ups altijd voordat je erop vertrouwt voor noodherstel.

Kan ik de Joomla database na de installatie wijzigen?

Ja. Je kunt de database die Joomla gebruikt na de installatie wijzigen, maar dit vereist een zorgvuldige planning. Het proces omvat het exporteren van de bestaande database, het importeren ervan naar de nieuwe databaseserver, het bijwerken van de databaseverbindingsinstellingen in het configuration.php bestand van Joomla en het testen of alles correct werkt.

Als je overstapt naar een nieuwe hostingprovider, maakt deze databasemigratie doorgaans deel uit van de websiteoverdracht. Maak altijd een volledige back-up voordat je wijzigingen aanbrengt.

Wat is het verschil tussen MySQL en MariaDB?

MySQL en MariaDB zijn beide relationele databasemanagementsystemen (RDBMS) die naadloos samenwerken met Joomla. MariaDB is een door de gemeenschap ontwikkelde afsplitsing van MySQL die in 2009 is ontstaan nadat Oracle MySQL had overgenomen.

Voor de meeste Joomla-websites zijn ze onderling uitwisselbaar. MariaDB wordt ontwikkeld door de open-sourcegemeenschap en is de standaarddatabase op veel Linux-servers, terwijl MySQL wordt ontwikkeld door Oracle en beschikbaar is in zowel een Community- als een commerciële editie. Hoewel de twee de afgelopen jaren intern uit elkaar zijn gegroeid, werkt Joomla even goed met beide.

Joomla 6 vereist MySQL 8.0.13 of hoger (aanbevolen: MySQL 8.4), of MariaDB 10.4 of hoger (aanbevolen: MariaDB 12.0), zie: Joomla! Programmers Documentation: Requirements for Joomla! 6.x.

Voor vrijwel elke Joomla website presteren beide databases even goed. De kwaliteit van je hosting, serverconfiguratie, caching en de algehele optimalisatie van de website hebben een veel grotere invloed op de prestaties dan de keuze tussen MySQL of MariaDB.

Voor de meeste gebruikers hangt de keuze simpelweg af van wat hun hostingprovider aanbiedt.

Moet ik voor een nieuwe Joomla website MySQL of MariaDB kiezen?

Voor een nieuwe Joomla-website zijn zowel MySQL als MariaDB uitstekende keuzes. Joomla biedt volledige ondersteuning voor beide databasesystemen, en de meeste gebruikers zullen in het dagelijks gebruik weinig of geen verschil merken.

In de praktijk beslist je hostingprovider meestal voor je. Veel shared hostingpakketten en de meeste Linux-distributies worden tegenwoordig standaard met MariaDB geleverd, dus dat is waar veel nieuwe Joomla-sites op draaien zonder dat de eigenaar daar ooit voor heeft gekozen. De eenvoudigste aanpak is om de database te gebruiken die je host standaard aanbiedt.

Als je wel mag kiezen:

  • Kies MariaDB als je een volledig open-source database wilt die in hoge mate compatibel is met MySQL en vaak uitstekende prestaties levert met een lager resourceverbruik. Het is de standaardinstelling bij de meeste moderne hosts.
  • Kies MySQL als je de voorkeur geeft aan het oorspronkelijke databasesysteem of als je hostingprovider dit specifiek aanbeveelt.

Voor de meeste Joomla-websites zullen je keuze voor hosting, serverconfiguratie, caching en website-optimalisatie een veel grotere invloed hebben op de prestaties dan de vraag of je MySQL of MariaDB gebruikt.

Kortom:

  • MariaDB: Een uitstekende keuze en de standaardinstelling op veel hostingplatforms.
  • MySQL: Even betrouwbaar en een uitstekende keuze voor maximale compatibiliteit.
  • Beide opties: Volledig ondersteund door Joomla en geschikt voor websites van elke omvang.