Ga naar inhoud

MySQL Handleiding op Ubuntu Server (via de Console)

Introductie tot MySQL (CLI)

In deze handleiding leer je hoe je mysql gebruikt op een Linux-systeem via de command-line (CLI).

Het commando mysql wordt gebruikt om verbinding te maken met databases, queries uit te voeren, gebruikers te beheren en databases te configureren.
Hoewel MySQL vaak via webtools zoals phpMyAdmin wordt gebruikt, is de CLI de krachtigste en snelste manier om met databases te werken.

MySQL wordt vaak gebruikt in combinatie met applicaties zoals PHP, Node.js en Python.


Achtergrondinformatie

MySQL is een relationeel database management systeem (RDBMS).

  • Werkt met databases, tabellen en records
  • Gebruikt SQL (Structured Query Language)
  • CLI is ideaal voor beheer, debugging en automatisering
  • Veel gebruikt in combinatie met LAMP stack
  • In deze handleiding gebruiken we MySQL 8.x

MySQL Versies

πŸ” Controleer jouw versie

mysql --version

Of ingelogd in MySQL:

SELECT VERSION();
Voorbeeldoutput
mysql  Ver 8.0.36 for Linux on x86_64 (MySQL Community Server - GPL)
+-----------+
| VERSION() |
+-----------+
| 8.0.36    |
+-----------+

πŸ“Š Uitgebreid overzicht van MySQL versies

Versie Release Status Belangrijkste kenmerken Opmerking
MySQL 8.4 2024 βœ… LTS (Long Term Support) Performance verbeteringen, betere security Aanbevolen voor productie
MySQL 8.0 2018 βœ… Actief ondersteund JSON support, window functions, CTE’s Meest gebruikt
MySQL 5.7 2015 πŸ”’ Security fixes / EOL nabij Verbeterde performance, JSON (basis) Nog legacy gebruik
MySQL 5.6 2013 ❌ EOL InnoDB verbeteringen Verouderd
MySQL 5.5 2010 ❌ EOL Default InnoDB engine Niet meer gebruiken
MySQL 5.1 2008 ❌ EOL Partitioning support
MySQL 5.0 2005 ❌ EOL Stored procedures, views Grote upgrade
MySQL 4.x 2003–2005 ❌ EOL Basis database features
MySQL 3.x 1998–2003 ❌ EOL Eerste stabiele versies

πŸ“Œ Belangrijke inzichten

  • MySQL 8.x introduceert moderne database features zoals:
  • Window functions
  • Common Table Expressions (CTE’s)
  • Sterke JSON ondersteuning

  • MySQL 5.7 wordt nog gebruikt, maar is verouderd aan het raken.

  • Oudere versies (<5.7) zijn onveilig en niet geschikt voor productie.

πŸš€ Aanbeveling

Gebruik altijd een actief ondersteunde versie:

  • βœ”οΈ Aanbevolen: MySQL 8.0 of 8.4 LTS
  • ⚠️ Vermijd: Alles onder MySQL 5.7

βš™οΈ Installeren van mysql-server

MySQL kan worden geΓ―nstalleerd via de standaard pakketmanager.

Installatie op Debian/Ubuntu:

sudo apt update
sudo apt install mysql-server

Voorbeeldoutput
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
mysql-server mysql-client mysql-common
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 25.6 MB of archives.
After this operation, 196 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y

Setting up mysql-common (8.0.36-0ubuntu0.22.04.1) ...
Setting up mysql-client (8.0.36-0ubuntu0.22.04.1) ...
Setting up mysql-server (8.0.36-0ubuntu0.22.04.1) ...

Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service β†’ /lib/systemd/system/mysql.service.
mysql-server is already the newest version (8.0.xx-0ubuntu0.xx.xx).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

MySQL Secure Installation

mysql_secure_installation helpt om een nieuwe MySQL-installatie veiliger te maken:

  • Stel een root-wachtwoord in (voor MySQL 8+ vaak via auth_socket of caching_sha2_password)
  • Verwijder anonieme gebruikers
  • Schakel root login vanaf externe hosts uit
  • Verwijder testdatabases
  • Herlaad privilege-tabellen

Start het script:

sudo mysql_secure_installation

Voorbeeld interactie:

Securing the MySQL server deployment.

Enter password for user root:
VALIDATE PASSWORD COMPONENT can be used to test passwords.
Press y|Y for Yes, any other key for No: y
Please set the root password: ********
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

Het script beveiligt de installatie en minimaliseert potentiΓ«le veiligheidsrisico's.

πŸ”‘ Inloggen in MySQL

Gebruik de root-gebruiker om in te loggen (of een andere gebruiker met de juiste rechten):

sudo mysql -u root -p

πŸ“‚ Databases beheren

Databases tonen:

SHOW DATABASES;

Database aanmaken:

CREATE DATABASE mijn_database;

Database selecteren (om in te werken):

USE mijn_database;

Database verwijderen:

DROP DATABASE mijn_database;

Tips

  • Gebruik duidelijke, beschrijvende namen voor databases.
  • Controleer altijd of je de juiste database geselecteerd hebt voordat je DROP gebruikt.
  • Je kunt SHOW TABLES; gebruiken om alle tabellen binnen de geselecteerde database te zien.

πŸ‘€ Gebruikersbeheer in MySQL

In MySQL kun je gebruikers aanmaken, rechten toewijzen en gebruikers verwijderen. Het host-gedeelte (@'host') bepaalt vanaf welke machines de gebruiker verbinding mag maken.

  • 'localhost': alleen lokaal vanaf de server.
  • '%' of 'any host': verbinding vanaf elke host toegestaan.
  • Specifieke IP of hostname: alleen vanaf die host verbinding toegestaan.

Nieuwe gebruiker aanmaken

CREATE USER 'gebruiker'@'localhost' IDENTIFIED BY 'wachtwoord';

Vervang localhost eventueel door % om verbinding vanaf elke host toe te staan.

Rechten geven

GRANT ALL PRIVILEGES ON mijn_database.* TO 'gebruiker'@'localhost';

Dit geeft alle rechten op mijn_database aan de gebruiker. Pas localhost aan als je verbinding vanaf een andere host wil toestaan.

Rechten verversen

FLUSH PRIVILEGES;

Zorgt ervoor dat wijzigingen direct actief worden.

Gebruiker verwijderen

DROP USER 'gebruiker'@'localhost';

Verwijdert de gebruiker volledig. Zorg dat je het juiste hostgedeelte gebruikt.

πŸ—„οΈ Tabellen en Data Beheer in MySQL

Hier leer je hoe je tabellen kunt tonen, maken, gegevens kunt invoegen, opvragen, updaten en verwijderen.

Tabellen tonen

SHOW TABLES;

Lijst alle tabellen in de huidige database.

Tabel maken

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Voeg NOT NULL en UNIQUE toe voor dataconsistentie en created_at voor timestamping.

Data invoegen

INSERT INTO users (name, email)
VALUES ('Jan', 'jan@email.com');

Je kunt meerdere rijen tegelijk invoegen:

INSERT INTO users (name, email)
VALUES ('Piet', 'piet@email.com'), ('Anna', 'anna@email.com');

Data ophalen

SELECT * FROM users;

Voor specifieke kolommen:

SELECT name, email FROM users WHERE id = 1;
Sorteren en beperken:
SELECT * FROM users ORDER BY name ASC LIMIT 5;

Data updaten

UPDATE users SET name='Piet' WHERE id=1;

Meerdere rijen updaten:

UPDATE users SET email='newemail@email.com' WHERE name='Anna';

Data verwijderen

DELETE FROM users WHERE id=1;

Wees voorzichtig met DELETE, gebruik altijd een WHERE-clausule om te voorkomen dat je alle data verwijdert. Voor tijdelijke backups kun je eerst selecteren:

SELECT * FROM users WHERE id=1;
Om alle data te verwijderen zonder de tabel te droppen:
TRUNCATE TABLE users;

MySQL-configuratie en instellingen

Controleer welke configuratiebestanden MySQL gebruikt:

mysql --help | grep 'Default options'

Voorbeeldoutput:

Default options are read from the following files in the given order:
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
~/.my.cnf

  • /etc/mysql/my.cnf / mysqld.cnf β†’ hoofdconfiguratie voor de MySQL server.
  • ~/.my.cnf β†’ gebruikersspecifieke configuratie (CLI-instellingen zoals username, password, host).

Hier zijn enkele belangrijke MySQL-instellingen die je kunt aanpassen in my.cnf of mysqld.cnf:

Sectie Parameter Beschrijving Aanbeveling / Tips
[mysqld] bind-address IP-adres waarop MySQL luistert 127.0.0.1 voor alleen lokaal, % voor alle hosts, of server IP voor specifieke externe toegang
[mysqld] port Poort waarop MySQL luistert Standaard 3306, aanpassen bij conflictsituaties
[mysqld] max_connections Maximaal aantal gelijktijdige verbindingen Voor drukke servers verhogen, bv. 200
[mysqld] sql_mode SQL-compatibiliteit Bijvoorbeeld STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION voor veilige inserts
[mysqld] innodb_buffer_pool_size Cache grootte voor InnoDB 70–80% van RAM voor databaseserver optimalisatie
[mysqld] slow_query_log Log langzaam uitgevoerde queries ON om performance bottlenecks te identificeren
[mysqld] slow_query_log_file Bestand voor langzaam query log /var/log/mysql/slow.log of eigen pad
[mysqld] log_error Error log locatie /var/log/mysql/error.log
[client] default-character-set Standaard karakterset client utf8mb4 aanbevolen
[mysql] prompt Prompt in MySQL CLI \u@\h [\d]> voor gebruiker+host info
[mysql] pager Output formatter Bijvoorbeeld less -S voor horizontaal scrollen
[mysql] histignore Queries die niet in geschiedenis komen Bv. SELECT * FROM om ruis te vermijden
[mysql] history Query geschiedenis activeren Standaard aan, zodat je eerdere queries terug kunt halen
[mysql] auto_rehash Tab-completion aan/uit Aan: sneller zoeken in tabellen/kolommen
[mysql] tee Loggen van sessie naar bestand tee /var/log/mysql_session.log om alle sessiecommando’s op te slaan

πŸ”Ή Tips bij aanpassen van MySQL-configuratie: - Maak altijd een backup van configuratiebestanden:

sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.backup
- Na wijzigingen MySQL herstarten:
sudo systemctl restart mysql
- Controleer de actieve instellingen:
SHOW VARIABLES;
- Gebruik mysql --help of mysql -e 'SHOW VARIABLES;' om live instellingen te controleren. - Pas buffer-, cache- en log-instellingen aan op basis van de workload voor optimale performance. - Let op bind-address en hosttypes (localhost, %, specifieke IP) voor beveiliging en externe toegang.

Database exporteren

mysqldump -u root -p mijn_database > backup.sql

Backup importeren

mysql -u root -p mijn_database < backup.sql

Stop MySQL

sudo systemctl stop mysql

Verwijder MySQL

sudo apt purge mysql-server mysql-client mysql-common -y

Verwijder overgebleven bestanden

sudo rm -rf /etc/mysql /var/lib/mysql

Auto remove

sudo apt autoremove -y