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

Розглянемо, як інсталювати та налаштувати MariaDB, відому систему управління реляційними базами даних (СУБД), що є відгалуженням MySQL і має відкритий вихідний код.

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

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

MariaDB на Ubuntu

В Ubuntu 20.x MariaDB доступна безпосередньо з репозиторіїв системи. Для встановлення ми скористаємося менеджером пакетів 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, доступна зі стандартного репозиторію, є 5.x. Ми встановимо останню доступну версію.

Для цього нам потрібно додати додатковий yum репозиторій. MariaDB надає простий спосіб – скрипт `mariadb_repo_setup`. Щоб налаштувати репозиторій, виконайте наступні команди:

$ 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 нам потрібно вручну активувати та запустити сервіс.

Незалежно від ОС, виконайте наступні команди для запуску 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, видалення тестової бази даних та анонімних користувачів, а також перезавантаження привілеїв.

Для захисту 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
$

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

$ 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 потрібно налаштувати операційну систему та базу даних для досягнення оптимальної продуктивності. Ці налаштування залежать від конфігурації вашої системи, типу використання, кількості користувачів та інших факторів.

Розглянемо налаштування деяких параметрів операційної системи для 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 обмежує кількість файлових дескрипторів, які може відкрити кожен процес. Для активної бази даних це обмеження може вплинути на продуктивність. Зазвичай за замовчуванням ліміт становить 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 визначає, наскільки ймовірно, що система використовуватиме простір підкачки. Зазвичай значення за замовчуванням становить 60, що можна перевірити командою:

sysctl vm.swappiness

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

Для MariaDB рекомендується встановити значення swappiness 1. Додайте рядок нижче до `/etc/sysctl.conf`:

vm.swappiness = 1

Зміни набудуть чинності після перезавантаження системи. Щоб застосувати зміни негайно, виконайте:

sysctl -w vm.swappiness=1

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

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

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

Оптимізація бази даних

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

Розглянемо декілька з них.

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

В Ubuntu файл `my.cnf` знаходиться за адресою:

/etc/mysql/my.cnf

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

/etc/my.cnf

Детальну документацію можна знайти тут.

Багато залежить від механізму зберігання даних, який використовується, а саме 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, високу доступність, налаштування продуктивності, механізми зберігання даних, програмування та конфігурацію. Ви також можете вимкнути двійкове журналювання, якщо не використовуєте кластер.