Hur man installerar och konfigurerar MariaDB på Ubuntu och CentOS

By rik

Vi ska utforska hur man installerar och konfigurerar MariaDB, ett omtyckt relationsdatabashanteringssystem (RDBMS) med öppen källkod, baserat på MySQL.

Detta system är utvecklat av en community och erbjuder även kommersiell support. MariaDB är utformat för att vara mycket kompatibelt med MySQL, trots vissa skillnader.

Denna artikel kommer att gå igenom installation och konfiguration av MariaDB på Ubuntu 20.x och CentOS 7.x/8.x. I slutet kommer vi att undersöka några bra metoder för att öka säkerheten och prestandan.

MariaDB på Ubuntu

På Ubuntu 20.x är MariaDB lättillgängligt via standardrepositorierna. Vi kommer att använda apt för att hantera installationen.

Börja med att uppdatera datan i apt-repositorierna:

$ sudo apt update

Efter uppdateringen kör du följande kommando:

$ sudo apt install mariadb-server

Detta installerar MariaDB och dess beroenden. Bekräfta med ‘Y’ när du blir tillfrågad.

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

MariaDB på CentOS 7.x

På CentOS 7.x finns MariaDB version 5.x i standardrepositorierna. Vi ska installera den senaste versionen av MariaDB.

Först måste vi lägga till ett extra yum-repo. MariaDB tillhandahåller ett enkelt skript, mariadb_repo_setup, för detta. Kör följande kommandon på ditt CentOS 7.x-system för att installera repot:

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

Skriptet konfigurerar yum-repot som krävs för att installera den senaste versionen av MariaDB automatiskt, vilket för närvarande är 10.x.

Alternativt kan du manuellt konfigurera yum-repot genom att skapa en ny repo-fil:

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

Lägg till följande detaljer i filen och spara:

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

För att installera MariaDB, kör detta kommando:

$ sudo yum install MariaDB-server

Bekräfta alla frågor med ‘y’:

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

Detta fullbordar installationen av MariaDB-servern och relaterade paket.

MariaDB på CentOS 8.x

På CentOS 8.x är den tillgängliga versionen i standardrepositorierna 10.3 eller senare. Vi kan direkt installera MariaDB med DNF:

sudo dnf install mariadb-server

För att få den allra senaste versionen, kan du följa den manuella metoden som beskrivs i CentOS 7.x-avsnittet.

Starta MariaDB

På Ubuntu startas MariaDB-tjänsten direkt efter installationen. På CentOS måste vi manuellt aktivera och starta den.

Oavsett system, kör följande kommandon för att starta, aktivera vid uppstart och kontrollera statusen för MariaDB:

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

Resultat:

$ 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.
$
  

Säkra MariaDB

Efter installationen är det viktigt att säkra MariaDB genom att ange ett root-lösenord, inaktivera fjärrinloggning för root, ta bort testdatabasen och anonyma användare samt ladda om privilegier.

Använd följande kommando för att härda MariaDB:

$ sudo mysql_secure_installation

Följ instruktionerna, med de föreslagna åtgärderna om du inte har särskilda behov.

Exempelresultat:

$ 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 kommer att använda systemets autentisering, så vi sätter inte ett separat lösenord för MariaDB, eftersom det redan är säkert. Du kan alltid sätta ett separat lösenord om det behövs.

Verifiera installation

För att kontrollera din MariaDB-installation, kör (ange lösenordet du skapade under `mysql_secure_installation` eller, om du hoppade över det, använd ditt systems root-uppgifter):

$ 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 skapa ett nytt administratörskonto istället för root enligt följande (ändra lösenordet till det du vill använda):

$ 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
$

Verifiera åtkomst med den nya administratörsanvändaren (använd lösenordet som angavs i föregående 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-optimering

Efter installation och säkerhet bör du optimera operativsystemet och databasen. Inställningarna kan variera beroende på system, användning, antal användare m.m.

Från OS-perspektiv kan vissa systemparametrar justeras för MariaDB, vilket vi ska undersöka nu.

Linux Kernel-inställningar – IO Scheduler

De rekommenderade IO-schemaläggarna för MariaDB är noop och deadline. Kontrollera detta med `cat /sys/block/${DEVICE}/queue/scheduler`

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

En tillfällig ändring kan göras med följande kommando, och påverkar systemets prestanda omedelbart:

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

För att göra ändringen permanent, konfigurera den i GRUB-konfigurationsfilen (/etc/default/grub), bygg om GRUB och starta om systemet.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Resursbegränsningar – Gräns för öppna filer

Linux begränsar antalet filbeskrivningar som varje process kan öppna. Ett aktivt DB-system kan lätt överskrida denna gräns. Många system har 1024 som standardgräns, med mjuka och hårda gränser.

För att öka gränsen, lägg till följande rader i /etc/security/limits.conf:

mysql soft nofile 65535
mysql hard nofile 65535
  

En omstart krävs för att mysql-användaren ska se och använda de nya gränserna, vilket kan kontrolleras med:

$ ulimit -Sn
65535
$ ulimit -Hn
65535

Resursbegränsningar – Kärnfilstorlek

Linux begränsar också storleken på kärnfiler, med mjuka och hårda gränser. Som standard är den mjuka gränsen satt till 0, vilket inaktiverar generering av kärnfiler. För att tillåta generering av kärnfiler (ytterligare konfigurationer krävs), öka värdet i /etc/security/limits.conf:

mysql soft core unlimited
mysql hard core unlimited
  

Efter omstart kan mysql-användaren se de nya värdena med kommandot ulimit:

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

Konfigurera Swappiness

Swappiness i Linux avgör sannolikheten för att systemet växlar minnessidor till swap-utrymmet. Standardvärdet är 60, vilket kan kontrolleras med:

sysctl vm.swappiness

Värdet kan variera från 0 till 100. Ett lägre värde minskar sannolikheten för att använda swap. På en databasserver som endast kör MariaDB, kan det vara bra att minska detta värde till 0. Observera att inställning av swappiness till 0 bör göras med försiktighet, eftersom högt minnesanvändning kan leda till Oom Memory process kill.

Eftersom ett lågt swappiness-värde rekommenderas för databasarbetsbelastningar, rekommenderas att ställa det till 1. Lägg till följande rad i /etc/sysctl.conf för att göra ändringen permanent:

vm.swappiness = 1

Ändringen träder i kraft efter omstart, men du kan också ändra den i förväg med kommandot sysctl:

sysctl -w vm.swappiness=1

Optimering av filsystem

För MariaDB anses ext4, XFS och Btrfs vara de bästa filsystemen, då de är en del av Linuxkärnan och har brett stöd. Välj filsystem baserat på krav och noggrann undersökning.

Det är osannolikt att du behöver registrera filåtkomsttid på en databasserver. Inaktivera detta för att förbättra prestandan. Montera filsystemet med noatime-alternativet eller lägg till det i monteringsalternativen i /etc/fstab för att göra ändringen permanent.

DB-Optimering

MariaDB har flera interna inställningar som kan anpassas efter behov.

Vi ska diskutera några av dem här.

MariaDB konfigureras primärt via filen my.cnf.

På Ubuntu finns my.cnf på:

/etc/mysql/my.cnf

På CentOS ligger den på:

/etc/my.cnf

Detaljerad dokumentation om vilka variabler som finns för konfiguration kan hittas här.

Mycket beror också på vilken typ av motor som används av MariaDB, t.ex. MyISAM, InnoDB eller XtraDB. Varje har sina egna fördelar och nackdelar och valet beror på databas- och applikationskrav.

Ställ in `innodb_buffer_pool_size` till ungefär 80 % av ditt minne. Detta säkerställer att 80 % av din arbetsmängd finns i minnet.

Några andra viktiga inställbara parametrar är:

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 information om justering av InnoDB- eller XtraDB-variabler finns här. Se denna guide för alla tillgängliga inställningsalternativ för MariaDB.

Om du är intresserad, kolla in dessa resurser för att lära dig SQL och NoSQL.

Slutsats

MariaDB är ett populärt val när det kommer till relationsdatabashanteringssystem. Att det är öppen källkod med en stor community bidrar också till populariteten.

För att lära dig mer, se dess dokumentation som inkluderar ämnen som grundläggande SQL, migrering, MariaDB-administration, hög tillgänglighet, prestandajustering, lagringsmotorer, programmering och anpassning. Du kanske också vill inaktivera binär loggning om du inte använder ett kluster.