Ubuntu-gebruikers hebben de keuze tussen twee betrouwbare relationele databasebeheersystemen (RDBMS),MySQL enMariaDB . MySQL heeft al lang een voorsprong in populariteit, maar er is een toegenomen interesse in MariaDB vanwege de prestatievoordelen en toegevoegde functies. Deze handleiding vergelijkt de twee databasesystemen en geeft instructies voor het installeren en gebruiken van MySQL op Ubuntu 20.04.
Wat is MySQL?
De MySQL RDBMS is een van de meest populaire open source-applicaties. Het maakt deel uit van de LAMP-stack , de hoeksteen van veel Ubuntu-systemen. Deze stack bestaat uit Linux, de Apache-webserver, de MySQL RDBMS en de programmeertaal PHP. Deze applicaties werken samen ter ondersteuning van webapplicaties, softwareontwikkeling en gespecialiseerde activiteiten zoals datawetenschap. Het belangrijkste gebruik van MySQL is in kleine tot middelgrote configuraties met één server.
MySQL-query's zijn geschreven in de Structured Query Language (SQL). Als relationele database worden gegevens in tabellen opgeslagen en geordend. Tabellen structureren de feitelijke gegevens in tabellen als een reeks rijen, waarbij elke rij uit een of meer kolommen bestaat. Elke rij vertegenwoordigt een ander item in de tabel, terwijl elke kolom één gegevensveld binnen het item bevat. De gegevensvelden in deze tabellen kunnen aan elkaar worden gerelateerd en deze relaties helpen bij het structureren en organiseren van de database. Met gespecialiseerde SQL-instructies kunnen klanten gegevens toevoegen, verwijderen, wijzigen en ophalen.
MySQL staat bekend om zijn stabiliteit en betrouwbaarheid en wordt als eenvoudig en gebruiksvriendelijk beschouwd. Het is beschikbaar als gratis open source software onder de GNU General Public License. MySQL is direct beschikbaar voor alle Linux-distributies en andere besturingssystemen. Het is nu eigendom van de Oracle Corporation. Oracle biedt ook de commerciële MySQL Enterprise Edition aan als een duurder product.
MySQL versus MariaDB
De twee belangrijkste open source database-alternatieven, MySQL en MariaDB, lijken erg op elkaar. Het zijn beide RDBMS-producten en beide gebruiken SQL. Beide databasesystemen hebben gratis versies en ze zien eruit en werken op vrijwel dezelfde manier. Omdat MariaDB oorspronkelijk is afgetakt van MySQL, is dit niet verwonderlijk. MariaDB is sindsdien verder ontwikkeld en biedt veel nieuwe verbeteringen op het gebied van beveiliging en prestaties. Met MySQL zijn veel geavanceerde functies echter alleen te vinden in de Enterprise Edition. Hier is een samenvatting van de overeenkomsten en verschillen tussen de twee producten:
- MariaDB ondersteunt meer verbindingen dan MySQL.
- Beide databases kunnen met meerdere opslagsystemen werken, hoewel MariaDB meer opties biedt.
- MariaDB kan gegevens sneller repliceren dan MySQL en heeft betere algehele prestaties. MySQL verwerkt grote transacties effectiever, maar MariaDB presteert beter in geschaalde situaties.
- MySQL ondersteunt sommige functies die MariaDB niet heeft, zoals dynamische kolommen. Elke database heeft een paar geavanceerde functies en verbeteringen die de andere niet heeft.
- MySQL is ouder, beter ingeburgerd, populairder en heeft meer gemeenschapsondersteuning. MySQL biedt uitgebreidere betaalde ondersteuningsplannen.
- MariaDB en MySQL zijn volledig compatibel.
- Beide producten zijn open source, maar het MySQL-licentiemodel is restrictiever.
Om samen te vatten, beide systemen zijn meer dan voldoende voor de meeste gebruikers. MariaDB biedt betere prestaties, terwijl MySQL beter is ingeburgerd en beter wordt ondersteund.
Voordat u begint
-
Als je dit nog niet hebt gedaan, maak dan een Linode-account en Compute Instance aan. Zie onze handleidingen Aan de slag met Linode en Een rekeninstantie maken.
-
Volg onze handleiding voor het instellen en beveiligen van een rekeninstantie om uw systeem bij te werken. Mogelijk wilt u ook de tijdzone instellen, uw hostnaam configureren, een beperkt gebruikersaccount maken en SSH-toegang versterken.
Opmerking De stappen in deze handleiding zijn geschreven voor niet-rootgebruikers. Opdrachten die verhoogde bevoegdheden vereisen, worden voorafgegaan doorsudo
. Als u niet bekend bent met desudo
commando, zie de handleiding voor Linux-gebruikers en -groepen.
Hoe MySQL Server te installeren
MySQL is beschikbaar als onderdeel van de standaard Ubuntu-pakketten, dus het is niet nodig om de bronlijst te bewerken. Het kan eenvoudig worden geïnstalleerd met apt
, maar het is belangrijk om de applicatie te beveiligen en daarna de firewall te bewerken. Deze instructies zijn bedoeld voor Ubuntu-gebruikers, maar zijn over het algemeen van toepassing op degenen die MySQL op een andere Linux-distributie willen installeren.
MySQL downloaden
Volg de onderstaande stappen om de MySQL-server op Ubuntu te installeren:
-
Installeer de MySQL-servertoepassing.
sudo apt install mysql-server
-
Bevestig dat de MySQL-server actief is met behulp van de
systemctl
opdracht. Het zou de statusactive
moeten weergeven .sudo systemctl status mysql
mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:> Active: active (running) since Thu 2021-09-09 12:24:29 UTC; 1h 44min ago
Configureer de MySQL-server op Linux
De mysql_secure_installation
hulpprogramma is de gemakkelijkste manier om de toepassing te configureren. Volg deze stappen om het installatiescript te gebruiken:
-
Start de
mysql_secure_installation
hulpprogramma om het root-wachtwoord in te stellen en andere standaardopties te configureren.sudo mysql_secure_installation
-
De applicatie vraagt of de
VALIDATE PASSWORD COMPONENT
. moet worden ingeschakeld onderdeel. Als jey
. beantwoordt , het vraagt dan of de wachtwoordsterkte moet worden ingesteld opLOW
,MEDIUM
, ofHIGH
.VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component?
-
Bij de volgende prompt vraagt het hulpprogramma om een wachtwoord voor het root-account. Stel het wachtwoord in en voer het opnieuw in.
Please set the password for root here. New password: Re-enter new password:
-
De volgende vragen vragen of anonieme gebruikers moeten worden verwijderd om de
root
. toe te staan account om op afstand verbinding te maken en om detest
. te verwijderen databank. Voery
in ofn
bij elke prompt volgens uw voorkeuren. Detest
database is handig tijdens de eerste validatie, maar om veiligheidsredenen is het het beste om deroot
niet toe te staan account om op afstand in te loggen.By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No
-
Laad het
privilege
opnieuw wanneer daarom wordt gevraagd tabellen om de database bij te werken.Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No)
y
Success. All done!
-
(Optioneel ) Om MySQL op afstand te openen, moet u ervoor zorgen dat MySQL-verkeer is toegestaan via de
ufw
firewall. Voeg de volgende regel toe om poort3306
te openen op de firewall. Deze regel mag niet worden toegevoegd als toegang op afstand niet vereist is.ufw allow mysql
Status: active To Action From -- ------ ---- Apache Full ALLOW Anywhere OpenSSH ALLOW Anywhere 3306/tcp ALLOW Anywhere Apache Full (v6) ALLOW Anywhere (v6) OpenSSH (v6) ALLOW Anywhere (v6) 3306/tcp (v6) ALLOW Anywhere (v6)
Log in op MySQL als de rootgebruiker
Hoewel de root
gebruiker volledige toegang heeft tot de MySQL-database, moet het gebruik ervan worden gereserveerd voor administratieve doeleinden. Dit verkleint de kans dat kritieke delen van de database per ongeluk worden overschreven. Zelfs in een configuratie voor één gebruiker moet voor de meeste MySQL-activiteiten een apart gebruikersaccount worden aangemaakt.
Toegang krijgen tot de MySQL-server als de root
gebruiker en maak een nieuwe gebruikersaccount, volg deze stappen:
-
Gebruik de
sudo mysql
commando om toegang te krijgen tot de database. MySQL verifieert de root-gebruiker op basis van zijn root-referenties wanneer hij lokaal inlogt, dus er is geen wachtwoord vereist. U kunt ook toegang krijgen tot het root-account metsudo mysql -u root -p
, samen met deroot
wachtwoord.sudo mysql
-
MySQL geeft het releasenummer en wat informatie over de installatie weer en geeft vervolgens de MySQL-prompt weer.
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 15 Server version: 8.0.26-0ubuntu0.20.04.2 (Ubuntu) ... mysql>
-
Om te bevestigen dat MySQL correct werkt, gebruikt u de
SHOW DATABASES
commando om alle databases weer te geven.SHOW DATABASES;
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.01 sec)
-
Maak een nieuwe gebruiker aan met de
CREATE USER
opdracht. Voer de gebruikersnaam in het formaat'username'@'IP_Address'
, waarIP_Address
is het IP-adres van de gebruiker. Als de gebruiker MySQL opent vanuit de lokale Linode, vervangt ulocalhost
in plaats van het IP-adres. Vervang in de onderstaande opdrachtmysqluser
enpassword
met de daadwerkelijke gebruikersnaam en wachtwoord.Opmerking MySQL biedt verschillende authenticatiemechanismen. Het
caching_sha2_password
methode wordt aanbevolen voor gebruikers die willen inloggen met een wachtwoord en wordt hier gebruikt. Het is echter mogelijk dat bepaalde oudere toepassingen op deze manier niet correct kunnen worden geverifieerd. In dat gevalmysql_native_password
in plaats daarvan moet worden gebruikt. MySQL-bronreplica-replicatie vereist mogelijk hetsha256_password
methode.CREATE USER 'mysqluser'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
-
Verleen toegang aan de nieuwe gebruiker met behulp van de
GRANT PRIVILEGE
commando, gebruik makend van het formaatGRANT list of privileges ON table TO 'username'@'IP_Address';
. Enkele van de meest voorkomende privileges zijnCREATE
,ALTER
,DROP
,INSERT
,UPDATE
,DELETE
, enSELECT
. Gebruik de wildcard-variabele*.*
. om deze privileges toe te passen op alle databases . De volgende opdracht verleent algemene niet-beheerdersrechten op alle databases aanmysqluser
.GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD ON *.* TO 'mysqluser'@'localhost' WITH GRANT OPTION;
-
Om de MySQL-prompt af te sluiten, typt u
exit
.exit
MySQL gebruiken
MySQL gebruikt standaard SQL-syntaxis voor al zijn opdrachten. De stappen in deze sectie laten zien hoe u basistaken in MySQL kunt uitvoeren, zoals het maken van databases, tabellen en het toevoegen van gegevens. Zie de MySQL Reference Manual voor volledige informatie over het gebruik van MySQL. Probeer de MySQL-zelfstudie voor een korte maar grondige introductie.
Maak een database
-
Om een database aan te maken, logt u in op MySQL met een account met
CREATE
voorrechten. Vervangmysqlusername
met de gebruikersnaam die je hebt gemaakt.mysql -u mysqlusername -p
-
Maak een nieuwe database met behulp van de
CREATE DATABASE
opdracht. Vervangnewdatabasename
met de gewenste naam voor uw database.CREATE DATABASE newdatabasename;
Query OK, 1 row affected (0.00 sec)
-
Om te bevestigen dat de nieuwe database correct is aangemaakt, gebruikt u
SHOW DATABASES
.SHOW DATABASES;
+--------------------+ | Database | +--------------------+ ... | newdatabasename | ... +--------------------+ 5 rows in set (0.00 sec)
-
Geef de database aan waarmee u wilt werken met behulp van de
USE
opdracht. Vervangnewdatabasename
met de naam voor de database die u zojuist hebt gemaakt.USE newdatabasename;
Database changed
Opmerking U kunt ook de
USE
. gebruiken commando als je meer dan één database hebt en je wilt ertussen schakelen. -
Om de naam van de huidige database te achterhalen, gebruikt u de
SELECT DATABASE
opdracht. De uitvoer toont de databasenaam.SELECT DATABASE();
+------------------+ | DATABASE() | +------------------+ | newdatabasename | +------------------+
Maak een tabel
Op dit punt is de database, newdatabasename
heeft geen tabellen, dus het is nog niet mogelijk om er gegevens in op te slaan. Om een tabel te definiëren, gebruik de CREATE TABLE
opdracht. Naast de naam van de tabel vereist deze opdracht de naam en het gegevenstype van elk veld. Het gegevenstype kenmerkt de gegevens die in het veld zijn opgeslagen. Het gegevenstype kan bijvoorbeeld een tekenreeks met variabele lengte zijn, bekend als een VARCHAR
. Raadpleeg de MySQL-documentatie voor een volledige lijst met gegevenstypen. Enkele van de meest voorkomende gegevenstypen zijn als volgt.
- INT: Dit kan een waarde tussen
-2147483648
. bevatten en2147483647
. Indien gespecificeerd alsUNSIGNED
, het kan waarden opslaan tussen0
en4294967295
. - KLEIN: Bevat een nog kleiner geheel getal tussen
-32768
en32767
. - FLOAT: Dit type kan een getal met drijvende komma opslaan.
- DATUM: Slaat een datum op in
YYYY-MM-DD
formaat. - DATETIME: Slaat een datum- en tijdcombinatie op in
YYYY-MM-DD HH:MM:SS
formaat. Dezelfde tijd kan worden opgeslagen zonder streepjes en dubbele punten in deTIMESTAMP
formaat. - VARCHAR(N): Dit is een string met variabele lengte tussen
1
enN
tekens lang, met een maximale lengte van255
tekens. - TEKST: Dit gegevenstype kan maximaal
65535
. bevatten karakters. Het kan tekst, afbeeldingen of binaire gegevens bevatten. - CHAR(N): Dit type vertegenwoordigt een tekstveld van vaste lengte met de lengte
N
. Als u bijvoorbeeld statuscodes van twee tekens wilt bevatten, gebruikt u het gegevenstypeCHAR(2)
.
Voordat u tabellen maakt, is het belangrijk om een schema te kiezen voor de databank. Het schema beschrijft wat elke tabel vertegenwoordigt, welke gegevens in elke tabel zijn opgeslagen en hoe de tabellen zich verhouden. Volg deze stappen om een tabel te maken:
-
Terwijl u bent aangemeld bij MySQL, schakelt u over naar de database waaraan u de tabel wilt toevoegen.
use newdatabasename;
-
Gebruik de
CREATE TABLE
commando om een nieuwe tabel te genereren. Gebruik het formaatCREATE TABLE table_name (field_1 datatype, field_n datatype);
.CREATE TABLE newtablename (column1 VARCHAR(20), column2 CHAR(1), column3 DATE, column4 SMALLINT UNSIGNED);
Query OK, 0 rows affected (0.02 sec)
-
Om te bevestigen dat de tabel nu bestaat, gebruikt u de
SHOW TABLES
commando.SHOW TABLES;
+----------------------------+ | Tables_in_newdatabasename | +----------------------------+ | newtablename | +----------------------------+ 1 row in set (0.00 sec)
-
Om de tabelstructuur te bekijken en de lijst met velden te controleren, gebruikt u de
DESCRIBE
commando.DESCRIBE newtablename;
+---------+-------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------------+------+-----+---------+-------+ | column1 | varchar(20) | YES | | NULL | | | column2 | char(1) | YES | | NULL | | | column3 | date | YES | | NULL | | | column4 | smallint unsigned | YES | | NULL | | +---------+-------------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
-
Als een tabel niet langer nodig is, verwijder deze dan met de
DROP TABLE
commando.Let op Wanneer een tabel wordt verwijderd, gaan alle gegevens in de tabel verloren en kunnen deze niet worden hersteld.
DROP TABLE newtablename;
Gegevens toevoegen en ophalen
De belangrijkste manier om een nieuwe rij gegevens in een tabel in te voegen is met de INSERT
commando.
-
Gebruik de
INSERT
. om een rij toe te voegen opdracht. Geef de tabelnaam op, het trefwoordVALUES
, en een door komma's gescheiden lijst met waarden in de indelingINSERT INTO tablename VALUES ('value_1', ... 'value_n');
. De kolomwaarden moeten dezelfde volgorde hebben als de tabeldefinitie, met de tekenreeks- en datumwaarden tussen aanhalingstekens. Om bijvoorbeeld gegevens toe te voegen aannewtablename
, geef waarden op voorcolumn1
,column2
,column3
, encolumn4
, in die volgorde.INSERT INTO newtablename VALUES ('value1','a','2021-09-10',123);
Query OK, 1 row affected (0.01 sec)
-
Gebruik de
SELECT
. om gegevens op te halen commando, samen met enkele beperkingen die MySQL vertellen welke rijen moeten worden geretourneerd. De volledige inhoud van de tabel kan worden geretourneerd, of alleen een subset. Om alle rijen in een tabel te selecteren, gebruikt u deSELECT *
commando, maar voeg geen kwalificaties toe.SELECT * FROM newtablename;
+---------+---------+------------+---------+ | column1 | column2 | column3 | column4 | +---------+---------+------------+---------+ | value1 | a | 2021-09-10 | 123 | | value2 | b | 2021-09-08 | 123 | +---------+---------+------------+---------+ 2 rows in set (0.00 sec)
-
Het is ook mogelijk om alleen rijen te selecteren die aan bepaalde criteria voldoen, bijvoorbeeld wanneer een kolom op een bepaalde waarde is ingesteld. Gebruik de
WHERE
zoekwoord als kwalificatie, gevolgd door de overeenkomstcriteria als beperking. In dit voorbeeld alleen rijen waarincolumn2
is ingesteld opb
worden weergegeven.SELECT * FROM newtablename WHERE column2 = 'b';
+---------+---------+------------+---------+ | column1 | column2 | column3 | column4 | +---------+---------+------------+---------+ | value2 | b | 2021-09-08 | 123 | +---------+---------+------------+---------+ 1 row in set (0.00 sec)
-
Voor tabellen met veel kolommen is het vaak makkelijker om de weergegeven informatie te beperken. Om alleen bepaalde kolommen voor elke rij te selecteren, specificeert u de kolomnamen in plaats van de
*
symbool.SELECT column1, column4 FROM newtablename;
+---------+---------+ | column1 | column4 | +---------+---------+ | value1 | 123 | | value2 | 123 | +---------+---------+ 2 rows in set (0.00 sec)
-
Om een rij in een tabel te wijzigen, gebruikt u de
UPDATE
opdracht. DeSET
trefwoord geeft de kolom aan die moet worden bijgewerkt en de nieuwe waarde. Indien nodig, deWHERE
trefwoord biedt een methode om de bewerking te beperken tot alleen bepaalde rijen. In het volgende voorbeeld is de waarde vancolumn4
is alleen gewijzigd in155
ifcolumn2
is gelijk aanb
.UPDATE newtablename SET column4 = 155 WHERE column2 = 'b';
Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0
-
De
SELECT *
verklaring kan worden gebruikt om de update te bevestigen.SELECT * FROM newtablename;
+---------+---------+------------+---------+ | column1 | column2 | column3 | column4 | +---------+---------+------------+---------+ | value1 | a | 2021-09-10 | 123 | | value2 | b | 2021-09-08 | 155 | +---------+---------+------------+---------+ 2 rows in set (0.00 sec)
Conclusie:MySQL op Ubuntu 20.04
MySQL is een goede keuze voor kleine tot middelgrote webapplicaties. Het maakt gebruik van de industriestandaard SQL-programmeertaal, die vrij eenvoudig te gebruiken is. MySQL is zeer stabiel en robuust en heeft veel bronnen en goede ondersteuning. Het belangrijkste alternatief voor MySQL is MariaDB. Het biedt betere prestaties en nieuwere functies, maar is niet zo goed ingeburgerd.
U kunt de MySQL-server eenvoudig downloaden en installeren op Ubuntu met behulp van de apt
pakketten en de mysql_secure_installation
nut. Zelfs als u de enige persoon bent die MySQL gebruikt, kunt u het beste een nieuwe MySQL-gebruiker maken met beperktere rechten.
Om MySQL te gebruiken, bepaalt u eerst het databaseschema en definieert u de tabelinhoud. Maak vervolgens een database en de datatabellen. Gegevens kunnen worden toegevoegd met behulp van de INSERT
commando, aangepast met de UPDATE
commando, en opgehaald met de SELECT
opdracht. Natuurlijk kan MySQL zelfs zeer complexe bewerkingen uitvoeren. Doorloop de MySQL-tutorial om aan de slag te gaan en raadpleeg de MySQL-documentatie voor een volledig overzicht.
Meer informatie
U kunt de volgende bronnen raadplegen voor aanvullende informatie over dit onderwerp. Hoewel deze worden verstrekt in de hoop dat ze nuttig zullen zijn, houd er rekening mee dat we niet kunnen instaan voor de nauwkeurigheid of tijdigheid van extern gehost materiaal.
- MariaDB-website
- MySQL-website