У цій статті я розгляну особливості установки, базової налаштування і оптимізації сервера баз даних MariaDB. Переді мною стояло завдання установітьc MariaDB і провести базове налаштування на Linux CentOS 7. Так як це актуальне питання, я сподіваюся стаття буде вам корисна. В кінці статті я приведу декілька прикладів конфігураційних файлів, а ви за допомогою їх зможете підібрати параметри під свій сервер.

встановлення та налаштування mariadb в linux centos

Установка MariaDB в CentOS

З недавнього часу MariaDB входить в стандартний для CentOS 7 репозиторій base, але в даному репозиторії міститься версія 5.5. Ця версія вже не актуальна, в ній є проблеми з продуктивністю і немає повнотекстового пошуку в InnoDB. На момент написання статті актуальна версія MariaDB – 10.4, тому підключившись до нашого Linux сервера по ssh ми для початку підключимо репозиторій розробника mariadb.org і після запустимо установку сервера БД.

Я звик працювати з файлами через редактор nano, встановлюємо його через yum:

yum install nano -y

І відкриваємо файл сховища для редагування:

nano /etc/yum.repos.d/mariadb.repo

І додаємо туди наступну інформацію:

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

Зберігаємо файл і запускаємо установку:

yum install MariaDB-server MariaDB-client -y

Установка закінчена, тепер потрібно додати сервіс в автозавантаження і запустити:

systemctl start mariadb
systemctl enable mariadb

Перевіряємо статус сервісу:

systemctl status mariadb

systemctl status mariadb - перевірка служби в linux centos

Сервіс mariadb запущений і працює, значить можна продовжити настройку.

Захист і безпека MariaDB

Після того, як ми встановили і запустили MariaDB, можемо перейти до налаштувань безпеки. Запускаємо вбудований сценарій:

/usr/bin/mysql_secure_installation

Даний сценарій детально описує кожен крок і детально зупинятися на кожному з них ми не будемо. Спочатку він запросить root-пароль, але після початкової установки його немає і тому ми натискаємо enter і на наступному етапі задаємо складний пароль (від цього залежить наскільки безпечним, буде ваш сервер). Після можна до кінця виконання сценарію натискати «enter», в процесі будуть видалені анонімні користувачі, віддалений root-логін, а також тестові таблиці і будуть перезавантажувались привілеї.

Для підключення до mariadb сервера потрібно створити правила в Linux файервол за допомогою iptables:

iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables-save > /etc/sysconfig/iptables

Опціонально, можна дозволити вихідні підключення до інших баз MariaDB.

iptables -I OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

Перевірка з’єднання з сервером MariaDB

Потрібно переконатися, що установка MariaDB виконана успішно.

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

mysqladmin version

Команда видасть результат:

mysqladmin Ver 9.1 Distrib 10.4.7-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Server version 10.4.7-MariaDB
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/lib/mysql/mysql.sock
Uptime: 11 min 35 sec
Threads: 7 Questions: 26 Slow queries: 0 Opens: 20 Flush tables: 1 Open tab

Це означає, що установка MariaDB виконана успішно, база даних працює і доступна.

Можна підключитися до консолі сервера maridb для інтерактивного виконання sql команд:

mysql -u root -p

Налаштування конфігураційного файлу MariaDB

Зазвичай після установки MariaDB я додаю в конфігураційний файл /etc/my.cnf свою стандартну конфігурацію, яка працює на більшій кількості серверів і поки проблем з базами не виникало. Очистимо файл my.cnf і додамо в нього наступне:

[mysqld]
local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
max_allowed_packet = 128M
sql_mode = ""
log-error = /var/log/mysql-error.log

# Cache parameters
query_cache_size = 16M
table_open_cache = 4096
thread_cache_size = 16
key_buffer_size = 8M
thread_stack = 256K
join_buffer_size = 2M
sort_buffer_size = 2M

# Parameters for temporary tables
tmpdir = /tmp
max_heap_table_size = 32M
tmp_table_size = 32M

# InnoDB parameters
innodb_file_per_table
innodb_buffer_pool_size = 32M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_use_native_aio = 0
transaction-isolation = READ-COMMITTED
character-set-server = utf8
collation-server = utf8_unicode_ci
init-connect = "SET NAMES utf8 COLLATE utf8_unicode_ci"
skip-name-resolve

[mysqldump]
quick
quote-names
max_allowed_packet = 128M
default-character-set = utf8

[mysql]

[isamchk]
key_buffer = 16M

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

Для загального розуміння розберемо основні параметри конфігураційного файлу my.cnf:

  • datadir – каталог для зберігання файлів БД;
  • tmpdir – каталог для зберігання тимчасових файлів;
  • пропустити-ім’я-вирішення – відключає DNS резолвінг;
  • максимально_дозволений_пакет – максимальний розмір пакета. Якщо в БД використовуються поля blob, потрібно виставляти значення не менше ніж найбільше поле;
  • max_connections – максимальна кількість відкритих з’єднань, параметр визначає, скільки клієнтів одночасно можуть працювати з сервером БД;
  • Розділ # Параметри кешу – все що пов’язано з кешем запитів, встановлювати занадто високі значення не рекомендується, так як споживання ресурсів сервером БД стане рости;
  • Розділ # Параметри InnoDB – все що пов’язано з таблицями innodb;
  • innodb_buffer_pool_size – буфер кеша для даних і індексів, якщо на сервері розміщено 1-2 проекту, виставляйте значення рівне 70-80% доступної оперативної пам’яті;
  • innodb_flush_method – для Linux ставимо значення O_DIRECT, це відключить кешування на рівні ОС;
  • innodb_flush_log_at_trx_commit – цей параметр впливає на швидкість запису innoDB таблиць. Поставтеся серйозно до даного параметру, виставляючи значення 0, ви отримуєте більшу продуктивність, але ризик втрати даних зростає. Я вважаю за краще встановлювати значення 2, так як великий приріст в роботі сервера БД я не помічав, а безпека понад усе.

Оптимізація і тюнінг продуктивності MariaDB

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

встановимо скрипт Tuning-Primer.sh:

yum install bc net-tools -y

Викачуємо скрипт:

wget https://launchpadlibrarian.net/78745738/tuning-primer.sh

Даємо права:

chmod +x tuning-primer.sh

запускаємо:

./tuning-primer.sh

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

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

тюнінг mariadb за допомогою Tuning-Primer.sh

Даний параметр можна змінити, як і в файлі my.cnf так і через консоль, я збавив до 10 і скрипт мене похвалив:

За допомогою подібних маніпуляцій можна привести до ідеалу роботу вашого сервера БД.

Хочу зауважити, що рекомендоване безперервний час роботи сервера БД не менше 48 годин, тоді інформація буде точнішою і на основі цього вам потрібно буде провести тюнінг.

На мій конфігураційного файлу, можна додати секцію для активації журналу повільних запитів, це допоможе вам аналізувати роботу ваших проектів. У секцію «mysqld» додаємо:

slow_query_log = 1 # включаем лог медленных запросов
long_query_time = 5 # устанавливаем время в секундах
slow_query_log_file = /var/log/slow-query.log # имя и путь к лог файлу медленных запросов
log_queries_not_using_indexes # записывать ли в лог файл запросы, которые не используют индексы

Так само потрібно створити лог файли, для помилок роботи MariaDB і журналу повільних запитів:

touch /var/log/mysql-error.log
touch /var/log/slow-query.log

Ми перезапускаємо послугу:

systemctl restart mariadb

Переглянути журнал повільних запитів можна відкривши файл /var/log/slow-query.log або ж перевіряти його в режимі реального часу:

tail -f /var/log/slow-query.log

Таким чином ви можете аналізувати запити до БД вашого проекту і на основі цього проводити аудит.

Після будь-яких змін у налаштуваннях БД потрібно перевіряти конфігурацію на наявність помилок:

Обов’язково після всіх робіт з налаштуванням баз даних виконуйте перевірку статусу на предмет помилок виконуючи команду:

systemctl status mariadb -l

Основні команди для роботи в консолі MariaDB

Нижче наведені основні команди cli, які найчастіше доводиться використовувати адміністратору при роботі в консолі maridb.

Для локального входу в консоль MariaDB, виконайте:

mysql -u root -p

Для віддаленого підключення до сервера БД MariaDB:

mysql -u root -p -h 10.1.1.20

Корисні команди:

create database db1; – створити БД з ім’ям db1

show databases; – вивести список створених БД

use db1; – увійти в БД з ім’ям db1

show tables; – вивести таблиці БД в якій ми знаходимося

create user 'test'@'localhost' identified by '123456'; – створити користувача test і задати пароль 123456 (використовуйте більш складні паролі)

grant all privileges on database_name.* to 'test'@'localhost'; – даємо повні права користувачеві test

flush privileges; – оновлюємо всі привілеї

show processlist; – подивитися активні сполуки в БД або ж можна використовувати команду:

show status where `variable_name` = 'Threads_connected';

Так само з консолі mysql можна переглядати або змінювати параметри, наприклад:

SHOW VARIABLES LIKE 'max_error_count';

mariadb cli ПОКАЗАТИ ЗМІННІ

змінити:

SET max_error_count=256;

mariadb cli set ВАРІАБЕЛІ

У висновку хотілося б сказати, що при налаштуванні сервера БД потрібно спиратися на проекти які будуть розміщуватися на даному сервері. Те, що може бути застосовано для дрібних проектів, в корені може не підійти для великого проекту. Пробуйте, експериментуйте і найважливіше завжди заглядайте в логи. У наступній статті ми покажемо як організувати високу доступність і збільшити продуктивність додатків за рахунок ісопльзованія реплікації між серверами в MariDB.

Leave a Reply

Your email address will not be published. Required fields are marked *