Настройка и оптимизация MySQL
MySQL — одна из самых популярных реляционных СУБД, но её эффективность зависит от грамотной настройки. В этой статье разберем, как адаптировать MySQL под ваше железо, управлять временными таблицами, создавать пользователей и настраивать планы обслуживания.
---
1. Настройка параметров под процессор и оперативную память
Под количество ядер CPU
- innodb_thread_concurrency: Ограничивает количество параллельных потоков InnoDB. Для современных процессоров рекомендуется значение, равное количеству ядер × 2 (например, `innodb_thread_concurrency = 16` для 8-ядерного CPU).
- thread_pool_size: Определяет размер пула потоков (актуально для MySQL Enterprise). Для Community-версии используйте `thread_cache_size = 16` (значение зависит от нагрузки).
- innodb_read_io_threads и innodb_write_io_threads: Настройки потоков ввода-вывода. Для SSD дисков установите от 8 до 16.
Пример для 8-ядерного CPU:
innodb_thread_concurrency = 16
thread_cache_size = 16
innodb_read_io_threads = 8
innodb_write_io_threads = 8
Под объем оперативной памяти
- innodb_buffer_pool_size: Главный параметр для кэширования данных и индексов. Для серверов с 16+ ГБ ОЗУ выделите 60–80% памяти (например, `innodb_buffer_pool_size = 48G` для 64 ГБ ОЗУ).
- tmp_table_size и max_heap_table_size: Ограничивают размер временных таблиц в памяти. Установите одинаковые значения (например, `256M` для сервера с 32 ГБ ОЗУ).
- query_cache_size: Кэширование результатов запросов. Для MySQL 8.0+ параметр устарел — вместо этого используйте кэширование на уровне приложения.
Пример для сервера с 64 ГБ ОЗУ:
innodb_buffer_pool_size = 48G
tmp_table_size = 512M
max_heap_table_size = 512M
2. Временные таблицы: хранение в RAM-диске
Временные таблицы и файлы сортировки по умолчанию сохраняются на диск. Чтобы ускорить операции, перенаправьте их в оперативную память.
Создание RAM-диска (Linux)
```bash
mkdir /mnt/mysql_tmpfs
mount -t tmpfs -o size=4G tmpfs /mnt/mysql_tmpfs
```
Добавьте запись в `/etc/fstab` для автоматического монтирования:
tmpfs /mnt/mysql_tmpfs tmpfs defaults,size=4G 0 0
#### Настройка MySQL
Измените конфигурационный файл `my.cnf`:
[mysqld]
tmpdir = /mnt/mysql_tmpfs
Перезапустите MySQL:
systemctl restart mysql
Теперь временные файлы и таблицы будут использовать RAM-диск.
---
3. План обслуживания базы данных
Оптимизация таблиц и индексов
- Автоматическое обслуживание InnoDB:
InnoDB автоматически управляет очисткой (purge) и дефрагментацией. Для ручной оптимизации используйте:
```sql
OPTIMIZE TABLE table_name;
```
- Удаление старых данных:
Настройте регулярное удаление через события MySQL:
```sql
CREATE EVENT cleanup_old_data
ON SCHEDULE EVERY 1 DAY
DO
DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;
```
#### Резервное копирование
- mysqldump:
```bash
mysqldump -u root -p app_db > /backups/app_db_$(date +\%F).sql
```
- Инкрементные бэкапы:
Используйте Percona XtraBackup для работы с большими базами.
#### Мониторинг и анализ
- Просмотр активных процессов:
```sql
SHOW FULL PROCESSLIST;
```
- Анализ производительности:
Включите Performance Schema в `my.cnf`:
```ini
performance_schema = ON
```
#### Планировщик задач (cron)
Пример задания для ежедневного бэкапа:
```bash
0 2 mysqldump -u root -pPassword app_db > /backups/app_db_$(date +\%F).sql
```
---
Ключевые аспекты оптимизации MySQL — баланс между ресурсами CPU, оперативной памяти и диском. Все изменения тестируйте в staging-среде. Используйте инструменты мониторинга (MySQL Workbench, Percona Monitoring Tools) для анализа нагрузки. Не забывайте о регулярных бэкапах и актуальных обновлениях.
Настраивайте MySQL осознанно, и ваша база данных будет работать быстро и стабильно.

Корпоративный почтовый сервер на минималках (postfix + dovecot + freeipa)
Postfix — агент передачи почты (MTA — mail transfer agent). Postfix является свободным программным обеспечением, создавался как альтернатива Sendmail.
Изначально Postfix …

bitrix24 + nginx + php-fpm
Битрикс шмитрикс, та еще головная боль. Но бизнес требует что бы проект был на битриксе, а ставить их битриксвм у …

Настрока фаервола nftables
nftables — подсистема ядра Linux, обеспечивающая фильтрацию и классификацию сетевых пакетов/датаграмм/кадров. Включена в ядро Linux, начиная с версии 3.13, выпущенной …