Installer og konfigurer MariaDB på Ubuntu & CentOS: Komplett guide

La oss dykke ned i prosessen med å installere og konfigurere MariaDB, en anerkjent åpen kildekode relasjonsdatabasehåndteringssystem (RDBMS) som er kompatibel med MySQL.

Utviklet av et dedikert fellesskap, tilbyr MariaDB både fellesskapsstøtte og muligheter for kommersiell bistand. Målet har alltid vært å opprettholde høy kompatibilitet med MySQL, selv om det finnes noen ulikheter.

Denne veiledningen vil lose deg gjennom installasjonen og konfigurasjonen av MariaDB på Ubuntu 20.x og CentOS 7.x/8.x. Vi vil også utforske anbefalte metoder for å øke sikkerheten og forbedre ytelsen.

MariaDB på Ubuntu

For Ubuntu 20.x er MariaDB tilgjengelig direkte fra de offisielle lagrene. Vi benytter oss av `apt` for denne installasjonen.

Start med å oppdatere `apt`-pakkedata:

$ sudo apt update

Etter oppdateringen, kjør følgende kommando:

$ sudo apt install mariadb-server

Dette vil installere MariaDB sammen med nødvendige pakker. Bekreft med «Y» når du blir spurt under utførelsen av kommandoen.

Do you want to continue? [Y/n] Y

MariaDB på CentOS 7.x

På CentOS 7.x er standardversjonen av MariaDB i de offisielle lagrene 5.x. Vi skal installere den nyeste tilgjengelige versjonen av MariaDB.

For å gjøre dette, må vi først konfigurere et ekstra `yum`-lager. MariaDB tilbyr et script `mariadb_repo_setup` som forenkler denne prosessen. Kjør disse kommandoene på ditt CentOS 7.x-system:

$ sudo yum install wget
$ wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
$ chmod +x mariadb_repo_setup
$ sudo ./mariadb_repo_setup

Dette scriptet konfigurerer det nødvendige `yum`-lageret for automatisk å installere den siste versjonen av MariaDB. Per dags dato er den nyeste versjonen 10.x.

Alternativt kan du manuelt konfigurere et `yum`-lager ved å opprette en ny fil:

$ sudo vi /etc/yum.repos.d/MariaDB.repo

Legg til følgende informasjon i den nye filen, og lagre den:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Nå, installer MariaDB med følgende kommando:

$ sudo yum install MariaDB-server

Bekreft eventuelle spørsmål som dukker opp under installasjonen ved å skrive «y»:

Is this ok [y/d/N]: y

Dette fullfører installasjonen av MariaDB-serveren og alle tilhørende avhengigheter.

MariaDB på CentOS 8.x

For CentOS 8.x er den tilgjengelige versjonen fra de standard lagrene 10.3 eller nyere. Du kan installere MariaDB direkte via `dnf`-kommandoen:

sudo dnf install mariadb-server

Ellers, for å få den nyeste versjonen, kan du følge den manuelle prosessen som er beskrevet for CentOS 7.x. Den burde fungere også her.

Starte MariaDB

På Ubuntu vil MariaDB-tjenesten være i gang umiddelbart etter installasjonen, mens på CentOS må vi manuelt starte og aktivere tjenestene.

Uansett operativsystem, bruk følgende kommandoer for å starte, aktivere ved oppstart og verifisere statusen til MariaDB-tjenesten:

$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
$ sudo systemctl status mariadb.service

Eksempel på utskrift:

$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
$ sudo systemctl status mariadb.service
● mariadb.service - MariaDB 10.5.8 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Thu 2020-12-31 13:20:04 IST; 13s ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 13521 (mariadbd)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           └─13521 /usr/sbin/mariadbd

Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: 10.5.8 started; log sequence number 45118; transaction id 20
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Plugin 'FEEDBACK' is disabled.
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: Buffer pool(s) load completed at 201231 13:20:04
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Server socket created on IP: '::'.
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Reading of all Master_info entries succeeded
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Added new Master_info '' to hash table
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] /usr/sbin/mariadbd: ready for connections.
Dec 31 13:20:04 centos7vm mariadbd[13521]: Version: '10.5.8-MariaDB'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server
Dec 31 13:20:04 centos7vm systemd[1]: Started MariaDB 10.5.8 database server.
$

Sikring av MariaDB

Første skritt etter installasjon er å sikre MariaDB. Dette innebærer å sette et root-passord, deaktivere ekstern rotpålogging, fjerne testdatabasen og anonyme brukere, og deretter laste inn privilegiene på nytt.

Kjør følgende kommando for å herde MariaDB:

$ sudo mysql_secure_installation

Følg de foreslåtte instruksjonene, med mindre du har spesielle behov.

Eksempel på utskrift:

$ sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB 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? [Y/n] Y
 ... Success!

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? [Y/n] Y
 ... Success!

By default, MariaDB 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? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
$

Vi benytter systemautentisering i dette tilfellet, så vi hopper over å sette et eget root-passord for MariaDB. Men det er mulig å sette et eget root-passord om ønskelig.

Konfigurasjonsvalidering

For å bekrefte at MariaDB er korrekt installert, kjør følgende kommando (spesifiser passordet du satte under `mysql_secure_installation`, eller bruk systemets root-legitimasjon om du hoppet over det):

$ sudo mysqladmin -u root -p version
Enter password:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.5.8-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 53 min 17 sec

Threads: 2  Questions: 77  Slow queries: 0  Opens: 20  Open tables: 14  Queries per second avg: 0.024
$

Du kan opprette en ny administratorkonto istedenfor root som vist under (endr passordet til det du selv ønsker for administratorkontoen):

$ sudo mariadb
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 44
Server version: 10.5.8-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit
Bye
$

Bekreft tilgangen med den nye admin-brukeren (oppgi passordet som ble satt i forrige steg):

$ mysqladmin -u admin -p version
Enter password:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.5.8-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 56 min 59 sec

Threads: 2  Questions: 83  Slow queries: 0  Opens: 20  Open tables: 14  Queries per second avg: 0.024
$

OS-optimalisering

Etter installasjon og sikkerhetskonfigurering er det lurt å optimalisere operativsystemet og databasen for best mulig ytelse. Optimaliseringen vil avhenge av systemkonfigurasjonen, bruksmønster, antall brukere, og andre faktorer.

Fra et operativsystemperspektiv finnes det systemparametere som kan konfigureres for MariaDB.

Linux Kjerneinnstillinger – IO-Planlegger

Anbefalte IO-planleggere for MariaDB er noop og deadline. For å sjekke den aktuelle planleggeren, bruk:

$ sudo cat /sys/block/sda/queue/scheduler
[mq-deadline] kyber bfq none
$

En midlertidig endring kan gjøres med følgende kommando. Eventuelle effekter vil merkes umiddelbart på ytelsen:

$ sudo echo noop > /sys/block/sda/queue/scheduler

For en permanent endring, konfigurer dette i GRUB-konfigurasjonsfilen i `/etc/default/grub`, gjenoppbygg GRUB, og start systemet på nytt:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Ressursgrenser – Grense for åpne filer

Linux begrenser antall filbeskrivelser en prosess kan ha åpen. For et aktivt databasesystem kan denne grensen nås raskt og påvirke ytelsen. Standardgrensen er ofte 1024. I tillegg har vi myke og harde grenser.

For å øke grensen, legg til følgende linjer i `/etc/security/limits.conf`:

mysql soft nofile 65535
mysql hard nofile 65535

En systemrestart er nødvendig etter dette. `mysql`-brukeren vil deretter kunne se og bruke de nye grensene, noe som kan sjekkes med:

$ ulimit -Sn
65535
$ ulimit -Hn
65535

Ressursgrenser – Kjernefilstørrelse

Linux begrenser også størrelsen på kjernefiler. Som nevnt, har dette en myk og hard grense. Myk grense er som regel satt til 0, noe som effektivt deaktiverer kjernefilgenerering. For å aktivere kjernefilgenerering, kan vi øke denne verdien i `/etc/security/limits.conf` som:

mysql soft core unlimited
mysql hard core unlimited

Etter omstart, vil `mysql`-brukeren kunne se de nye verdiene via `ulimit`-kommandoen:

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

Konfigurer Swappiness

Swappiness i Linux styrer hvor sannsynlig det er at systemet bytter minne til diskplass. Standardverdien er 60, som kan sjekkes med:

sysctl vm.swappiness

Verdien kan være fra 0 til 100, der en lavere verdi betyr mindre sannsynlighet for å bytte minne. For en databaseserver dedikert til MariaDB ønsker vi å redusere denne verdien til 0 for å minimere bruk av swap. **Vær forsiktig** med å sette swappiness til 0, da det kan føre til Out Of Memory (OOM) feil om minne eller I/O er høyt.

Siden en lav swappiness anbefales for databasebruk, anbefaler vi å sette swappiness til 1. Legg til denne linjen i `/etc/sysctl.conf` for en permanent endring:

vm.swappiness = 1

Endringene trer i kraft etter en omstart. Du kan også gjøre endringen direkte ved bruk av `sysctl`-kommandoen:

sysctl -w vm.swappiness=1

Filsystemoptimaliseringer

For MariaDB er de beste filsystemene generelt ansett som ext4, XFS og Btrfs, som alle er del av Linux-kjernen og støttes bredt. Disse filsystemene er tilgjengelige på de fleste Linux-distribusjoner. Hvert filsystem har sine egne fordeler og bør velges basert på grundig vurdering av behov.

Videre er det ikke nødvendig å logge filtilgangstid på en databaseserver. Vi kan deaktivere dette for å forbedre ytelsen. Monter filsystemet med `noatime`-alternativet eller legg det til i monteringsalternativene i `/etc/fstab` for en permanent endring.

DB-Optimalisering

MariaDB har mange innstillinger som kan tilpasses for å møte spesifikke krav.

La oss gå gjennom noen av dem.

MariaDB konfigureres i stor grad av `my.cnf`-filen.

På Ubuntu finner du `my.cnf` på:

/etc/mysql/my.cnf

Mens på CentOS ligger den her:

/etc/my.cnf

Detaljert dokumentasjon over tilgjengelige variabler finnes her.

Mye avhenger også av hvilken lagringsmotor MariaDB benytter, enten MyISAM, InnoDB eller XtraDB. Hver motor har sine fordeler og ulemper, og valget bør baseres på databasens og applikasjonens behov.

`innodb_buffer_pool_size` bør settes til ca. 80 % av tilgjengelig minne. Dette sikrer at 80 % av arbeidssettet er i minnet.

Andre viktige parametere som kan justeres er:

innodb_log_file_size
innodb_flush_method
innodb_thread_sleep_delay
innodb_adaptive_max_sleep_delay
innodb_buffer_pool_instances
innodb_buffer_pool_size
innodb_max_dirty_pages_pct_lwm
innodb_read_ahead_threshold
innodb_thread_concurrency

Mer detaljer om innstilling av InnoDB- og XtraDB-variabler finnes her. Se denne guiden for alle tilgjengelige innstillingsalternativer for MariaDB.

Hvis du er interessert i å lære om SQL og NoSQL, kan du finne mer informasjon online.

Konklusjon

MariaDB er et populært valg for relasjonsdatabaser. Den er åpen kildekode med et aktivt fellesskap.

For å lære mer, se den offisielle dokumentasjonen. Den inkluderer emner som grunnleggende SQL, migrering, MariaDB-administrasjon, høy tilgjengelighet, ytelsesjustering, lagringsmotorer, programmering og tilpasning. Det kan også være lurt å deaktivere binær logging hvis du ikke benytter deg av en klynge.