Налаштування бази даних MySQL/MariaDB для веб-застосунку

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

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

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування бази даних MySQL/MariaDB для веб-застосунку
Середня
від 1 робочого дня до 3 робочих днів
Часті питання

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

Етапи розробки

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

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

Налаштування базу даних MySQL/MariaDB для веб-додатку

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

Встановлення

MySQL 8.0 на Ubuntu:

apt install -y mysql-server
mysql_secure_installation

MariaDB 11.x (рекомендується для нових проектів—краща продуктивність, open source ліцензія):

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
apt install -y mariadb-server mariadb-client

Створення бази й користувача:

CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp'@'localhost';
FLUSH PRIVILEGES;

utf8mb4 обов'язковий—справжній UTF-8 з підтримкою emoji. Старий MySQL utf8—трибайтний, що викликає проблеми з Unicode за межами BMP.

Конфігурація my.cnf

[mysqld]
# Основні налаштування (для 8 ГБ RAM)
innodb_buffer_pool_size = 5G          # 60-70% RAM
innodb_buffer_pool_instances = 4      # по одній на 1-2 ГБ
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2    # компромісс надійність/швидкість
innodb_flush_method = O_DIRECT

# Підключення
max_connections = 200
thread_cache_size = 32
table_open_cache = 4000

# Запити
query_cache_type = 0                  # query cache застарілий, вимкнути
tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 4M
join_buffer_size = 4M

# Логування
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

# Реплікація
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
expire_logs_days = 7

Індекси й оптимізація запитів

-- Складені індекси—порядок має значення
-- Запит: WHERE user_id = ? AND status = ? ORDER BY created_at DESC
CREATE INDEX idx_orders_user_status_date
ON orders(user_id, status, created_at DESC);

-- Покриваючий індекс—відповідь з індексу без звернення до таблиці
CREATE INDEX idx_products_listing
ON products(category_id, is_active, price, id, name)
WHERE deleted_at IS NULL;

-- Перевірити використання індексу
EXPLAIN SELECT * FROM orders
WHERE user_id = 123 AND status = 'completed'
ORDER BY created_at DESC LIMIT 10;

Стратегія резервної копії

# Повна резервна копія
mysqldump -u root -p --all-databases --single-transaction > backup-$(date +%Y%m%d).sql

# Інкрементальна через binary logs
mysqlbinlog /var/log/mysql/mysql-bin.000001 | mysql -u root -p

# Автоматизована резервна копія на віддалену
0 2 * * * mysqldump -u myapp -pPassword myapp | gzip > /backups/myapp-$(date +\%Y\%m\%d).sql.gz

Настройка продуктивності

Моніторити повільні запити:

# Включити в my.cnf, потім аналізувати
mysqldumpslow /var/log/mysql/slow.log | head -20

Ключові метрики для спостереження:

  • Threads_connected—активні підключення
  • Questions—запити за секунду
  • Slow_queries—запити > long_query_time
  • InnoDB_buffer_pool_pages_dirty—дані очікуючи скиду

Реплікація (Master-Slave)

Для HA налаштуйте реплікацію:

-- Master
CHANGE MASTER TO
  MASTER_HOST='master-ip',
  MASTER_USER='replication',
  MASTER_PASSWORD='password',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=155;

START SLAVE;
SHOW SLAVE STATUS\G

Таймлайн

Налаштування MySQL/MariaDB, створення користувача, базова оптимізація—2–3 години. Резервні копії, реплікація, моніторинг—4–6 годин. Проектування схеми, індекси, тестування—залежить від складності додатку.