Включение плагина 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.
- Резервные копии важных баз данных перед изменениями.
Пошаговая инструкция
- Залогиньтесь в MySQL как root:
mysql -u root -p- Узнайте версию 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>- Убедитесь, что у вас есть тестовая база данных. Если её нет — создайте.
Проверить:
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;- Выйдите из MySQL:
mysql> quit;- Находясь в каталоге установки MySQL (в примере /usr/local/mysql), импортируйте конфигурацию для innodb_memcached:
mysql -u root -p < share/innodb_memcached_config.sqlЭтот SQL-файл создаёт необходимые таблицы, конфигурацию и вспомогательные объекты для работы интерфейса memcached с InnoDB.
- Снова зайдите в MySQL и установите плагин daemon_memcached:
mysql -u root -pmysql> INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';- Проверьте, что плагин активирован:
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>- Выйдите из 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-интерфейса
- Используйте клиент 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 — интерфейс работает.
- Можно также использовать утилиту
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).
Отладка и распространённые проблемы
Плагин не устанавливается: “INSTALL PLUGIN failed”
- Проверьте наличие файла libmemcached.so в каталоге плагинов MySQL. В разных сборках путь может отличаться.
- Убедитесь, что вы запускаете команду от имени пользователя с правами администратора в MySQL.
- Проверьте логи mysqld на предмет сообщений о загрузке библиотеки.
Порт 11211 не прослушивается после установки плагина:
- Убедитесь, что демо́н mysqld перезапущен, если это требовалось.
- Проверьте, не блокирует ли файрвол локальные подключения.
- Проверьте, нет ли конфликтов с внешним memcached, если он уже запущен на той же машине.
Ошибки при работе 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%';Альтернативные подходы и когда их использовать
Внешний memcached или Redis
- Используйте внешний memcached, когда требуется отдельный процесс кеширования с собственными параметрами памяти и политиками очистки.
- Redis лучше подходит, если нужны структуры данных (списки, множества), персистентность или репликация.
Caching-aside (локальный кэш + MySQL)
- Подходит, когда приложение самостоятельно управляет кэшем (чтение из кэша, при промахе — чтение из БД и запись в кэш).
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)
- Интеграционный тест: записать 1000 ключей через memcached-клиент и затем прочитать их; 100% должны быть доступны.
- Нагрузочный тест: смоделировать 1000 одновременных подключений с небольшими запросами; измерить среднюю латентность и количество ошибок.
- Функциональный тест: убедиться, что данные, записанные через memcached-интерфейс, доступны и через SQL (если логика приложения ожидает этого).
Критерий успешного прохождения: все тесты выполняются без ошибок и с допустимыми показателями производительности.
Откат и удаление плагина
Если нужно откатить изменения:
- В MySQL выполните:
mysql> UNINSTALL PLUGIN daemon_memcached;При необходимости удалите объекты, созданные innodb_memcached_config.sql (в том числе таблицы конфигурации). Перед удалением убедитесь, что данные не нужны.
Проверьте, что порт 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.
- Вопрос: Можно ли изменить порт по умолчанию? Ответ: Обычно порт задаётся плагином. Для изменения используйте файрвол или параметры сети; полная смена порта может требовать специальных настроек.
Полезные ссылки
- MySQL: http://www.mysql.com/
- Статья (на английском) о NoSQL-интерфейсе в MySQL 5.6: http://schlueters.de/blog/archives/152-Not-only-SQL-memcache-and-MySQL-5.6.html
Итог и рекомендации
Ключевые выводы:
- Встроенный daemon_memcached в MySQL 5.6 упрощает архитектуру и полезен для сценариев со строгой связью между кешем и базой.
- Перед включением сделайте резервную копию и настройте доступы.
- Используйте внешний memcached/Redis для сценариев с высокими требованиями к масштабированию или дополнительными структурами данных.
Notes: планируйте мониторинг и тестируйте систему под ожидаемой нагрузкой перед переходом в продакшн.
Краткое резюме в конце статьи представлено в разделе “Итог и рекомендации”.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента