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.