Налаштування MySQL/MariaDB: оптимізація, реплікація, бекапи

Повний цикл адміністрування MySQL та MariaDB для веб-проектів

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування MySQL/MariaDB: оптимізація, реплікація, бекапи
Складний
постійно

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1419
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1244
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Повний цикл адміністрування MySQL та MariaDB для веб-проектів

Уявіть: сайт на WordPress падає при 1000 одночасних відвідувачів, хоча сервер потужний. Швидше за все, проблема в MySQL — не налаштований InnoDB buffer pool, немає індексів на часті запити, binary log забив диск. Такі сценарії зустрічаються повсюдно: типовий проект втрачає до 30% продуктивності через неоптимальну конфігурацію. Ми вирішуємо ці завдання щодня, маючи за плечима понад 50 успішних проектів з адміністрування MySQL та MariaDB. Гарантуємо стабільну роботу та приріст продуктивності на 20-50% після налаштування.

Проблеми, які ми вирішуємо

Фрагментація таблиць. MyISAM без регулярного OPTIMIZE гальмує вибірки. InnoDB теж фрагментується після частих UPDATE/DELETE. Розмір бази зростає, а продуктивність падає. Повільні запити. Відсутність індексів, N+1 запитів у додатку, неоптимальний JOIN без ключів. Реплікація. Налаштування master-replica без контролю лагу веде до розсинхронізації. Переповнення binary log без ротації займає весь диск — сервер зупиняється. Балансування навантаження. Без ProxySQL читання та запис йдуть на один сервер, створюючи вузьке місце.

Як ми це робимо

Початковий аудит

-- Оцінка стану: розмір баз, фрагментація, повільні запити SELECT table_schema, ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) AS size_mb FROM information_schema.tables GROUP BY table_schema ORDER BY size_mb DESC; 

Потім аналізуємо slow_query_log та config-файли. На основі даних підбираємо параметри. Наприклад, для бази розміром 50 ГБ з високим навантаженням на запис збільшуємо innodb_log_file_size до 1 ГБ, що скорочує час checkpoint на 40%.

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

Ключовий параметр — innodb_buffer_pool_size. Для виділеного сервера виділяємо 70-80% RAM. Розмір лог-файлів збільшуємо до 512 МБ — це зменшує частоту checkpoint і прискорює запис. Файл на таблицю (innodb_file_per_table = ON) спрощує бекап та оптимізацію. В результаті типова база на 100 ГБ отримує приріст швидкості запитів на 30-60%.

[mysqld] innodb_buffer_pool_size = 4G innodb_buffer_pool_instances = 4 innodb_log_file_size = 512M innodb_log_buffer_size = 64M innodb_flush_log_at_trx_commit = 1 innodb_file_per_table = ON innodb_read_io_threads = 8 innodb_write_io_threads = 8 innodb_io_capacity = 2000 innodb_io_capacity_max = 4000 

Як ми оптимізуємо базу даних: крок за кроком

  1. Аудит поточної конфігурації та продуктивності.
  2. Аналіз повільних запитів та індексів (виявляємо до 90% неоптимальних запитів).
  3. Налаштування параметрів InnoDB (buffer pool, log file, IO threads).
  4. Налаштування реплікації master-replica з контролем лагу (цільовий лаг < 1 сек).
  5. Налаштування автоматичних бекапів (mysqldump для малих баз, XtraBackup для великих).
  6. Впровадження моніторингу та алертів (Prometheus + Grafana, ProxySQL для балансування).
  7. Документування конфігурації та навчання вашого адміністратора.

Чому важлива реплікація?

Реплікація master-replica дає відмовостійкість: при відмові майстра перемикаємося на репліку. Налаштовуємо її так, щоб лаг не перевищував 1 секунди. Використовуємо ROW-формат binary log — він безпечніший за STATEMENT для додатків зі збереженими процедурами. Приклад налаштування:

-- На майстрі CREATE USER 'replication'@'%' IDENTIFIED BY 'strong_password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'; SHOW MASTER STATUS; -- На репліці CHANGE MASTER TO MASTER_HOST = '10.0.0.1', MASTER_USER = 'replication', MASTER_PASSWORD = 'strong_password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 12345; START SLAVE; 

Резервне копіювання: mysqldump vs XtraBackup

Для баз до 10 ГБ використовуємо mysqldump з --single-transaction — бекап без блокування InnoDB. Для великих баз застосовуємо Percona XtraBackup: він фізично копіює дані, працює до 3 разів швидше і майже не навантажує сервер. Обидва методи автоматизуємо з ротацією та перевіркою цілісності.

# mysqldump для невеликих баз mysqldump --single-transaction --quick --routines --triggers --flush-logs -u backup -p mydb | gzip > /backups/mydb_$(date +%Y%m%d).sql.gz # XtraBackup для великих баз xtrabackup --backup --user=backup --target-dir=/backups/full_$(date +%Y%m%d) 

Порівняння методів бекапу

Параметр mysqldump XtraBackup
Розмір бази < 10 ГБ ≥ 10 ГБ
Швидкість Повільно (логічний) Швидко (фізичний)
Навантаження на сервер Середнє Низьке
Блокування Немає (--single-transaction) Немає
Відновлення Повільно (SQL) Швидко (файли)
Економія на ліцензіях Безкоштовно, економія до $2000/рік

Оптимізація та моніторинг

Регулярно виконуємо дефрагментацію таблиць за допомогою OPTIMIZE TABLE або pt-online-schema-change (без блокування). Моніторинг через performance_schema: відстежуємо топ повільних запитів та блокування. Налаштовуємо алерти при заповненні диска більше 80%.

Задача Частота
mysqldump бекап Щодня
Перевірка лагу репліки Щохвилини
Ротація binary log По expire_logs_days
OPTIMIZE таблиць Щотижня
Аналіз slow query log Щотижня
Перевірка місця на диску Постійно (алерт при >80%)

Що робити при розростанні binary log?

Binary log розростається, якщо не налаштована ротація. Встановіть expire_logs_days = 7 в my.cnf, а також регулярно виконуйте PURGE BINARY LOGS BEFORE NOW() - INTERVAL 7 DAY. Для реплікації використовуйте ROW-формат: він компактніший при змішаному навантаженні. Розмір логу можна контролювати алертами — при досягненні 80% диска спрацьовує сповіщення.

Приклад конфігурації my.cnf з ротацією
[mysqld] expire_logs_days = 7 max_binlog_size = 500M binlog_format = ROW 

Орієнтовні строки робіт

Строки залежать від складності: аудит займає 1-2 дні, налаштування конфігурації — 2-3 дні, впровадження реплікації — 1-2 дні, налаштування бекапів — 1 день. Повний цикл — від 5 до 10 робочих днів. Вартість розраховується індивідуально і окупається за рахунок зниження навантаження на сервер до 40%. Замовте первинний аудит — ми покажемо реальні точки зростання.

Що входить в роботу

  • Аудит поточної конфігурації та продуктивності (з видачею звіту).
  • Налаштування InnoDB під навантаження (оптимізація buffer pool, log file, IO).
  • Налаштування реплікації master-replica з моніторингом лагу.
  • Налаштування автоматичних бекапів (mysqldump/XtraBackup) з ротацією.
  • Інтеграція моніторингу (performance_schema, алерти по диску та лагу).
  • Документація з конфігурації та процедур відновлення.
  • Навчання вашого адміністратора (2-3 години консультацій).
  • Гарантійна підтримка 1 місяць після впровадження.

Зв'яжіться з нами для первинного аудиту вашої бази даних. Замовте налаштування MySQL/MariaDB і забудьте про проблеми з продуктивністю. Наша команда гарантує результат: стабільна робота без сюрпризів.

Для додаткової інформації зверніться до документації InnoDB та Wikipedia про реплікацію.