Dowiedzmy się, jak zainstalować i skonfigurować MariaDB, popularny system zarządzania relacyjną bazą danych MySQL (RDBMS) typu open source.
Jest rozwijany przez społeczność i ma możliwość wsparcia komercyjnego. MariaDB została zaprojektowana, aby zachować wysoką kompatybilność z MySQL, chociaż istnieją pewne odchylenia.
W tym artykule omówimy instalację i konfigurację MariaDB na Ubuntu 20.xi CentOS 7.x/8.x, a na koniec omówimy kilka najlepszych praktyk dotyczących zabezpieczania i poprawiania jego wydajności.
MariaDB na Ubuntu
W Ubuntu 20.x MariaDB jest dostępna bezpośrednio z jej domyślnych repozytoriów. Do tego zadania użyjemy apt.
Najpierw zaktualizuj dane repozytoriów apt przez:
$ sudo apt update
Po zaktualizowaniu danych repozytorium uruchom:
$ sudo apt install mariadb-server
Spowoduje to zainstalowanie MariaDB i wymaganych pakietów. Potwierdź klawiszem 'Y’ dla wszelkich monitów, które możesz otrzymać podczas wykonywania poprzedniego polecenia.
Do you want to continue? [Y/n] Y
MariaDB na CentOS 7.x
W przypadku CentOS 7.x dostępna wersja MariaDB z domyślnego repozytorium CentOS to 5.x. Zamierzamy zainstalować najnowszą dostępną wersję MariaDB.
W tym celu musimy najpierw skonfigurować dodatkowe repozytorium yum. MariaDB zapewnia łatwy sposób korzystania ze skryptu mariadb_repo_setup. Aby uzyskać konfigurację repozytorium, uruchom następujące polecenia w systemie CentOS 7.x:
$ sudo yum install wget $ wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup $ chmod +x mariadb_repo_setup $ sudo ./mariadb_repo_setup
Ten skrypt skonfiguruje wymagane repozytorium yum, aby automatycznie zainstalować najnowszą wersję MariaDB. W chwili pisania tego artykułu jest to 10.x.
Lub, jeśli chcesz przejść ręczną drogą, możesz skonfigurować ręczne repozytorium yum, tworząc nowy plik repozytorium jako:
$ sudo vi /etc/yum.repos.d/MariaDB.repo
Następnie dodaj następujące szczegóły do pliku repozytorium i zapisz go:
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.5/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Teraz, aby zainstalować MariaDB, uruchom poniższe polecenie:
$ sudo yum install MariaDB-server
Potwierdź wszystkie monity pojawiające się podczas instalacji, wpisując „y”:
Is this ok [y/d/N]: y
To kończy instalację serwera MariaDB i pakietów zależnych.
MariaDB na CentOS 8.x
W przypadku CentOS 8.x dostępna wersja z domyślnych repozytoriów to 10.3 lub nowsza. MariaDB możemy zainstalować bezpośrednio za pomocą polecenia DNF:
sudo dnf install mariadb-server
W przeciwnym razie, aby uzyskać najnowszą dostępną wersję, możesz postępować zgodnie z ręcznym sposobem podanym w poprzedniej sekcji dla CentOS 7.x i to powinno sprawić, że będziesz działać.
Uruchamianie MariaDB
Na komputerze z systemem Ubuntu będziesz mieć usługę MariaDB działającą zaraz po instalacji, podczas gdy w przypadku CentOS musimy ręcznie włączyć i uruchomić odpowiednie usługi.
W każdym razie, w przypadku Ubuntu oraz CentOS, uruchom poniższe polecenia, aby uruchomić usługę MariaDB, włączyć ją podczas rozruchu, a także ją zweryfikować:
$ sudo systemctl start mariadb.service $ sudo systemctl enable mariadb.service $ sudo systemctl status mariadb.service
Wyjście:
$ 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. $
Zabezpieczanie MariaDB
W pierwszym kroku po instalacji MariaDB powinniśmy zabezpieczyć jej wdrożenie, ustawiając hasło roota, wyłączając zdalne logowanie roota, usuwając testową bazę danych oraz anonimowych użytkowników, a na koniec ponownie załadować uprawnienia.
Uruchom poniższe polecenie, aby wzmocnić MariaDB:
$ sudo mysql_secure_installation
Możesz postępować zgodnie z domyślnymi monitami z sugerowanymi działaniami, chyba że masz określone wymagania dotyczące odstępstwa.
Wyjście:
$ 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! $
Tutaj użyjemy uwierzytelniania systemu, więc nie ustawiaj osobnego hasła roota dla MariaDB, ponieważ jest ono już bezpieczne. Jeśli potrzebujesz, zawsze możesz również ustawić osobne hasło roota.
Walidacja konfiguracji
Aby zweryfikować konfigurację MariaDB, uruchom (określ hasło, które ustawiłeś podczas uruchamiania mysql_secure_installation lub, jeśli pominięto w tym czasie, użyj poświadczeń administratora systemu):
$ 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żesz założyć nowe konto administratora zamiast roota, jak pokazano poniżej (zmień wartość hasła na to, które zamierzasz ustawić dla konta administratora):
$ 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 $
Zweryfikuj dostęp przy użyciu nowego administratora jako (wprowadź hasło ustawione w poprzednim kroku):
$ 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 $
Optymalizacja systemu operacyjnego
Po zainstalowaniu i zabezpieczeniu konfiguracji MariaDB należy podjąć działania w celu dostrojenia systemu operacyjnego i bazy danych w celu uzyskania optymalnej wydajności. To dostrojenie będzie się różnić w zależności od konfiguracji systemu, typu użytkowania, liczby użytkowników i wielu innych czynników.
Z perspektywy systemu operacyjnego niektóre parametry systemowe można skonfigurować dla MariaDB, co omówimy teraz.
Ustawienia jądra Linux – Harmonogram IO
Zalecane harmonogramy IO dla MariaDB to noop i termin. Aby to sprawdzić, użyj cat /sys/block/${DEVICE}/queue/scheduler
$ sudo cat /sys/block/sda/queue/scheduler [mq-deadline] kyber bfq none $
Tymczasowej zmiany można dokonać, wydając następujące polecenie, a jej efekt, jeśli zaistnieje, będzie natychmiastowy dla wydajności systemu:
$ sudo echo noop > /sys/block/sda/queue/scheduler
Aby był trwały, musisz skonfigurować go w pliku konfiguracyjnym GRUB, jak pokazano poniżej w /etc/default/grub , przebudować GRUB i ponownie uruchomić system.
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"
Limity zasobów — limit otwartych plików
Linux zwykle ogranicza liczbę deskryptorów plików, które każdy proces może otworzyć. W przypadku aktywnego systemu DB ten limit może łatwo przekroczyć lub wpłynąć na wydajność. W wielu systemach Linux limit ten wynosi domyślnie 1024. Ponadto istnieje opcja limitów miękkich i twardych.
Aby zwiększyć limit, możesz dodać następujące wiersze do pliku /etc/security/limits.conf:
mysql soft nofile 65535 mysql hard nofile 65535
Konieczne będzie ponowne uruchomienie systemu po tym, jak użytkownik mysql będzie mógł zobaczyć i wykorzystać nowe limity. Można to sprawdzić jako:
$ ulimit -Sn 65535 $ ulimit -Hn 65535
Limity zasobów — rozmiar pliku podstawowego
Linux ogranicza rozmiar plików podstawowych, jak w poprzednim przypadku. Ponownie ma to miękki i twardy limit, a domyślnie miękki limit jest ustawiony na 0, co skutecznie wyłącza generowanie plików rdzenia. Aby umożliwić generowanie plików podstawowych (inne konfiguracje potrzebne do generowania zrzutu rdzenia), możemy zwiększyć tę wartość w /etc/security/limits.conf jako:
mysql soft core unlimited mysql hard core unlimited
Po ponownym uruchomieniu systemu użytkownik mysql będzie mógł zobaczyć nowe wartości za pomocą polecenia ulimit jako:
$ ulimit -Sc unlimited $ ulimit -Hc unlimited
Skonfiguruj zamianę
Wartość Swappiness w systemie Linux określa prawdopodobieństwo, że system zamieni stronę z pamięci na przestrzeń wymiany skonfigurowaną w systemie. Zwykle domyślną wartością jest 60, którą można sprawdzić z:
sysctl vm.swappiness
Jego wartość może wynosić od 0 do 100, gdzie niższa wartość oznacza mniejsze prawdopodobieństwo zamiany. Na serwerze bazy danych, na którym działa tylko MariaDB, chcielibyśmy zmniejszyć tę wartość do 0, aby w jak największym stopniu uniknąć używania wymiany. Zwróć uwagę, że ustawienie wartości swappiness na 0 powinno być wykonywane ostrożnie, biorąc pod uwagę inne czynniki projektowe systemu, ponieważ w przypadku dużego użycia pamięci lub obciążenia we/wy istnieje ryzyko zabicia procesu braku pamięci (OOM) przez jądro.
Ponieważ niskie ustawienie swappiness jest zalecane dla obciążeń baz danych i jako takie dla baz danych MariaDB, zaleca się ustawienie swappiness na wartość 1. Możesz dodać poniższy wiersz w /etc/sysctl.conf, aby ta zmiana była trwała:
vm.swappiness = 1
Zmiany zaczną obowiązywać po ponownym uruchomieniu systemu, chociaż zawsze możesz to zrobić wcześniej za pomocą polecenia sysctl:
sysctl -w vm.swappiness=1
Optymalizacje systemu plików
W przypadku MariaDB najlepsze systemy plików Linuksa są ogólnie uważane za ext4, XFS i Btrfs, które są zawarte w głównym jądrze Linuksa i są szeroko obsługiwane. Te systemy plików są dostępne w większości dystrybucji Linuksa. Każdy system plików ma swoje unikalne właściwości i funkcje i może być wybrany na podstawie wymagań po odpowiednim przejrzeniu.
Co więcej, jest mało prawdopodobne, że będziesz musiał rejestrować czas dostępu do pliku na serwerze bazy danych. Możemy to wyłączyć, aby poprawić wydajność. Możesz zamontować odpowiedni system plików za pomocą opcji noatime lub dodać go w opcjach montowania w pliku /etc/fstab, aby był trwały.
Optymalizacja bazy danych
Istnieje kilka strojów wewnętrznych działania MariaDB, które można dostosować do własnych wymagań i potrzeb.
Kilka z nich omówimy tutaj.
MariaDB jest w większości konfigurowana przez plik my.cnf.
W Ubuntu możesz znaleźć my.cnf pod adresem:
/etc/mysql/my.cnf
Podczas gdy na CentOS znajduje się pod adresem:
/etc/my.cnf
Szczegółową dokumentację dotyczącą dostępnych zmiennych do strojenia w pliku konfiguracyjnym można znaleźć tutaj tutaj.
Dużo zależy też od rodzaju silnika wykorzystywanego przez MariaDB, czyli MyISAM i InnoDB czy XtraDB. Oba mają własne zestawy zalet i wad, a wybór jednego zależy od wymagań bazy danych i aplikacji.
Powinniśmy ustawić innodb_buffer_pool_size na około 80% twojej pamięci. Gwarantuje to, że 80% zestawu roboczego znajduje się w pamięci.
Niektóre z innych ważnych parametrów dostrajalnych to:
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
Więcej szczegółów na temat dostrajania zmiennych InnoDB lub XtraDB można znaleźć tutaj. Odwołaj się do tego przewodnik dla wszystkich dostępnych opcji dostrajania MariaDB.
Jeśli jesteś zainteresowany, zapoznaj się z tymi zasobami, aby nauczyć się SQL i NoSQL.
Wniosek
MariaDB to jeden z popularnych wyborów, jeśli chodzi o relacyjny DBMS. Bycie open-source z różnorodną społecznością jeszcze bardziej do tego przyczynia.
Aby dowiedzieć się więcej, zapoznaj się z jego dokumentacja który obejmuje takie tematy, jak podstawowy SQL, migracja, administracja MariaDB, wysoka dostępność, dostrajanie wydajności, aparaty pamięci masowej, programowanie i dostosowywanie. Możesz również wyłączyć rejestrowanie binarne, jeśli nie używasz klastra.