Гид по технологиям

Включение плагина memcached в MySQL 5.6

• 8 min read • Базы данных • Обновлено 26 Nov 2025
Включение memcached в MySQL 5.6
Включение memcached в MySQL 5.6

Коротко о том, что это и зачем

memcached в контексте MySQL 5.6 — это не отдельный демо́н, установленный извне, а плагин (daemon_memcached), который запускается внутри процесса mysqld и предоставляет NoSQL-интерфейс к данным InnoDB через протокол memcached. Это удобно для кеширования и быстрого доступа без необходимости писать SQL, при этом данные могут храниться в InnoDB.

Определение: NoSQL-интерфейс — прямой доступ к данным по ключам без использования SQL-запросов.

Важно: это не замена полноценного внешнего memcached во всех сценариях. В некоторых случаях всё ещё лучше использовать внешний memcached или Redis (см. раздел “Альтернативные подходы”).

Что вы получите после включения

  • Демон memcached доступен на порту 11211 и управляется mysqld.
  • Встроенная обработка данных InnoDB через memcached-протокол.
  • Меньше компонентов для поддержки (нет отдельного процесса memcached).

Требования и предпосылки

  • MySQL версии 5.6.x. Точное поддерживаемое подсемейство — см. документацию вашей сборки.
  • Права root или эквивалентный доступ в MySQL для установки плагина.
  • Доступ к файловой системе MySQL (обычно /usr/local/mysql или дистрибутивный путь) для импорта файла share/innodb_memcached_config.sql.
  • Резервные копии важных баз данных перед изменениями.

Пошаговая инструкция

  1. Залогиньтесь в MySQL как root:
mysql -u root -p
  1. Узнайте версию MySQL и установленные плагины.

Команда для версии:

mysql> select version();

Пример вывода (оставлено как пример, ваш вывод может отличаться):

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.8-rc  |
+-----------+
1 row in set (0.00 sec)

mysql>

Команда для списка плагинов:

mysql> show plugins;

Если вы не видите строку daemon_memcached в выводе, значит плагин ещё не активирован.

Пример вывода (сокращённый):

mysql> show plugins;
+----------------------------+----------+--------------------+---------+---------+
| Name                       | Status   | Type               | Library | License |
+----------------------------+----------+--------------------+---------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL    | GPL     |
+----------------------------+----------+--------------------+---------+---------+
43 rows in set (0.00 sec)

mysql>
  1. Убедитесь, что у вас есть тестовая база данных. Если её нет — создайте.

Проверить:

mysql> SHOW DATABASES;

Пример вывода:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

mysql>

Если нет базы test, создайте её:

mysql> CREATE DATABASE test;
  1. Выйдите из MySQL:
mysql> quit;
  1. Находясь в каталоге установки MySQL (в примере /usr/local/mysql), импортируйте конфигурацию для innodb_memcached:
mysql -u root -p < share/innodb_memcached_config.sql

Этот SQL-файл создаёт необходимые таблицы, конфигурацию и вспомогательные объекты для работы интерфейса memcached с InnoDB.

  1. Снова зайдите в MySQL и установите плагин daemon_memcached:
mysql -u root -p
mysql> INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';
  1. Проверьте, что плагин активирован:
mysql> show plugins;

Ожидаемый пример строки в выводе:

| daemon_memcached           | ACTIVE   | DAEMON             | libmemcached.so | GPL     |

Полный пример вывода (с участием daemon_memcached):

mysql> show plugins;
+----------------------------+----------+--------------------+-----------------+---------+
| Name                       | Status   | Type               | Library         | License |
+----------------------------+----------+--------------------+-----------------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL            | GPL     |
... (другие строки) ...
| daemon_memcached           | ACTIVE   | DAEMON             | libmemcached.so | GPL     |
+----------------------------+----------+--------------------+-----------------+---------+
44 rows in set (0.00 sec)

mysql>
  1. Выйдите из MySQL и проверьте сетевые слушатели на системе, чтобы убедиться, что порт 11211 прослушивается в рамках процесса mysqld:
mysql> quit;

Выполните на сервере:

netstat -tap

Ожидаемый фрагмент вывода:

root@server1:~# netstat -tap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:ssh                   *:*                     LISTEN      641/sshd
tcp        0      0 *:11211                 *:*                     LISTEN      1665/mysqld
tcp        0      0 server1.example.com:ssh 192.168.0.10:51889      ESTABLISHED 1758/1
... (другие строки) ...
root@server1:~#

Если вы видите строку с :11211 и PID/Program name указывает на mysqld — плагин запущен корректно.

Проверка работоспособности memcached-интерфейса

  1. Используйте клиент memcached (например, telnet или любой memcached-клиент) чтобы подключиться на порт 11211 и выполнить простую операцию set/get.

Пример с telnet:

telnet 127.0.0.1 11211
set testkey 0 900 5
hello
STORED
get testkey
VALUE testkey 0 5
hello
END
quit

Если операции возвращают STORED и затем VALUE — интерфейс работает.

  1. Можно также использовать утилиту memcached-tool или библиотечные клиенты (PHP-расширение memcached, python-memcache и т.д.) для выполнения тестов.

Технические детали и параметры конфигурации

  • Плагин daemon_memcached реализует обработку memcached-протокола внутри mysqld и взаимодействует с данными InnoDB через внутренние таблицы.
  • Основной файл конфигурации, используемый в шаге импорта, — share/innodb_memcached_config.sql. Он создаёт таблицы и параметры, которые можно отредактировать для изменения поведения.
  • Порт по умолчанию: 11211. Его можно изменить настройками сети/файрвола или, при необходимости, пересобрать/сконфигурировать сервис (в редких сборках доступна опция bind-address для плагина).
  • Ограничение памяти и политики очистки контролируются не стандартными memcached-параметрами, а через параметры InnoDB/плагина. Для тонкой настройки изучите содержимое innodb_memcached_config.sql.

Безопасность и рекомендации

Important: memcached-протокол не шифрует трафик и не содержит встроенной аутентификации. Откройте порт 11211 только для доверенных сетей.

Рекомендации:

  • Ограничьте доступ к порту 11211 через firewall (iptables, nftables, UFW) или через настройки сети (security group в облаке).
  • По возможности слушайте только на localhost или на выделенной частной сети.
  • Не используйте публичный доступ к порту 11211.
  • Контролируйте доступ к MySQL: только администраторы должны иметь права на установку плагинов.
  • Логи: отслеживайте ошибки в логе mysqld (обычно /var/log/mysqld.log или /var/log/mysql/error.log).

Отладка и распространённые проблемы

  1. Плагин не устанавливается: “INSTALL PLUGIN failed”

    • Проверьте наличие файла libmemcached.so в каталоге плагинов MySQL. В разных сборках путь может отличаться.
    • Убедитесь, что вы запускаете команду от имени пользователя с правами администратора в MySQL.
    • Проверьте логи mysqld на предмет сообщений о загрузке библиотеки.
  2. Порт 11211 не прослушивается после установки плагина:

    • Убедитесь, что демо́н mysqld перезапущен, если это требовалось.
    • Проверьте, не блокирует ли файрвол локальные подключения.
    • Проверьте, нет ли конфликтов с внешним memcached, если он уже запущен на той же машине.
  3. Ошибки при работе memcached-клиента:

    • Проверьте правильность протокола (binary/text) — плагин обычно поддерживает протоколы memcache/memcached в текстовом виде; уточните в вашей сборке.
    • Убедитесь, что таблицы и объекты, созданные innodb_memcached_config.sql, успешно импортированы.

Полезные команды для диагностики:

  • Просмотр лога ошибок mysqld:
sudo tail -n 200 /var/log/mysql/error.log
  • Поиск ошибок загрузки плагина в логе:
grep -i memcached /var/log/mysql/error.log || true
  • Просмотр таблицы плагинов через information_schema:
SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE, PLUGIN_LIBRARY
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%memcached%';

Альтернативные подходы и когда их использовать

  1. Внешний memcached или Redis

    • Используйте внешний memcached, когда требуется отдельный процесс кеширования с собственными параметрами памяти и политиками очистки.
    • Redis лучше подходит, если нужны структуры данных (списки, множества), персистентность или репликация.
  2. Caching-aside (локальный кэш + MySQL)

    • Подходит, когда приложение самостоятельно управляет кэшем (чтение из кэша, при промахе — чтение из БД и запись в кэш).
  3. InnoDB memcached плагин удобен, когда вы хотите минимизировать количество компонентов и хранить данные непосредственно в InnoDB.

Контрпример (когда встроенный плагин не подходит): высокая нагрузка на memcached-протокол с миллионами операций в секунду — в этом случае лучше специализированный внешний процесс memcached или кластер Redis для масштабирования.

Ментальные модели и эвристики

  • Если вы хотите единое хранение и упрощённую архитектуру — рассматривайте daemon_memcached.
  • Если вам нужна максимальная производительность для volatile cache и простое масштабирование — внешний memcached.
  • Если вам нужны сложные структуры данных и персистентность — Redis.

Эвристика выбора: Impact × Effort

  • Низкий эффект, низкие усилия: включение daemon_memcached для небольших проектов.
  • Высокий эффект, средние усилия: внешний memcached/Redis при нагрузке и требованиях к отказоустойчивости.

Playbook: быстрый чек-лист при включении (роль: Системный администратор)

  • Сделать бэкап критичных баз данных.
  • Проверить версию MySQL (>= 5.6.x).
  • Создать тестовую базу (CREATE DATABASE test;).
  • Импортировать share/innodb_memcached_config.sql.
  • Установить плагин INSTALL PLUGIN daemon_memcached SONAME ‘libmemcached.so’;
  • Проверить вывод SHOW PLUGINS; — найдена daemon_memcached.
  • Проверить netstat — порт 11211 прослушивается процессом mysqld.
  • Выполнить тест set/get через telnet или клиент.
  • Настроить firewall, ограничить доступ по IP.
  • Подготовить мониторинг и алерты (отказ, рост латентности).

Критерии приёмки

  • Плагин daemon_memcached присутствует в INFORMATION_SCHEMA.PLUGINS и имеет статус ACTIVE.
  • Система прослушивает порт 11211 и PID указан как mysqld.
  • Клиентские set/get операции завершаются успешно и возвращают ожидаемые значения.
  • Нет ошибок в логе mysqld, связанных с загрузкой libmemcached.so или выполнением memcached-операций.

Тесты и случаи приёмки (acceptance tests)

  1. Интеграционный тест: записать 1000 ключей через memcached-клиент и затем прочитать их; 100% должны быть доступны.
  2. Нагрузочный тест: смоделировать 1000 одновременных подключений с небольшими запросами; измерить среднюю латентность и количество ошибок.
  3. Функциональный тест: убедиться, что данные, записанные через memcached-интерфейс, доступны и через SQL (если логика приложения ожидает этого).

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

Откат и удаление плагина

Если нужно откатить изменения:

  1. В MySQL выполните:
mysql> UNINSTALL PLUGIN daemon_memcached;
  1. При необходимости удалите объекты, созданные innodb_memcached_config.sql (в том числе таблицы конфигурации). Перед удалением убедитесь, что данные не нужны.

  2. Проверьте, что порт 11211 больше не прослушивается процессом mysqld (netstat -tap).

Совместимость и миграция

  • Плагин daemon_memcached появился в MySQL 5.6. Если вы используете более старые версии — обновление MySQL требуется.
  • В новых версиях MySQL (8.x) архитектура плагинов и поддержка встроенных демонов могут меняться. Перед миграцией проверьте документацию вашей целевой версии.
  • Если вы планируете перенос на другую платформу или в облако, проверьте отличие путей установки (например, /usr/local/mysql vs /usr/bin/mysql).

Безопасность данных и конфиденциальность

  • Поскольку протокол memcached открыт (без шифрования), не передавайте по нему чувствительные данные без дополнительного шифрования на прикладном уровне.
  • Для соответствия требованиям GDPR и локальным правилам защиты данных следите, чтобы доступ к данным был ограничен, а логи не содержали чувствительную информацию.

Советы по производительности

  • Мониторьте использование памяти и количество операций в секунду. Память для InnoDB и поведение плагина регулируются параметрами InnoDB.
  • Для высоких нагрузок рассмотрите горизонтальное масштабирование через внешние кеш-сервисы.
  • При необходимости используйте отдельные дисковые подсистемы для журналов InnoDB и данных.

Примеры реальных команд и утилит

  • Проверка плагина через INFORMATION_SCHEMA:
SELECT * FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'daemon_memcached';
  • Проверка логов и фильтрация по ключевым словам:
sudo grep -i "memcached" /var/log/mysql/error.log || true
  • Проверка порта:
sudo netstat -tulpn | grep 11211 || true

Частые вопросы (короткие ответы)

  • Вопрос: Нужно ли устанавливать внешний memcached? Ответ: Не обязательно. Плагин запускает memcached-протокол внутри mysqld. Но внешний memcached может быть предпочтительнее для некоторых сценариев.
  • Вопрос: Поддерживается ли binary protocol? Ответ: Это зависит от сборки; проверьте документацию вашей версии MySQL.
  • Вопрос: Можно ли изменить порт по умолчанию? Ответ: Обычно порт задаётся плагином. Для изменения используйте файрвол или параметры сети; полная смена порта может требовать специальных настроек.

Полезные ссылки

Итог и рекомендации

Ключевые выводы:

  • Встроенный daemon_memcached в MySQL 5.6 упрощает архитектуру и полезен для сценариев со строгой связью между кешем и базой.
  • Перед включением сделайте резервную копию и настройте доступы.
  • Используйте внешний memcached/Redis для сценариев с высокими требованиями к масштабированию или дополнительными структурами данных.

Notes: планируйте мониторинг и тестируйте систему под ожидаемой нагрузкой перед переходом в продакшн.


Краткое резюме в конце статьи представлено в разделе “Итог и рекомендации”.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро