Як встановити та налаштувати MariaDB на Ubuntu та CentOS

Давайте дізнаємося, як встановити та налаштувати MariaDB, популярну систему керування реляційними базами даних MySQL (RDBMS) із відкритим кодом.

Він розроблений спільнотою та має можливість комерційної підтримки. MariaDB має залишатися дуже сумісним з MySQL, хоча є деякі відхилення.

У цій статті ми розглянемо встановлення та конфігурацію MariaDB на Ubuntu 20.x і CentOS 7.x/8.x, а наприкінці розглянемо деякі найкращі практики щодо захисту та покращення її продуктивності.

MariaDB на Ubuntu

У Ubuntu 20.x MariaDB доступна безпосередньо зі сховищ за замовчуванням. Для цього завдання ми використаємо apt.

Спочатку оновіть дані репозиторіїв apt:

$ sudo apt update

Після оновлення даних сховища виконайте:

$ sudo apt install mariadb-server

Це встановить MariaDB і необхідні пакети. Підтвердьте за допомогою «Y» для будь-яких запитів, які ви можете отримати під час виконання попередньої команди.

Do you want to continue? [Y/n] Y

MariaDB на CentOS 7.x

Для CentOS 7.x доступною версією MariaDB зі сховища CentOS за замовчуванням є 5.x. Ми збираємося встановити останню доступну версію MariaDB.

Для цього нам потрібно спочатку налаштувати додаткове сховище yum. MariaDB забезпечує простий спосіб використання сценарію mariadb_repo_setup. Щоб отримати налаштування сховища, виконайте такі команди у вашій системі 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

Цей сценарій налаштує необхідний репозиторій yum для автоматичного встановлення останньої версії MariaDB. На момент написання цієї статті це 10.x.

Або у випадку, якщо ви хочете піти вручну, ви можете налаштувати ручне сховище yum, створивши новий файл репо як:

$ sudo vi /etc/yum.repos.d/MariaDB.repo

Потім додайте такі відомості до файлу репо та збережіть його:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Тепер, щоб інсталювати MariaDB, виконайте наведену нижче команду:

$ sudo yum install MariaDB-server

Підтвердьте будь-які підказки, які з’являються під час встановлення, ввівши «y»:

Is this ok [y/d/N]: y

На цьому встановлення сервера MariaDB і залежних пакетів завершено.

MariaDB на CentOS 8.x

Для CentOS 8.x доступною версією зі сховищ за замовчуванням є 10.3 або новіша. Ми можемо безпосередньо встановити MariaDB за допомогою команди DNF:

sudo dnf install mariadb-server

В іншому випадку, щоб отримати останню доступну версію, ви можете виконати ручний спосіб, як описано в попередньому розділі для CentOS 7.x, і це повинно допомогти вам працювати.

Запуск MariaDB

На комп’ютері Ubuntu у вас буде запущена служба MariaDB відразу після інсталяції, тоді як для CentOS ми повинні вручну вмикати та запускати відповідні служби.

У будь-якому випадку, для Ubuntu, а також для CentOS, виконайте наведені нижче команди, щоб запустити службу MariaDB, увімкнути під час завантаження, а також перевірити її:

$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
$ sudo systemctl status mariadb.service

Вихід:

$ 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.
$

Захист MariaDB

У якості першого кроку після інсталяції MariaDB ми повинні забезпечити її розгортання, встановивши пароль root, вимкнувши віддалений вхід root, видаливши тестову базу даних, а також анонімних користувачів і, нарешті, перезавантаживши привілеї.

  5 способів ефективно використати свій застарілий iPhone 4

Виконайте наведену нижче команду, щоб посилити MariaDB:

$ sudo mysql_secure_installation

Ви можете виконувати підказки за замовчуванням із запропонованими діями, якщо у вас немає особливої ​​вимоги щодо відхилення.

Вихід:

$ 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!
$

Тут ми будемо використовувати автентифікацію системи, тому не встановлюйте окремий пароль root для MariaDB, оскільки він уже безпечний. Якщо вам потрібно, ви завжди можете встановити окремий пароль root.

Перевірка налаштувань

Щоб перевірити налаштування MariaDB, запустіть (вкажіть пароль, який ви встановили під час запуску mysql_secure_installation або, якщо пропущено в цей момент, скористайтеся обліковими даними користувача root вашої системи):

$ 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
$

Ви можете налаштувати новий обліковий запис адміністратора замість кореневого, як показано нижче (змініть значення пароля на той, який ви збираєтеся встановити для облікового запису адміністратора):

$ 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
$

Перевірте доступ із новим адміністратором як (введіть пароль, установлений у попередньому кроці):

$ 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
$

Оптимізація ОС

Після інсталяції та захисту налаштування MariaDB ви повинні вжити заходів для налаштування ОС і бази даних для оптимальної продуктивності. Це налаштування залежить від конфігурації вашої системи, типу використання, кількості користувачів і ряду інших факторів.

  Як використовувати секретні смайли Microsoft Teams

З точки зору ОС, деякі системні параметри можна налаштувати для MariaDB, які ми зараз обговоримо.

Налаштування ядра Linux – планувальник вводу-виведення

Рекомендованими планувальниками вводу-виводу для MariaDB є noop і deadline. Щоб перевірити, використовуйте cat /sys/block/${DEVICE}/queue/scheduler

$ sudo cat /sys/block/sda/queue/scheduler
[mq-deadline] kyber bfq none
$

Тимчасову зміну можна внести, виконавши наведену нижче команду, і її вплив, якщо такий є, негайно позначиться на продуктивності системи:

$ sudo echo noop > /sys/block/sda/queue/scheduler

Щоб зробити його постійним, вам потрібно буде налаштувати його у файлі конфігурації GRUB, як показано нижче в /etc/default/grub, перебудувати GRUB і перезавантажити систему.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

Обмеження ресурсів – Ліміт відкритих файлів

Linux зазвичай обмежує кількість файлових дескрипторів, які може відкрити кожен процес. Для активної системи БД це обмеження може легко перевищити або вплинути на продуктивність. У багатьох системах Linux це обмеження за умовчанням дорівнює 1024. Крім того, є опція м’яких і жорстких обмежень.

Щоб збільшити ліміт, ви можете додати такі рядки у свій /etc/security/limits.conf:

mysql soft nofile 65535
mysql hard nofile 65535

Після того, як користувач mysql зможе побачити та використати нові обмеження, потрібно буде перезавантажити систему. Це можна перевірити як:

$ ulimit -Sn
65535
$ ulimit -Hn
65535

Обмеження ресурсів – розмір основного файлу

Як показано в попередньому випадку, Linux обмежує розмір основних файлів. Знову ж таки, це має м’яке та жорстке обмеження, і за замовчуванням м’яке обмеження встановлено на 0, що фактично вимикає створення основного файлу. Щоб дозволити створення основного файлу (інші конфігурації, необхідні для створення дампа ядра), ми можемо збільшити це значення в /etc/security/limits.conf як:

mysql soft core unlimited
mysql hard core unlimited

Після перезавантаження системи користувач mysql зможе побачити нові значення за допомогою команди ulimit як:

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

Налаштувати Swappiness

Значення Swappiness у Linux визначає, наскільки ймовірно, що система замінить сторінку з пам’яті на простір підкачки, налаштований у системі. Зазвичай стандартним значенням є 60, яке можна перевірити за допомогою:

sysctl vm.swappiness

Його значення може коливатися від 0 до 100, де нижче значення означає меншу ймовірність обміну. На сервері бази даних, на якому працює лише MariaDB, ми хотіли б зменшити це значення до 0, щоб уникнути використання swap, наскільки це можливо. Зауважте, що встановлювати значення swappiness 0 слід з обережністю, враховуючи інші фактори конструкції системи, оскільки у випадку високого використання пам’яті або навантаження вводу-виводу існує ймовірність знищення процесу Out Of Memory (OOM) ядром.

  Контролюйте свій веб-сайт та інфраструктуру додатків за допомогою Uptime Kuma [Self-Hosted Solution]

Оскільки для робочих навантажень бази даних і, як таке, для баз даних MariaDB рекомендовано низьке значення swappiness, рекомендується встановити для swappiness значення 1. Ви можете додати рядок нижче в /etc/sysctl.conft, щоб зробити цю зміну постійною:

vm.swappiness = 1

Зміни набудуть чинності після перезавантаження системи, хоча ви завжди можете зробити це заздалегідь за допомогою команди sysctl:

sysctl -w vm.swappiness=1

Оптимізація файлової системи

Для MariaDB найкращими файловими системами Linux зазвичай вважаються ext4, XFS і Btrfs, які включені в основне ядро ​​Linux і широко підтримуються. Ці файлові системи доступні в більшості дистрибутивів Linux. Кожна файлова система має свої унікальні властивості та особливості та може бути обрана на основі вимог після належного перегляду.

Крім того, малоймовірно, що вам знадобиться записувати час доступу до файлу на сервері бази даних. Ми можемо вимкнути це, щоб покращити продуктивність. Ви можете змонтувати відповідну файлову систему за допомогою параметра noatime або додати її в параметри монтування у файлі /etc/fstab, щоб зробити її постійною.

Оптимізація БД

Є кілька внутрішніх параметрів функціонування MariaDB, які можна налаштувати відповідно до своїх вимог і потреб.

Ми обговоримо кілька з них тут.

MariaDB здебільшого налаштовується за допомогою файлу my.cnf.

В Ubuntu ви можете знайти my.cnf за адресою:

/etc/mysql/my.cnf

У CentOS він розташований за адресою:

/etc/my.cnf

Докладну документацію про те, які змінні доступні для налаштування у файлі конфігурації, можна знайти тут.

Багато також залежить від типу механізму, який використовує MariaDB, а саме MyISAM і InnoDB або XtraDB. Обидва мають свої переваги та недоліки, і вибір залежить від бази даних і вимог програми.

Ми повинні встановити для innodb_buffer_pool_size приблизно 80% вашої пам’яті. Це гарантує, що 80% вашого робочого набору знаходиться в пам’яті.

Деякі з інших важливих настроюваних параметрів:

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

Докладніше про налаштування змінних InnoDB або XtraDB можна знайти тут. Зверніться до цього керівництво для всіх доступних параметрів налаштування MariaDB.

Якщо ви зацікавлені, перегляньте ці ресурси, щоб дізнатися про SQL і NoSQL.

Висновок

MariaDB є одним із популярних варіантів, коли справа стосується реляційної СУБД. Відкритий код із різноманітною спільнотою додає цьому ще більше.

Щоб дізнатися більше, зверніться до його документація який включає такі теми, як базовий SQL, міграція, адміністрування MariaDB, висока доступність, налаштування продуктивності, механізми зберігання, програмування та налаштування. Ви також можете вимкнути двійкове журналювання, якщо не використовуєте кластер.