Основне конфігурація MySQL здійснюється за допомогою файлу /etc/my.cnf або /etc/mysql/my.cnf
Вказівка кодувань і collation
У секцію [mysqld] додамо рядки:
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = "SET NAMES utf8"
- character-set-server - кодування для всього сервера;
- collation-server - порядок символів і рядків на основі алфавітного порядку і класів еквівалентності;
- init-connect - рядок, що виконується для кожного клієнта при з'єднанні.
Обмеження кількості, тайм-аути і джерела з'єднань
Збільшення числа відкритих файлів
У більшості Linix-систем за замовчуванням ліміт відкриття файлових дескрипторів встановлений в 1024, для роботи цього недостатньо.
Перевіримо поточні опції:
Внесемо необхідні ліміти в /etc/security/limits.conf
Динамічно змінимо поточні ліміти:
Перевіримо soft limit:
Поточні ліміти в MySQL перевіримо SQL-запитом:
SHOW VARIABLES LIKE '% open_files%'
Оптимізація MySQL для MyISAM
Оптимізація параметрів MySQL дозволяє значно збільшити продуктивність MyISAM.
Основними параметрами є key_buffer_size (буфер для роботи з ключами і індексами) і sort_buffer (буфер для сортування).
key_buffer_size = 64M
sort_buffer_size = 32M
При наявності 16Гб пам'яті і більш, рекомендується збільшити key_buffer_size до 128M-256M. Якщо Ви не використовуєте MyISAM таблиці, рекомендується встановити розмір key_buffer_size в 32Мб для зберігання індексів тимчасових таблиць.
Кеш запитів вказується в опції query_cache_size. обмеження на Кешована елемент в query_cache_limit. кеш відкритих таблиць в table_open_cache.
table_open_cache = 2048
query_cache_limit = 2M
query_cache_size = 128M
query_cache_type = 1
thread_cache_size = 16
max_heap_table_size = 128M
tmp_table_size = 128M
Перенесення тимчасових файлів MySQL в пам'ять
Перевіряємо наявність / dev / shm:
none / dev / shm tmpfs defaults, size = 1G 0 0
Якщо внесли зміни, то перемонтіруем:
mount -o remount / dev / shm
У файлі конфігурації вказуємо:
У разі, якщо використовується Apparmor. то внесіть використовуваний шлях (/ dev / shm або / run / mysql) в конфігураційний файл /etc/apparmor.d/usr.sbin.mysqld, наприклад:
service apparmor restart
Оптимізація MySQL для InnoDB
innodb_file_per_table = 1
table_open_cache = 4096
innodb_open_files = 4096
При використанні тільки InnoDB частина опцій вимагає коригування:
key_buffer_size = 32M
max_allowed_packet = 1M
sort_buffer_size = 32M
read_buffer_size = 256K
read_rnd_buffer_size = 1M
thread_stack = 128K
query_cache_limit = 1M
query_cache_size = 0
query_cache_type = 1
thread_cache_size = 32
max_heap_table_size = 128M
tmp_table_size = 128M
Зверніть увагу, при роботі з InnoDB ми відключаємо query_cache_size установкою його значення в 0, що виключає зайві дії по роботі з кешем, що особливо важливо при активній роботі з великими обсягами даних.
Найважливішою налаштуванням MySQL при роботі з InnoDB є innodb_buffer_pool_size. встановлюється за принципом "чим більше, тим краще". Рекомендується виділяти до 70-80% оперативної пам'яті сервера під innodb_buffer_pool_size. Не забудьте провести розрахунок використання пам'яті Apache і додатковим програмним забезпеченням для виключення звалювання системи в swap. Для сервера з 16Гб встановлюється в діапазоні 10-12G і поділяємо його на 4 секції, для сервера з 32Гб встановлюємо значення в діапазоні 20-22G і поділяємо його на 8 секцій:
innodb_buffer_pool_size = 10G
innodb_buffer_pool_instances = 4
Розмір пам'яті, що виділяється InnoDB для зберігання різних внутрішніх структур, встановлюється 16M-32M
Установка великого розміру innodb_log_file_size може привести до збільшення швидкодії, при цьому збільшиться час відновлення даних.
innodb_log_file_size = 128M
innodb_log_buffer_size = 16M
При встановленні значення в 2 буфер не скидається на диск, а тільки в кеш операційної системи. Установка значення в 0 збільшить швидкодію, однак можлива втрата останніх даних при аварійному вимкненні mysql-сервера.
Кількість потоків введення / виведення файлів в InnoDB задається опцією innodb_file_io_threads. зазвичай цим параметром присвоюється значення 4 або 8.
З версії MySQL 5.5 розділене на 2 опції:
innodb_read_io_threads = 8
innodb_write_io_threads = 8
Для прискорення роботи з INFORMATION_SCHEMA, SHOW TABLE STATUS або SHOW INDEX відключимо оновлення статистики при виконанні таких операцій, з версії MySQL 5.6.6 innodb_stats_on_metadata відключено за замовчуванням:
Після застосування змін перезавантажте MySQL:
service mysqld restart