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.