phpMyAdmin is een web interface, bedoelt om het beheren van MySQL-/MariaDB-databases over het internet makkelijker te maken. Veel voorkomende SQL-handelingen, zoals het beheer van databases, tabellen, kolommen, gebruikers, rechten, etc. kunnen vanuit de phpMyAdmin web interface uitgevoerd worden.
In dit artikel laten we zien hoe je phpMyAdmin installeert op een VPS met Ubuntu 18.04 en een bug verhelpt die je tijdens het gebruik tegen kunt komen.
- Voer de stappen in dit artikel uit als root user, of gebruik sudo.
- Voor de stappen in dit artikel is een webserver en een databaseserver op je VPS nodig. Je kunt hiervoor bijvoorbeeld onze handleidingen voor MariaDB en Apache gebruiken.
phpMyAdmin installeren
Stap 1
Verbind met je VPS via SSH of gebruik de VPS-console en update eerst je server:
apt -y update
apt -y upgrade
Herstart nu eerst je VPS en herhaal na de herstart bovenstaande commando's (tenzij je VPS al up-to-date was). Sommige package updates zijn pas beschikbaar na het updaten en herstarten van je VPS.
Stap 2
Als onderdeel van de installatie wordt een database aangemaakt voor phpMyAdmin. Bij het schrijven van deze handleiding liepen wij tegen een probleem aan waarbij 'debian-sys-maint'@'localhost' geen rechten heeft tot die database, ondanks dat debian-sys-maint by default volledige rechten heeft tot alle databases. Vermoedelijk ontstaat dit probleem doordat de database in kwestie nog niet bestaat op het moment dat de controle wordt uitgevoerd. Om dit te voorkomen, is het raadzaam de database eerst handmatig aan te maken en de benodigde rechten toe te kennen.
Start een SQL-shell:
mysql -u root -p
Stap 3
Maak een database aan voor phpMyAdmin, bijvoorbeeld:
CREATE DATABASE phpmyadmin;
Stap 4
Geef 'debian-sys-maint'@'localhost' volledige rechten tot de nieuwe database:
GRANT ALL ON phpmyadmin.* TO '
debian-sys-maint'@'LOCALHOST';
Stap 5
Sluit vervolgens de SQL-shell met:
exit;
Stap 6
In stap 7 zal je gevraagd worden welke webserver je gebruikt. Mocht je niet zeker weten of / welke webserver je gebruikt, dan kun je dit voor de zekerheid eerst controleren met de commando's:
systemctl status apache2
systemctl status lighttpd
Krijg je bij de output van een van deze twee de melding 'Unit apache2/lighttpd.service not found', dan heb je die niet op je VPS staan. Krijg je bij beide commando's een dergelijke output, installeer dan eerst Apache voor je verder gaat.
Start vervolgens de installatie van phpMyAdmin met het commando:
apt -y install phpmyadmin
Stap 7
Je krijgt tijdens het installatieproces een aantal vensters te zien voor de configuratie van phpMyAdmin. De eerste is welke webserver je gebruikt:
Stap 8
Er zal je nu gevraagd worden om een database aan te maken die gebruikt zal worden door phpMyAdmin. Zonder deze database zal phpMyAdmin niet werken, kies hier dan ook voor 'Yes'.
Stap 9
phpMyAdmin heeft bij de database die in stap 4 wordt aangemaakt ook een wachtwoord nodig. Stel hier een uniek wachtwoord in en klik op 'Enter' om verder te gaan en het wachtwoord nogmaals te bevestigen.
Stap 10
De installatie zelf is nu klaar, maar Apache kan niet direct phpMyAdmin gebruiken. Hiervoor moet je eerst nog de phpMyAdmin-configuratie voor Apache toevoegen aan de Apache-configuratie en Apache herstarten als volgt:
echo Include /etc/phpmyadmin/apache.conf >> /etc/apache2/apache2.conf
systemctl restart apache2
Stap 11
phpMyAdmin is nu klaar voor gebruik en je kunt het direct uitproberen door naar jehostname/phpmyadmin te gaan in je browser, bijvoorbeeld : server.voorbeeld.nl/phpmyadmin. Controleer eventueel je hostname met een van de volgende commando's:
cat /etc/hosts
hostnamectl
Voor het inloggen kun je een van je SQL-gebruikers gebruiken, die je achterhaald vanuit de SQL-shell (zie stap 2) met het commando:
SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user;
Voor een overzicht van veel gebruikte MariaDB-/MySQL-commando's, zie dit artikel. Je kunt bijvoorbeeld de uitleg daarin over het toevoegen van data aan een tabel gebruiken in het tabblad 'SQL' in phpMyAdmin, zie:
Belangrijk: op moment van schrijven zit er een bug in phpMyAdmin bij het openen van tabellen. De bug lichten wij in de volgende paragraaf nader toe. Controleer of je ook deze bug ervaart door in phpMyAdmin een willekeurige tabel van een database te openen. Zo ja, doorloop dan de stappen in onderstaande paragraaf.
Warning in ./libraries/sql.lib.php#613 count(): Parameter must be an array or an object that implements Countable
Tijdens het schrijven van deze handleiding bleek er een bug in phpMyAdmin te zitten, waardoor je bovenstaande foutmelding, of de volgende melding te zien krijgt:
De oorzaak hiervan is dat er een stukje code verkeerd wordt afgesloten in het bestand /usr/share/phpmyadmin/libraries/sql.lib.php (zie 'Handmatige oplossing').
De snelle oplossing
De eenvoudigste oplossing is de volgende commando's gebruiken om de foute code aan te passen (let op de scrollbalk):
sed -i 's/(count($analyzed_sql_results\['\''select_expr'\''\] == 1)/(count($analyzed_sql_results\['\''select_expr'\''\]) == 1)/g'/usr/share/phpmyadmin/libraries/sql.lib.php
sed -i 's/($analyzed_sql_results\['\''select_expr'\''\]\[0\] == '\''[*]'\'')))/($analyzed_sql_results\['\''select_expr'\''\]\[0\] == '\''[*]'\''))/g'/usr/share/phpmyadmin/libraries/sql.lib.php systemctl restart apache2
Handmatige oplossing
Je kun het probleem ook oplossen door zelf de foute code te corrigeren. Open eerst het bestand /usr/share/phpmyadmin/libraries/sql.lib.php:
nano /usr/share/phpmyadmin/libraries/sql.lib.php
Het bestand sql.lib.php komt op regels 612, 613 en 614 met de volgende code:
((empty($analyzed_sql_results['select_expr']))
|| (count($analyzed_sql_results['select_expr'] == 1)
&& ($analyzed_sql_results['select_expr'][0] == '*')))
Op de tweede regel wordt ['select_expr'] niet afgesloten met een haakje, en is het ontbrekende haakje naar het eind van de derde regel verplaatst. De correcte code is dus:
((empty($analyzed_sql_results['select_expr']))
|| (count($analyzed_sql_results['select_expr']) == 1)
&& ($analyzed_sql_results['select_expr'][0] == '*'))
Herstart na het aanpassen van de code Apache om de wijzigingen te verwerken:
systemctl restart apache2
Mocht je aan de hand van dit artikel nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' onderaan deze pagina.