Налаштування mysql

Основне конфігурація 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

Схожі статті