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