Hur man installerar och konfigurerar MariaDB på Ubuntu och CentOS

Låt oss lära oss hur man installerar och konfigurerar MariaDB, ett populärt MySQL Relational Database Management System (RDBMS) med öppen källkod.

Det är gemenskapsutvecklat och har möjlighet till kommersiellt stöd. MariaDB har varit tänkt att förbli mycket kompatibel med MySQL även om det finns vissa avvikelser.

I den här artikeln kommer vi att täcka installationen och konfigurationen av MariaDB på Ubuntu 20.x och CentOS 7.x/8.x och i slutet kommer vi att granska några bästa praxis för att säkra och förbättra dess prestanda.

MariaDB på Ubuntu

På Ubuntu 20.x är MariaDB tillgänglig direkt från dess standardförråd. Vi kommer att använda apt för denna uppgift.

Första uppdatering av apt repositories data av:

$ sudo apt update

När förvarsdata har uppdaterats kör du:

$ sudo apt install mariadb-server

Detta kommer att installera MariaDB och nödvändiga paket. Bekräfta med ’Y’ för alla prompter du kan få under utförandet av det föregående kommandot.

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

MariaDB på CentOS 7.x

För CentOS 7.x är den tillgängliga MariaDB-versionen från standard CentOS-förvaret 5.x. Vi kommer att installera den senaste tillgängliga versionen av MariaDB.

För detta måste vi först konfigurera ett extra yum-förråd. MariaDB tillhandahåller ett enkelt sätt att använda skriptet mariadb_repo_setup. Kör följande kommandon på ditt CentOS 7.x-system för att installera förvaret:

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

Detta skript kommer att ställa in det nödvändiga yum-förrådet för att installera MariaDBs senaste version automatiskt. När denna artikel skrivs är den 10.x.

Eller om du vill gå den manuella vägen, kan du konfigurera ett manuellt yum-förråd genom att skapa en ny repo-fil som:

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

Lägg sedan till följande detaljer i repo-filen och spara den:

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

Nu för att installera MariaDB, kör kommandot nedan:

$ sudo yum install MariaDB-server

Bekräfta alla uppmaningar som visas under installationen genom att ange ”y”:

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

Detta slutför installationen av MariaDB-servern och beroende paket.

MariaDB på CentOS 8.x

För CentOS 8.x är den tillgängliga versionen från standardlager 10.3 eller senare. Vi kan installera MariaDB direkt med DNF-kommandot:

sudo dnf install mariadb-server

Annars för att få den senaste tillgängliga versionen kan du följa det manuella sättet som anges i föregående avsnitt för CentOS 7.x och det borde få dig att arbeta.

Startar MariaDB

På en Ubuntu-maskin kör du MariaDB-tjänsten direkt efter installationen, medan vi för CentOS måste aktivera och starta relevanta tjänster manuellt.

I alla fall, för Ubuntu såväl som CentOS, kör följande kommandon för att starta MariaDB-tjänsten, aktiverad vid uppstart samt verifiera den:

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

Produktion:

$ 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

Som det första steget efter installationen av MariaDB bör vi säkra dess distribution genom att ställa in ett root-lösenord, inaktivera fjärrinloggning för root, ta bort testdatabasen såväl som anonyma användare och slutligen ladda om privilegier.

Kör kommandot nedan för att härda MariaDB:

$ sudo mysql_secure_installation

Du kan följa standardinstruktionerna med föreslagna åtgärder om du inte har ett specifikt krav på att avvika.

Produktion:

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

Här kommer vi att använda systemets autentisering, så har inte ställt in ett separat root-lösenord för MariaDB, eftersom det redan är säkert. Om du behöver kan du alltid ställa in ett separat root-lösenord också.

Setup Validering

För att verifiera din MariaDB-inställning, kör (ange lösenordet du ställde in när du körde mysql_secure_installation eller, om det hoppades över vid den tidpunkten, använd ditt systems rotuppgifter):

$ 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 ställa in ett nytt administratörskonto i stället för roten som visas nedan (ändra värdet på lösenordet med det du tänker ställa in för administratörskontot):

$ 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 ny administratörsanvändare som (ange lösenordet som angetts 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 installationen och säkrat din MariaDB-installation bör du vidta åtgärder för att justera ditt operativsystem och din databas för optimal prestanda. Denna inställning kommer att variera beroende på din systemkonfiguration, användningstyp, antal användare och ett antal andra faktorer.

Ur ett OS-perspektiv kan vissa systemparametrar konfigureras för MariaDB som vi kommer att diskutera nu.

Linux Kernel Settings – IO Scheduler

Rekommenderade IO-schemaläggare för MariaDB är noop och deadline. För att kontrollera använd 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 genom att utfärda följande kommando och dess effekt, om någon, kommer att vara omedelbar på systemets prestanda:

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

För att göra det beständigt måste du konfigurera det i GRUBs konfigurationsfil som visas nedan i /etc/default/grub , bygga 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 vanligtvis antalet filbeskrivningar som varje process kan öppna. För ett aktivt DB-system kan denna gräns lätt överskrida eller påverka prestandan. På många Linux-system är denna gräns som standard 1024. Dessutom finns det ett alternativ för mjuka och hårda gränser.

För att öka gränsen kan du lägga till följande rader i din /etc/security/limits.conf:

mysql soft nofile 65535
mysql hard nofile 65535

En omstart av systemet kommer att behövas efter vilken mysql-användare skulle kunna se och använda de nya gränserna. Detta kan kontrolleras som:

$ ulimit -Sn
65535
$ ulimit -Hn
65535

Resursbegränsningar – Kärnfilstorlek

Linux begränsar storleken på kärnfiler som sett i föregående fall. Återigen har detta en mjuk och hård gräns och som standard är den mjuka gränsen satt till 0 vilket effektivt inaktiverar generering av kärnfiler. För att tillåta generering av kärnfiler (andra konfigurationer som behövs för generering av kärndumpar), kan vi öka detta värde i /etc/security/limits.conf som:

mysql soft core unlimited
mysql hard core unlimited

Efter omstarten av systemet skulle mysql-användaren kunna se de nya värdena med kommandot ulimit som:

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

Konfigurera Swappiness

Swappiness-värde i Linux avgör hur sannolikt systemet är att byta en sida från minnet till att byta utrymme som är konfigurerat på systemet. Vanligtvis är standardvärdet satt till 60 som kan kontrolleras från:

sysctl vm.swappiness

Dess värde kan variera från 0 till 100, där ett lägre värde innebär en lägre sannolikhet för byte. På en databasserver som endast kör MariaDB, skulle vi vilja minska detta värde till 0 för att undvika att använda swap så mycket som möjligt. Notera här att inställning av swappiness-värdet på 0 bör göras med försiktighet med tanke på andra systemdesignfaktorer, eftersom det vid hög minnesanvändning eller I/O-belastning finns en risk för att kärnan (Oom Memory) process dödar.

Eftersom en låg swappiness-inställning rekommenderas för databasarbetsbelastningar och som sådan för MariaDB-databaser, rekommenderas det att ställa swappiness till värdet 1. Du kan lägga till nedanstående rad i /etc/sysctl.confför att göra denna ändring bestående:

vm.swappiness = 1

Ändringarna kommer att träda i kraft efter omstart av systemet men du kan alltid göra det i förväg med kommandot sysctl:

sysctl -w vm.swappiness=1

Optimering av filsystem

För MariaDB betraktas de bästa Linux-filsystemen i allmänhet som ext4, XFS och Btrfs, som alla ingår i Linux-kärnan och stöds brett. Dessa filsystem är tillgängliga på de flesta Linux-distributioner. Varje filsystem har sina unika egenskaper och funktioner och kan väljas baserat på krav efter korrekt granskning.

Dessutom är det osannolikt att du behöver registrera filåtkomsttid på en databasserver. Vi kan inaktivera detta för att förbättra prestandan. Du kan montera det relevanta filsystemet med noatime-alternativet eller lägga till det i monteringsalternativen i filen /etc/fstab för att göra det beständigt.

DB-optimering

Det finns flera tunables internt i MariaDB-funktionen som kan anpassas utifrån ens krav och behov.

Vi kommer att diskutera några av dem här.

MariaDB konfigureras mestadels av filen my.cnf.

På Ubuntu kan du hitta my.cnf på:

/etc/mysql/my.cnf

Medan på CentOS ligger den på:

/etc/my.cnf

Detaljerad dokumentation om vilka variabler som finns tillgängliga för inställning i konfigurationsfilen kan refereras från här.

Mycket beror också på vilken typ av motor som används av MariaDB, nämligen MyISAM och InnoDB eller XtraDB. Båda har sina egna för- och nackdelar och att välja en beror på databas- och applikationskrav.

Vi bör ställa in innodb_buffer_pool_size till cirka 80 % av ditt minne. Detta säkerställer att 80 % av din arbetsuppsättning finns i minnet.

Några av de andra viktiga inställbara parametrarna ä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 kan hittas här. Hänvisa till detta 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 av de populära valen när det kommer till relations-DBMS. Att vara öppen källkod med en mångfaldig gemenskap bidrar ytterligare till det.

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.