U ovom tekstu ćemo istražiti proces instalacije i konfiguracije MariaDB, popularnog sistema za upravljanje relacionim bazama podataka (RDBMS) otvorenog koda, koji je nastao kao fork MySQL-a.
MariaDB razvija zajednica i nudi opcije komercijalne podrške. Cilj joj je da ostane u velikoj meri kompatibilna sa MySQL-om, iako postoje neke ključne razlike.
U ovom članku, detaljno ćemo proći kroz instalaciju i podešavanje MariaDB na Ubuntu 20.x i CentOS 7.x/8.x. Na kraju ćemo razmotriti neke preporučene prakse za poboljšanje bezbednosti i performansi ovog sistema.
MariaDB na Ubuntu
Za Ubuntu 20.x, MariaDB je direktno dostupan iz standardnih repozitorijuma. Za instalaciju ćemo koristiti alatku apt.
Prvo, osvežite informacije o paketima sa:
$ sudo apt update
Nakon ažuriranja liste paketa, instalirajte MariaDB sa:
$ sudo apt install mariadb-server
Ovo će instalirati MariaDB i sve potrebne zavisnosti. Potvrdite instalaciju sa ‘Y’ kada budete upitani tokom izvršavanja ove komande.
Do you want to continue? [Y/n] Y
MariaDB na CentOS 7.x
Verzija MariaDB dostupna u podrazumevanim repozitorijumima CentOS 7.x je 5.x. Mi ćemo instalirati najnoviju dostupnu verziju MariaDB.
Za ovaj korak, prvo moramo podesiti dodatni yum repozitorijum. MariaDB nudi praktičnu skriptu za podešavanje repozitorijuma, mariadb_repo_setup. Da biste dobili podešavanja repozitorijuma, pokrenite sledeće komande na vašem CentOS 7.x sistemu:
$ sudo yum install wget $ wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup $ chmod +x mariadb_repo_setup $ sudo ./mariadb_repo_setup
Ova skripta će automatski podesiti potrebne yum repozitorijume za instaliranje najnovije verzije MariaDB. U trenutku pisanja ovog članka, to je verzija 10.x.
Alternativno, ako želite ručno da konfigurišete yum repozitorijum, kreirajte novu repo datoteku:
$ sudo vi /etc/yum.repos.d/MariaDB.repo
Dodajte sledeće detalje u ovu datoteku i sačuvajte je:
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.5/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Sada, instalirajte MariaDB pomoću komande:
$ sudo yum install MariaDB-server
Potvrdite sve upite tokom instalacije unosom ‘y’:
Is this ok [y/d/N]: y
Ovim je završen proces instalacije MariaDB servera i pratećih paketa.
MariaDB na CentOS 8.x
Za CentOS 8.x, verzija dostupna u podrazumevanim repozitorijumima je 10.3 ili novija. MariaDB možete instalirati direktno pomoću dnf komande:
sudo dnf install mariadb-server
U suprotnom, za instaliranje najnovije dostupne verzije, možete slediti ručni postupak opisan u prethodnom odeljku za CentOS 7.x.
Pokretanje MariaDB
Na Ubuntu sistemu, MariaDB servis će se automatski pokrenuti nakon instalacije, dok na CentOS-u moramo ručno omogućiti i pokrenuti potrebne servise.
Bez obzira na operativni sistem, Ubuntu ili CentOS, pokrenite sledeće komande za pokretanje MariaDB servisa, njegovo automatsko pokretanje pri svakom paljenju i proveru njegovog statusa:
$ sudo systemctl start mariadb.service $ sudo systemctl enable mariadb.service $ sudo systemctl status mariadb.service
Izlaz:
$ 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. $
Osiguravanje MariaDB
Prvi korak nakon instalacije MariaDB je obezbeđivanje instalacije postavljanjem root lozinke, onemogućavanjem udaljenog root pristupa, uklanjanjem test baze podataka i anonimnih korisnika, te ponovnim učitavanjem privilegija.
Pokrenite naredbu ispod da biste osigurali MariaDB:
$ sudo mysql_secure_installation
Pratite uputstva na ekranu, prihvatajući predložene akcije, osim ako imate određene razloge za odstupanje.
Izlaz:
$ 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! $
U ovom primeru, koristićemo autentifikaciju na nivou operativnog sistema, tako da nismo postavili zasebnu root lozinku za MariaDB jer je već zaštićen. Ako je potrebno, uvek možete postaviti i zasebnu root lozinku.
Verifikacija podešavanja
Za proveru instalacije MariaDB, pokrenite sledeću komandu (unesite lozinku koju ste postavili tokom procesa mysql_secure_installation
ili, ako je preskočen, koristite root akreditive vašeg sistema):
$ 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 $
Možete kreirati novi administratorski nalog umesto root naloga, kao što je prikazano u nastavku (promenite lozinku sa onom koju planirate da koristite):
$ 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 $
Potvrdite pristup sa novim administratorom (unesite lozinku koju ste postavili u prethodnom koraku):
$ 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 $
Optimizacija OS
Nakon instalacije i obezbeđivanja MariaDB, treba da preduzmete korake za podešavanje operativnog sistema i baze podataka za optimalne performanse. Ova podešavanja će varirati u zavisnosti od konfiguracije vašeg sistema, tipa korišćenja, broja korisnika i niza drugih faktora.
Iz perspektive operativnog sistema, neki sistemski parametri se mogu konfigurisati za MariaDB, o čemu ćemo sada diskutovati.
Podešavanja Linux kernela – IO Scheduler
Preporučeni IO planeri za MariaDB su noop i rok. Za proveru, koristite cat /sys/block/${DEVICE}/queue/scheduler
$ sudo cat /sys/block/sda/queue/scheduler [mq-deadline] kyber bfq none $
Privremena promena se može napraviti izdavanjem sledeće komande. Njen efekat, ukoliko postoji, biće odmah vidljiv na performanse sistema:
$ sudo echo noop > /sys/block/sda/queue/scheduler
Za trajnu promenu, konfigurišite ovo u GRUB konfiguracionoj datoteci, kao što je prikazano ispod u /etc/default/grub
, ponovo izradite GRUB i restartujte sistem.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"
Ograničenja resursa – Ograničenje otvorenih datoteka
Linux obično ograničava broj deskriptora datoteka koje svaki proces može da otvori. Za aktivan DB sistem, ovo ograničenje se može lako prekoračiti ili uticati na performanse. Na mnogim Linux sistemima, ovo ograničenje je po podrazumevanom 1024. Postoje opcije mekih i tvrdih ograničenja.
Za povećanje ovog ograničenja, dodajte sledeće redove u /etc/security/limits.conf
:
mysql soft nofile 65535 mysql hard nofile 65535
Nakon što se korisnik MySQL prijavi, biće potrebno ponovno pokretanje sistema da bi nova ograničenja bila vidljiva i primenjena. Ovo se može proveriti sa:
$ ulimit -Sn 65535 $ ulimit -Hn 65535
Ograničenja resursa – Veličina core fajla
Linux ograničava veličinu core fajlova, kao što je viđeno u prethodnom slučaju. Opet, postoje meka i tvrda ograničenja. Po podrazumevanoj vrednosti, meko ograničenje je postavljeno na 0, što onemogućava generisanje core fajlova. Za omogućavanje generisanja core fajlova (druge konfiguracije su potrebne za generisanje core dump), možemo povećati ovu vrednost u /etc/security/limits.conf
sa:
mysql soft core unlimited mysql hard core unlimited
Nakon ponovnog pokretanja sistema, korisnik mysql-a može videti nove vrednosti koristeći ulimit
komandu:
$ ulimit -Sc unlimited $ ulimit -Hc unlimited
Konfigurišite swappiness
Vrednost swap-a u Linux-u određuje verovatnoću da sistem zameniti stranicu iz memorije u swap prostor koji je konfigurisan na sistemu. Uobičajena podrazumevana vrednost je 60 i može se proveriti pomoću:
sysctl vm.swappiness
Vrednost se može kretati od 0 do 100, gde niža vrednost znači manju verovatnoću swap-a. Na serveru baze podataka koji koristi isključivo MariaDB, želimo da smanjimo ovu vrednost na 0 da bismo izbegli upotrebu swap prostora što je više moguće. Imajte na umu da podešavanje swap-a na 0 treba obaviti pažljivo imajući u vidu druge faktore dizajna sistema, jer u slučaju velike upotrebe memorije ili I/O opterećenja, postoji rizik da kernel uništi proces (Out Of Memory – OOM).
Pošto se preporučuje niska swappiness za baze podataka i za MariaDB baze, preporučuje se postavljanje vrednosti swappiness na 1. Možete dodati red ispod u /etc/sysctl.conf
da bi ova promena bila trajna:
vm.swappiness = 1
Promene će stupiti na snagu nakon ponovnog pokretanja sistema, mada uvek možete primeniti promene unapred koristeći sysctl
komandu:
sysctl -w vm.swappiness=1
Optimizacija sistema datoteka
Za MariaDB, najbolji sistemi datoteka na Linux-u su ext4, XFS i Btrfs, koji su uključeni u glavno jezgro Linux-a i široko su podržani. Ovi sistemi datoteka su dostupni u većini Linux distribucija. Svaki sistem datoteka ima svoje jedinstvene karakteristike, i treba ga odabrati na osnovu specifičnih zahteva, nakon adekvatne procene.
Dalje, nije verovatno da ćete morati da beležite vreme pristupa datotekama na serveru baze podataka. Možemo da onemogućimo ovu funkciju za poboljšanje performansi. Montirajte odgovarajući sistem datoteka sa opcijom noatime
ili dodajte ovu opciju u montiranje u datoteci /etc/fstab
da bi promene bile trajne.
Optimizacija baze podataka
Postoji nekoliko podešavanja internih za MariaDB, koji se mogu prilagoditi na osnovu zahteva i potreba.
Ovde ćemo diskutovati o nekoliko najvažnijih.
MariaDB se uglavnom konfiguriše pomoću my.cnf
datoteke.
Na Ubuntu sistemima, možete je naći na:
/etc/mysql/my.cnf
Dok je na CentOS-u, lokacija je:
/etc/my.cnf
Detaljna dokumentacija o promenljivim konfiguracije dostupna je ovde.
Mnogo zavisi od tipa mašine koju koristi MariaDB, kao što su MyISAM i InnoDB ili XtraDB. Svaka ima svoje prednosti i mane, a izbor zavisi od potreba baze podataka i aplikacije.
Trebalo bi da postavite innodb_buffer_pool_size
na približno 80% vaše memorije. Ovo osigurava da se 80% vašeg radnog skupa nalazi u memoriji.
Neki od drugih važnih parametara za podešavanje su:
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
Više detalja o podešavanju InnoDB ili XtraDB varijabli možete pronaći ovde. Pogledajte ovaj vodič za sve dostupne opcije podešavanja za MariaDB.
Ako ste zainteresovani, pogledajte ove resurse da biste naučili SQL i NoSQL.
Zaključak
MariaDB je jedan od popularnih izbora kada je reč o relacionim sistemima za upravljanje bazama podataka (RDBMS). Otvoreni kod i aktivna zajednica doprinose njegovoj popularnosti.
Za dalje informacije, pogledajte zvaničnu dokumentaciju, koja uključuje teme kao što su osnove SQL-a, migracija, administracija MariaDB-a, visoka dostupnost, podešavanje performansi, sistemi za skladištenje, programiranje i prilagođavanje. Takođe, možda biste želeli da onemogućite binarno logovanje ako ne koristite klaster.