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.
Innehållsförteckning
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.