---
title: 'Как настроить и оптимизировать сервер MySQL на VPS | Zomro'
description: 'Оптимизация сервера MySQL позволяет эффективно использовать ресурсы и улучшить отклик при запросах'
image: 'https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/seo%40server-panel.net/2024/11/25/screenshot_1_q50.jpg'
---

![opened image]()

  * [Zomro](https://zomro.com/rus/)
  * [FAQ](https://zomro.com/rus/blog/faq/)
  * Как настроить и оптимизировать сервер MySQL на VPS 



# Как настроить и оптимизировать сервер MySQL на VPS

25-11-2024

Одной из самых распространенных и популярных реляционных баз данных является MySQL. Веб-приложения и сервисы часто строятся на этой базе данных. Однако для достижения стабильной работы и высокой производительности требуется грамотная настройка MySQL, особенно при его запуске на VPS. Оптимизация сервера MySQL позволяет эффективно использовать ресурсы и улучшить отклик при запросах, что особенно важно для приложений с высокой нагрузкой.

## **MySQL: инсталляция на VPS**

Инсталляция на ваш сервер MySQL необходима перед началом оптимизации. Чтобы разобраться как это сделать, приведем вам пошаговую инструкцию этого процесса для двух операционных систем. 

**Процесс установки для Ubuntu/Debian**

  1. Установите свежую версию пакетного менеджера:
         
         
         sudo apt update




2\. Проведите инсталляцию MySQL:  

    
    
    sudo apt install mysql-server

  
![Как настроить и оптимизировать сервер MySQL на VPS - 1](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/seo%40server-panel.net/2024/11/25/screenshot_1_q50.jpg)

3\. Следующим шагом необходимо привести в рабочее состояние MySQL, после чего настроить автоматический запуск при загрузке вашей операционной системы:
    
    
    sudo systemctl start mysql
    sudo systemctl enable mysql

![Как настроить и оптимизировать сервер MySQL на VPS - 2](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/seo%40server-panel.net/2024/11/25/screenshot_2_q50.jpg)

## **Процесс установки для CentOS/RHEL**

  1. Необходимо инсталлировать MySQL из репозитория:
         
         
         sudo yum install mysql-server

  2. Далее необходимо привести MySQL в рабочее состояние и настроить автозапуск:
         
         
         sudo systemctl start mysqld
         sudo systemctl enable mysqld

  3. Запустите стартовую конфигурацию для улучшения безопасности:
         
         
         sudo mysql_secure_installation




### MySQL: процесс оптимизации

Для повышения производительности необходимо произвести изменения конфигурации MySQL после того как завершится процесс инсталляции. Оптимизация включает в себя несколько направлений: кэширование, индексирование и настройки конфигурации

1\. Настройки кэширования

Кэширование в MySQL позволяет хранить данные, которые часто запрашиваются, что снижает нагрузку на базу и ускоряет время отклика. Далее приведем список основных параметров для настройки кэширования:

  * query_cache_size — объем кэш-памяти запросов. Больший объем улучшает производительность.

  * query_cache_limit — ограничение на размер кэшируемого результата.

  * innodb_buffer_pool_size — ключевой параметр для InnoDB, который устанавливает количество памяти, предназначенной для хранения данных и индексов в кэше.




В момент конфигурации кэширования MySQL изменения чаще всего вносятся в файл my.cnf, расположенный в директории /etc/mysql/ или /etc/ на большинстве серверов Linux.

Вот подробное руководство для применения параметров кэширования:

**Шаг 1: Откройте файл конфигурации MySQL**

Откройте файл my.cnf для редактирования. В зависимости от системы может потребоваться выполнение команды от имени администратора:
    
    
    sudo nano /etc/mysql/my.cnf

**Шаг 2: Найдите секцию [mysqld]**

Для того чтобы параметры кэширования действовали на сервер MySQL, их необходимо включить в раздел[mysqld].

**Шаг 3: Внесение параметров кэширования**

Скопируйте конфигурации, указанные ниже, и примените их в документе my.cnf под раздел [mysqld]:

**[mysqld]**

**query_cache_type = 1 # Активация кэша запросов**

**query_cache_size = 64M # Определение объема кэша**

**query_cache_limit = 1M # Предельный объем результата запроса для кэширования**

**table_open_cache = 2000 # Общее число таблиц, хранящихся в кэше**

**thread_cache_size = 50 # Число потоков, которые могут храниться в кэше**

  
![Как настроить и оптимизировать сервер MySQL на VPS - 3](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/seo%40server-panel.net/2024/11/25/screenshot_3_q50.jpg)

**Обратите внимание:** Установленные значения, например 64M для query_cache_size, можно изменить по своим нуждам.

**Шаг 4: Перезапустите MySQL чтобы изменения вступили в силу**

После редактирования нужно сохраните файл и выйдите из редактора. Для этого нужно провести перезагрузку MySQL при помощи команды:
    
    
    sudo systemctl restart mysql

  
![Как настроить и оптимизировать сервер MySQL на VPS - 4](https://dx86q6oq7ry0e.cloudfront.net/uploads/blog/seo%40server-panel.net/2024/11/25/screenshot_4_q50.jpg)

Проверка настройки кэширования

Для проверки того, что изменения вступили в силу, нужно выполнить команду:
    
    
    SHOW VARIABLES LIKE 'query_cache%';
    
    SHOW VARIABLES LIKE 'table_open_cache';
    
    SHOW VARIABLES LIKE 'thread_cache_size';

Эти команды отобразят текущее состояние параметров, позволяя проверить их правильность и при необходимости уточнить настройки.

2\. Индексация таблиц

Индексация в MySQL — это метод улучшения производительности, который позволяет оптимизировать поиск и выборку информации из БД. Индексы создаются для столбцов таблиц и помогают серверу MySQL быстрее находить строки, соответствующие условиям запроса, за счет уменьшения числа просматриваемых строк. Подобно оглавлению в книге, индекс указывает, где можно найти нужные данные, не перебирая весь массив информации.

**Зачем нужна индексация?**

  1. **Ускорение запросов** : индексы обеспечивают более быстрое обнаружение и извлечение информации сервером MySQL, что существенно повышает эффективность обработки запросов.

  2. **Снижение нагрузки на сервер** : число вводов-выводов, благодаря индексации, становится меньше, облегчая обработку запросов и способствуя, в результате, уменьшению серверной нагрузки.

  3. **Оптимизация операций соединения (JOIN)** : индексы помогают быстрее находить и сопоставлять строки при объединении нескольких таблиц.

  4. **Улучшение сортировки и группировки** : при использовании индексов MySQL может быстрее выполнять операции ORDER BY и GROUP BY.




**Когда и какие индексы использовать?**

  * **Первичный ключ (PRIMARY KEY)** : создаётся для уникального идентификатора каждой записи (например, идентификатор пользователя). MySQL автоматически создает индекс для первичного ключа.

  * **Уникальные индексы (UNIQUE)** : применяются для полей, значения которых должны быть уникальными (например, email).

  * **Обычные индексы (INDEX)** : полезны для столбцов, часто используемых в условиях поиска WHERE или в соединениях JOIN.

  * **Составные индексы** : индексируются сразу несколько столбцов, что удобно для оптимизации сложных запросов с несколькими условиями.




**Примеры использования индексации**

Давайте изучим несколько реальных случаев, где применяются индексы.

**1\. Индексация столбца с частыми запросами**

Допустим, что у нас с вами таблица orders содержащая столбцы id, customer_id, а также status. Если запросы часто выбирают заказы по status, значит для существенного повышения скорости выполнение подобных запросов вам необходимо создать для столбца status индекс.
    
    
    CREATE INDEX idx_status ON orders(status);

После выполнения запроса:
    
    
    SELECT * FROM orders WHERE status = 'completed';

MySQL будет использовать индекс для быстрого поиска строк с status = 'completed', не просматривая все строки таблицы.

**2\. Уникальные индексы для ограничения данных**

Если мы хотим ограничить дублирование в поле email таблицы users, можно создать уникальный индекс:
    
    
    CREATE UNIQUE INDEX idx_email ON users(email);

Теперь попытка вставить повторяющийся email вызовет ошибку, так как уникальный индекс запрещает дубликаты.

**3\. Индексы для сложных запросов, состоящие из нескольких компонентов**

Когда у нас есть запросы, которые часто выбирают данные по нескольким полям, например, по firstname и lastname в таблице employees, то можно создать составной индекс:
    
    
    CREATE INDEX idx_name ON employees(firstname, lastname);

Теперь, при выполнении команды:
    
    
    SELECT * FROM employees WHERE firstname = 'John' AND lastname = 'Doe';

Выборка будет проводиться быстрее, так как MySQL будет использовать составной индекс и больше нет необходимости в проверке всех записей.

**Индексы: поддержание и актуализация**

Стоит помнить, главная рекомендация заключается в том, что целесообразно будет проводить индексацию лишь столбцов, часто участвующих в запросах, а также время от времени пересматривать их актуальность. Ведь индексы активно используют дисковое пространство, значительно замедляют процесс обновлений, удалений записей, а также вставок. Причина тому заключается в необходимости пересчёта при каждом изменении данных.

**Индексы: пример мониторинга**

Вы можете воспользоваться следующей командой, чтобы посмотреть индексы:
    
    
    SHOW INDEX FROM orders;

Это дает нам информацию о том, какие индексы созданы, их тип и на какие столбцы они применяются.

3\. Настройка параметров соединений

Параметры, отвечающие за число одновременных подключений, позволяют гибко управлять нагрузкой на сервер. Основные параметры:

  * max_connections — максимальное число соединений.

  * wait_timeout — время ожидания завершения неактивных соединений.



    
    
    [mysqld]
    
    max_connections = 200
    
    wait_timeout = 600

Поддержка и мониторинг MySQL

Для поддержания производительности MySQL важно следить за его состоянием и периодически выполнять оптимизацию. Используйте следующие подходы:

  * Мониторинг процессов MySQL: для наблюдения за исполняемыми запросами можно использовать команды SHOW PROCESSLIST или специализированные утилиты.




Регулярно проводите процесс оптимизации таблиц, применяя соответствующую команду.:
    
    
    OPTIMIZE TABLE table_name;

  * Автоматизация мониторинга: Настройте мониторинг с помощью таких инструментов, как MySQL Workbench, Percona Monitoring and Management, или Grafana для постоянного наблюдения за производительностью.




Заключение

Настройка и оптимизация MySQL на [VPS](https://zomro.com/rus/vps) помогают повысить эффективность и стабильность работы приложений. Применяя описанные методы, вы можете улучшить скорость обработки данных, уменьшить задержки и повысить надежность работы сервера MySQL. Регулярное обновление и мониторинг настроек помогают сохранять высокую производительность в долгосрочной перспективе.

Индексация — важная техника оптимизации производительности MySQL. Она приобретает особую эффективность при работе с запросами, содержащими фильтрацию и сортировку, а также с большими таблицами. В случае корректного применения индексов значительно улучшается скорость работы базы данных. Тем не менее важно помнить об осторожном их применении, с действительно важными столбцами для выполнения условий поиска, сортировки или объединения.

Похожие статьи

[Как ограничить размер папки /var/log (logrotate)](https://zomro.com/rus/blog/faq/248-kak-ogranichit-razmer-papki-var-log-logrotate) [Как установить Nginx в Docker-Compose](https://zomro.com/rus/blog/faq/317-kak-ustanovit-nginx-v-docker-compose) [Как купить лицензию ISPmanager](https://zomro.com/rus/blog/faq/625-how-to-purchase-an-ispmanager-licence) [Копирование сайта CMS WordPress с VestaCP при помощи FTP-клиента](https://zomro.com/rus/blog/faq/140-kopirovanie-sajta-razrabotannogo-na-cms-wordpress-s-vesta-cp-pri-pomoschi-ftp-klienta) [20 команд для новичков, которые стоило выучить ещё вчера (Часть 1)](https://zomro.com/rus/blog/faq/515-20-commands-for-beginners-that-you-should-have-learned-yesterday)

[ Выделенные серверы от €88.80/мес ](/rus/dedicated-servers)
