У цій статті я розгляну особливості установки, базової налаштування і оптимізації сервера баз даних MariaDB. Переді мною стояло завдання установітьc MariaDB і провести базове налаштування на Linux CentOS 7. Так як це актуальне питання, я сподіваюся стаття буде вам корисна. В кінці статті я приведу декілька прикладів конфігураційних файлів, а ви за допомогою їх зможете підібрати параметри під свій сервер.
зміст:
- Установка MariaDB в CentOS
- Захист і безпека MariaDB
- Перевірка з'єднання з сервером MariaDB
- Налаштування конфігураційного файлу MariaDB
- Оптимізація і тюнінг продуктивності MariaDB
- Основні команди для роботи в консолі MariaDB
Установка 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
Сервіс 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 - каталог для зберігання тимчасових файлів;
- skip-name-resolve - відключає DNS резолвінг;
- max_allowed_packet - максимальний розмір пакету. Якщо в БД використовуються поля blob, потрібно виставляти значення не менше ніж найбільше поле;
- max_connections - максимальна кількість відкритих з'єднань, параметр визначає, скільки клієнтів одночасно можуть працювати з сервером БД;
- секція # Cache parameters - все що пов'язано з кешем запитів, встановлювати занадто високі значення не рекомендується, так як споживання ресурсів сервером БД стане рости;
- секція # InnoDB parameters - все що пов'язано з таблицями 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
Після виконання, скрипт видасть вам всю інформацію, з якої потрібно ознайомитися. Важливі моменти будуть виділені червоним кольором і їх вам по можливості потрібно буде виправити.
Наприклад, у мене скрипт відразу ж видав, що використовується кількість коннектов набагато менше, ніж я виставив:
Даний параметр можна змінити, як і в файлі 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';
змінити:
SET max_error_count = 256;
У висновку хотілося б сказати, що при налаштуванні сервера БД потрібно спиратися на проекти які будуть розміщуватися на даному сервері. Те, що може бути застосовано для дрібних проектів, в корені може не підійти для великого проекту. Пробуйте, експериментуйте і найважливіше завжди заглядайте в логи. У наступній статті ми покажемо як організувати високу доступність і збільшити продуктивність додатків за рахунок ісопльзованія реплікації між серверами в MariDB.