Wyszukiwanie w witrynie

Jak zainstalować, zabezpieczyć i dostroić wydajność serwera bazy danych MariaDB


Serwer bazy danych jest krytycznym elementem infrastruktury sieciowej niezbędnej dla współczesnych aplikacji. Bez możliwości przechowywania, odzyskiwania, aktualizowania i usuwania danych (w razie potrzeby) użyteczność i zakres aplikacji internetowych i komputerowych stają się bardzo ograniczone.

Ponadto umiejętność instalowania, zarządzania i konfigurowania serwera bazy danych (tak, aby działał zgodnie z oczekiwaniami) jest niezbędną umiejętnością, którą musi posiadać każdy administrator systemu.

W tym artykule pokrótce omówimy, jak zainstalować i zabezpieczyć serwer bazy danych MariaDB, a następnie wyjaśnimy, jak go skonfigurować.

Instalowanie i zabezpieczanie serwera MariaDB

W CentOS 7.x MariaDB zastąpiła MySQL, który nadal można znaleźć w Ubuntu (wraz z MariaDB). To samo dotyczy openSUSE.

Dla zachowania zwięzłości, w tym samouczku będziemy używać tylko MariaDB, ale pamiętaj, że oprócz różnych nazw i filozofii programowania, oba Relacyjne systemy zarządzania bazami danych (RDBMS w skrócie) są prawie identyczne.

Oznacza to, że polecenia po stronie klienta są takie same zarówno w MySQL, jak i MariaDB, a pliki konfiguracyjne mają nazwy i znajdują się w tych samych miejscach.

Aby zainstalować MariaDB, wykonaj:

--------------- On CentOS/RHEL 7 and Fedora 23 --------------- 
yum update && yum install mariadb mariadb-server # CentOS 

--------------- On Debian and Ubuntu --------------- 
sudo aptitude update && sudo aptitude install mariadb-client mariadb-server 

--------------- On openSUSE --------------- 
zypper update && zypper install mariadb mariadb-tools # openSUSE

Pamiętaj, że w Ubuntu zostaniesz poproszony o podanie hasła użytkownika root RDBMS.

Po zainstalowaniu powyższych pakietów upewnij się, że usługa bazy danych jest uruchomiona i została aktywowana, aby uruchamiała się podczas rozruchu (w CentOS i openSUSE będziesz musiał wykonać tę operację ręcznie , podczas gdy w Ubuntu proces instalacji zajmie się już tym za Ciebie):

--------------- On CentOS/RHEL 7 and Fedora 23 --------------- 
systemctl start mariadb && systemctl enable mariadb 

--------------- On openSUSE --------------- 
systemctl start mysql && systemctl enable mysql

Następnie uruchom skrypt mysql_secure_installation. Ten proces pozwoli Ci:

  1. ustaw/zresetuj hasło dla użytkownika root RDBMS
  2. usuń anonimowe loginy (umożliwiając w ten sposób logowanie się do RDBMS tylko użytkownikom posiadającym ważne konto)
  3. wyłącz dostęp roota dla komputerów innych niż localhost
  4. usuń testową bazę danych (do której każdy może uzyskać dostęp)
  5. aktywuj zmiany powiązane z punktami od 1 do 4.

Bardziej szczegółowy opis tego procesu można znaleźć w sekcji Po instalacji w artykule Instalowanie bazy danych MariaDB w RHEL/CentOS/Fedora i Debian/Ubuntu.

Konfiguracja serwera MariaDB

Domyślne opcje konfiguracyjne odczytywane są z następujących plików w podanej kolejności: /etc/mysql/my.cnf, /etc/my.cnf, oraz ~ /.my.cnf.

Najczęściej istnieje tylko plik /etc/my.cnf. To w tym pliku ustawimy ustawienia dla całego serwera (które można zastąpić tymi samymi ustawieniami w ~/.my.cnf dla każdego użytkownika).

Pierwszą rzeczą, na którą musimy zwrócić uwagę w przypadku my.cnf, jest to, że ustawienia są zorganizowane w kategorie (lub grupy), gdzie każda nazwa kategorii jest ujęta w nawiasy kwadratowe.

Konfiguracje systemu serwerowego podane są w sekcji [mysqld], gdzie zazwyczaj w poniższej tabeli znajdziesz tylko dwa pierwsze ustawienia. Reszta to inne często używane opcje (jeśli jest to wskazane, zmienimy wartość domyślną na wybraną przez nas niestandardową):

Setting and description

Wartość domyślna

datadir is the directory where the data files are stored.

datadir=/var/lib/mysql

socket indicates the name and location of the socket file that is used for local client connections. Keep in mind that a socket file is a resource that is utilized to pass information between applications.

socket=/var/lib/mysql/mysql.sock

bind_address is the address where the database server will listen on for TCP/IP connections. If you need your server to listen on more than one IP address, leave out this setting (0.0.0.0 which means it will listen on all IP addresses assigned to this specific host).

We will change this to instruct the service to listen only on its main address (192.168.0.13):

bind_address=192.168.0.13

bind_address=0.0.0.0

port represents the port where the database server will be listening.

We will replace the default value(3306) with 20500 (but we need to make sure nothing else is using that port):
port=20500

While some people will argue that security through obscurity is not good practice, changing the default application ports for higher ones is a rudimentary -yet effective- method to discourage port scans.

port=3306

innodb_buffer_pool_size is the buffer pool (in bytes) of memory that is allocated for data and indexes that are accessed frequently when using Innodb (which is the default in MariaDB) or XtraDB as storage engine.

We will replace the default value with 256 MB:

innodb_buffer_pool_size=256M

innodb_buffer_pool_size=134217728

skip_name_resolve indicates whether hostnames will be resolved or not on incoming connections. If set to 1, as we will do in this guide, only IP addresses.

Unless you require hostnames to determine permissions, it is advisable to disable this variable (in order to speed up connections and queries) by setting its value to 1:

skip_name_resolve=1

skip_name_resolve=0

query_cache_size represents the size (in bytes) available to the query cache in disk, where the results of SELECT queries are stored for future use when an identical query (to the same database and using the same protocol and same character set) is performed.

You should choose a query cache size that matches your needs based on 1) the number of repetitive queries, and 2) the approximate number of records those repetitive queries are expected to return. We will set this value to 100 MB for the time being:

query_cache_size=100M

query_cache_size=0 (co oznacza, że jest domyślnie wyłączona)

max_connections is the maximum number of simultaneous client connections to the server. We will set this value to 30:
max_connections=30Each connection will use a thread, and thus will consume memory. Take this fact into account while setting max_connections.

max_connections=151

thread_cache_size indicates the numbers of threads that the server allocates for reuse after a client disconnects and frees thread(s) previously in use. In this situation, it is cheaper (performance-wise) to reuse a thread than instantiating a new one.

Again, this depends on the number of connections you are expecting. We can safely set this value to half the number of max_connections:

thread_cache_size=15

thread_cache_size=0 (domyślnie wyłączone)

W CentOS będziemy musieli poinformować SELinux, aby zezwolił MariaDB na nasłuchiwanie na niestandardowym porcie (20500 ) przed ponownym uruchomieniem usługi:

yum install policycoreutils-python
semanage port -a -t mysqld_port_t -p tcp 20500

Następnie uruchom ponownie usługę MariaDB.

Strojenie wydajności MariaDB

Aby pomóc nam w sprawdzeniu i dostrojeniu konfiguracji zgodnie z naszymi konkretnymi potrzebami, możemy zainstalować mysqltuner (skrypt, który wyświetli sugestie dotyczące poprawy wydajności naszego serwera bazy danych i zwiększenia jego stabilności):

wget https://github.com/major/MySQLTuner-perl/tarball/master
tar xzf master

Następnie zmień katalog na folder wypakowany z archiwum tar (dokładna wersja może być inna w Twoim przypadku):

cd major-MySQLTuner-perl-7dabf27

i uruchom go (zostaniesz poproszony o podanie danych logowania do konta administracyjnego MariaDB)

./mysqltuner.pl

Dane wyjściowe skryptu same w sobie są bardzo interesujące, ale przejdźmy na sam dół, gdzie zmienne do dostosowania są wymienione z zalecanymi wartościami:

Ustawienie query_cache_type wskazuje, czy pamięć podręczna zapytań jest wyłączona (0), czy włączona (1). W tym przypadku mysqltuner zaleca nam jego wyłączenie.

Dlaczego więc zalecamy dezaktywację go teraz? Powodem jest to, że pamięć podręczna zapytań jest przydatna głównie w scenariuszach z dużą ilością odczytu/małego zapisu (co nie jest w naszym przypadku, ponieważ właśnie zainstalowaliśmy serwer bazy danych).

OSTRZEŻENIE: Przed wprowadzeniem zmian w konfiguracji serwera produkcyjnego zdecydowanie zalecamy skonsultowanie się z administratorem bazy danych, aby upewnić się, że zalecenie wydane przez mysqltuner nie będzie miało negatywnego wpływu na istniejącym ustawieniu.

Streszczenie

W tym artykule wyjaśniliśmy, jak skonfigurować serwer bazy danych MariaDB po jego zainstalowaniu i zabezpieczeniu. Zmienne konfiguracyjne wymienione w powyższej tabeli to tylko kilka ustawień, które warto wziąć pod uwagę podczas przygotowywania serwera do użytku lub podczas jego późniejszego dostrajania. Przed wprowadzeniem zmian zawsze zapoznaj się z oficjalną dokumentacją MariaDB lub zapoznaj się z naszymi wskazówkami dotyczącymi dostrajania wydajności MariaDB:

Nie przegap: 15 przydatnych wskazówek dotyczących dostrajania i optymalizacji wydajności MariaDB

Jak zawsze, nie wahaj się dać nam znać, jeśli masz jakieś pytania lub komentarze dotyczące tego artykułu. Czy są jakieś inne ustawienia serwera, których chcesz używać? Podziel się z resztą społeczności, korzystając z poniższego formularza komentarza.