14.21.3 Настройка плагина InnoDB memcached
В этом разделе описывается, как настроить плагин daemon_memcached на сервере MySQL. Поскольку демон memcached тесно интегрирован с сервером MySQL для избегания сетевого трафика и минимизации задержек, этот процесс выполняется на каждом экземпляре MySQL, использующем эту функцию.
Перед настройкой плагина daemon_memcached, ознакомьтесь с разделом 14.21.4 «Рекомендации по безопасности для плагина InnoDB memcached», чтобы понять необходимые меры безопасности для предотвращения несанкционированного доступа.
Предварительные требования
Плагин
daemon_memcachedподдерживается только на платформах Linux, Solaris и macOS. Другие операционные системы не поддерживаются.-
При сборке MySQL из исходного кода, необходимо скомпилировать его с использованием
-DWITH_INNODB_MEMCACHED=ON. Этот параметр сборки генерирует две общие библиотеки в каталоге плагинов MySQL (plugin_dir), необходимые для работы плагинаdaemon_memcached:libmemcached.so: плагин демона memcached для MySQL.innodb_engine.so: плагин APIInnoDBдля memcached.
-
Должен быть установлен
libevent.-
Если вы не собирали MySQL из исходного кода, библиотека
libeventне включена в вашу установку. Используйте метод установки для вашей операционной системы, чтобы установитьlibevent1.4.12 или более поздней версии. Например, в зависимости от операционной системы, вы можете использоватьapt-get,yumилиport install. Например, на Ubuntu Linux используйте:sudo apt-get install libevent-dev
Если вы установили MySQL из релиза исходного кода,
libevent1.4.12 поставляется с пакетом и находится в корневом каталоге исходного кода MySQL. Если вы используете поставляемую версиюlibevent, никаких действий не требуется. Если вы хотите использовать локальную версиюlibevent, вы должны скомпилировать MySQL с параметром сборки-DWITH_LIBEVENT, установленным наsystemилиyes.
-
Установка и настройка плагина InnoDB memcached
-
Настройте плагин
daemon_memcachedдля взаимодействия с таблицамиInnoDB, выполнив скрипт конфигурацииinnodb_memcached_config.sql, расположенный в. Этот скрипт устанавливает базу данныхMYSQL_HOME/shareinnodb_memcacheс тремя необходимыми таблицами (cache_policies,config_optionsиcontainers). Он также устанавливает таблицу-образецdemo_testв базе данныхtest.mysql>
sourceMYSQL_HOME/share/innodb_memcached_config.sqlВыполнение скрипта
innodb_memcached_config.sqlвыполняется один раз. Таблицы остаются на месте, если вы позже удалите и повторно установите плагинdaemon_memcached.mysql>
USE innodb_memcache;mysql>SHOW TABLES;+---------------------------+ | Tables_in_innodb_memcache | +---------------------------+ | cache_policies | | config_options | | containers | +---------------------------+ mysql>USE test;mysql>SHOW TABLES;+----------------+ | Tables_in_test | +----------------+ | demo_test | +----------------+Из этих таблиц, таблица
innodb_memcache.containersявляется наиболее важной. Записи в таблицеcontainersобеспечивают сопоставление с столбцами таблицыInnoDB. Каждая таблицаInnoDB, используемая с плагиномdaemon_memcached, требует записи в таблицеcontainers.Скрипт
innodb_memcached_config.sqlвставляет одну запись в таблицуcontainers, которая обеспечивает отображение для таблицыdemo_test. Он также вставляет одну строку данных в таблицуdemo_test. Эти данные позволяют сразу проверить установку после завершения настройки.mysql>
SELECT * FROM innodb_memcache.containers\G*************************** 1. row *************************** name: aaa db_schema: test db_table: demo_test key_columns: c1 value_columns: c2 flags: c3 cas_column: c4 expire_time_column: c5 unique_idx_name_on_key: PRIMARY mysql>SELECT * FROM test.demo_test;+----+------------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +----+------------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | +----+------------------+------+------+------+Для получения дополнительной информации о таблицах
innodb_memcacheи таблице-образцеdemo_testсм. раздел 14.21.7 «Внутреннее устройство плагина InnoDB memcached». -
Активируйте плагин
daemon_memcached, выполнив инструкциюINSTALL PLUGIN:mysql>
INSTALL PLUGIN daemon_memcached soname "libmemcached.so";После установки плагин автоматически активируется при каждом перезапуске сервера MySQL.
Проверка настройки InnoDB и memcached
Для проверки настройки плагина daemon_memcached используйте сеанс telnet для отправки команд memcached. По умолчанию демон memcached прослушивает порт 11211.
-
Получите данные из таблицы
test.demo_test. Единственная строка данных в таблицеdemo_testимеет значение ключаAA.telnet localhost 11211Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.get AAVALUE AA 8 12 HELLO, HELLO END -
Вставьте данные, используя команду
set.set BB 10 0 16GOODBYE, GOODBYESTOREDгде:
set— команда для сохранения значенияBB— ключ10— флаг для операции; игнорируется memcached, но может использоваться клиентом для указания любого типа информации; укажите0если не используется0— время истечения (TTL); укажите0если не используется16— длина предоставленного блока значения в байтахGOODBYE, GOODBYE— значение, которое сохраняется
-
Убедитесь, что вставленные данные сохранены в MySQL, подключившись к серверу MySQL и запросив таблицу
test.demo_test.mysql>
SELECT * FROM test.demo_test;+----+------------------+------+------+------+ | c1 | c2 | c3 | c4 | c5 | +----+------------------+------+------+------+ | AA | HELLO, HELLO | 8 | 0 | 0 | | BB | GOODBYE, GOODBYE | 10 | 1 | 0 | +----+------------------+------+------+------+ -
Вернитесь к сеансу telnet и получите данные, которые вы вставили ранее, используя ключ
BB.get BBVALUE BB 10 16 GOODBYE, GOODBYE ENDquit
Если вы выключите сервер MySQL, что также выключает интегрированный сервер memcached, дальнейшие попытки получить доступ к данным memcached завершатся ошибкой подключения. Обычно данные memcached также исчезают в этот момент, и вам потребуется логика приложения для загрузки данных обратно в память при перезапуске memcached. Однако плагин InnoDB memcached автоматизирует этот процесс для вас.
При перезапуске MySQL операции get снова возвращают пары «ключ-значение», которые вы сохранили в предыдущем сеансе memcached. Когда запрашивается ключ, а соответствующее значение еще не находится в кэше памяти, значение автоматически запрашивается из MySQL таблицы test.demo_test.
Создание новой таблицы и сопоставления столбцов
В этом примере показано, как настроить собственную InnoDB таблицу с помощью плагина daemon_memcached.
-
Создайте
InnoDBтаблицу. Таблица должна иметь столбец ключа с уникальным индексом. Столбец ключа таблицы city —city_id, который определён как первичный ключ. Таблица также должна включать столбцы для значенийflags,casиexpiry. Может быть один или несколько столбцов значений. Таблицаcityимеет три столбца значений (name,state,country).ПримечаниеНет специальных требований к именам столбцов, пока добавлено корректное отображение в таблицу
innodb_memcache.containers.mysql>
CREATE TABLE city (city_id VARCHAR(32),name VARCHAR(1024),state VARCHAR(1024),country VARCHAR(1024),flags INT,cas BIGINT UNSIGNED,expiry INT,primary key(city_id))ENGINE=InnoDB; -
Добавьте запись в таблицу
innodb_memcache.containers, чтобы плагинdaemon_memcachedзнал, как получить доступ к таблицеInnoDB. Запись должна соответствовать определению таблицыinnodb_memcache.containers. Описание каждого поля см. в разделе 14.21.7 «Внутреннее устройство плагина InnoDB memcached».mysql>
DESCRIBE innodb_memcache.containers;+------------------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------------+--------------+------+-----+---------+-------+ | name | varchar(50) | NO | PRI | NULL | | | db_schema | varchar(250) | NO | | NULL | | | db_table | varchar(250) | NO | | NULL | | | key_columns | varchar(250) | NO | | NULL | | | value_columns | varchar(250) | YES | | NULL | | | flags | varchar(250) | NO | | 0 | | | cas_column | varchar(250) | YES | | NULL | | | expire_time_column | varchar(250) | YES | | NULL | | | unique_idx_name_on_key | varchar(250) | NO | | NULL | | +------------------------+--------------+------+-----+---------+-------+Запись в таблице
innodb_memcache.containersдля таблицы city определена как:mysql>
INSERT INTO `innodb_memcache`.`containers` (`name`, `db_schema`, `db_table`, `key_columns`, `value_columns`,`flags`, `cas_column`, `expire_time_column`, `unique_idx_name_on_key`)VALUES ('default', 'test', 'city', 'city_id', 'name|state|country','flags','cas','expiry','PRIMARY');defaultзадано для столбцаcontainers.name, чтобы настроить таблицуcityкак таблицу по умолчаниюInnoDBдля использования с плагиномdaemon_memcached.Несколько столбцов таблицы
InnoDB(name,state,country) сопоставлены сcontainers.value_columnsс использованием разделителя “|”.Поля
flags,cas_columnиexpire_time_columnтаблицыinnodb_memcache.containersобычно не существенны в приложениях, использующих плагинdaemon_memcached. Однако для каждого требуется выделенный столбец таблицыInnoDB. При вставке данных укажите0для этих столбцов, если они не используются.
-
После обновления таблицы
innodb_memcache.containersперезапустите плагинdaemon_memcache, чтобы применить изменения.mysql>
UNINSTALL PLUGIN daemon_memcached;mysql>INSTALL PLUGIN daemon_memcached soname "libmemcached.so"; -
С помощью telnet вставьте данные в таблицу
city, используя команду memcachedset.telnet localhost 11211Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.set B 0 0 22BANGALORE|BANGALORE|INSTORED -
С помощью MySQL запросите таблицу
test.city, чтобы проверить, что вставленные данные были сохранены.mysql>
SELECT * FROM test.city;+---------+-----------+-----------+---------+-------+------+--------+ | city_id | name | state | country | flags | cas | expiry | +---------+-----------+-----------+---------+-------+------+--------+ | B | BANGALORE | BANGALORE | IN | 0 | 3 | 0 | +---------+-----------+-----------+---------+-------+------+--------+ -
С помощью MySQL вставьте дополнительные данные в таблицу
test.city.mysql>
INSERT INTO city VALUES ('C','CHENNAI','TAMIL NADU','IN', 0, 0 ,0);mysql>INSERT INTO city VALUES ('D','DELHI','DELHI','IN', 0, 0, 0);mysql>INSERT INTO city VALUES ('H','HYDERABAD','TELANGANA','IN', 0, 0, 0);mysql>INSERT INTO city VALUES ('M','MUMBAI','MAHARASHTRA','IN', 0, 0, 0);ПримечаниеРекомендуется указать значение
0для полейflags,cas_columnиexpire_time_column, если они не используются. -
С помощью telnet выполните команду memcached
getдля извлечения вставленных данных, используя MySQL.get HVALUE H 0 22 HYDERABAD|TELANGANA|IN END
Настройка плагина InnoDB memcached
Параметры традиционной настройки memcached можно указать в файле конфигурации MySQL или строке запуска mysqld, закодированной в аргументе параметра конфигурации daemon_memcached_option. Параметры конфигурации memcached вступают в силу при загрузке плагина, что происходит каждый раз при запуске сервера MySQL.
Например, чтобы memcached прослушивал порт 11222 вместо стандартного порта 11211, укажите -p11222 в качестве аргумента параметра конфигурации daemon_memcached_option:
mysqld .... --daemon_memcached_option="-p11222"
Другие параметры memcached можно закодировать в строке daemon_memcached_option. Например, можно указать параметры для уменьшения максимального количества одновременных подключений, изменения максимального размера памяти для пары ключ-значение, или включения отладочных сообщений в журнал ошибок и т. д.
Также есть параметры конфигурации, специфичные для плагина daemon_memcached:
daemon_memcached_engine_lib_name: Указывает общую библиотеку, реализующую плагинInnoDBmemcached. Значение по умолчанию —innodb_engine.so.daemon_memcached_engine_lib_path: Путь к каталогу, содержащему общую библиотеку, реализующую плагинInnoDBmemcached. Значение по умолчанию — NULL, что обозначает каталог плагина.daemon_memcached_r_batch_size: Определяет размер пакетной фиксации для операций чтения (get). Он определяет количество операций чтения memcached, после которых происходит фиксация.daemon_memcached_r_batch_sizeпо умолчанию установлен в 1, чтобы каждый запросgetдоступа имел доступ к данным, которые были скоммитированы последними в таблицуInnoDB, вне зависимости от того, были ли данные обновлены через memcached или SQL. Когда значение больше 1, счётчик операций чтения инкрементируется для каждого вызоваget. Вызовflush_allсбрасывает счётчики чтения и записи.daemon_memcached_w_batch_size: Определяет размер пакетной фиксации для операций записи (set,replace,append,prepend,incr,decrи т. д.).daemon_memcached_w_batch_sizeпо умолчанию установлен в 1, чтобы не потерять нескоммитированные данные в случае сбоя и чтобы SQL-запросы к основной таблице имели доступ к последним данным. Когда значение больше 1, счётчик операций записи инкрементируется для каждого вызоваadd,set,incr,decrиdelete. Вызовflush_allсбрасывает счётчики чтения и записи.
По умолчанию, вам не нужно изменять daemon_memcached_engine_lib_name или daemon_memcached_engine_lib_path. Вы можете настроить эти параметры, например, если хотите использовать другой движок хранения для memcached (например, движок NDB memcached).
Параметры конфигурации плагина daemon_memcached могут быть указаны в файле конфигурации MySQL или в строке запуска mysqld. Они вступают в силу при загрузке плагина daemon_memcached.
При внесении изменений в конфигурацию плагина daemon_memcached перезагрузите плагин, чтобы применить изменения. Для этого выполните следующие операторы:
mysql> UNINSTALL PLUGIN daemon_memcached;
mysql> INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
Настройки конфигурации, необходимые таблицы и данные сохраняются при перезапуске плагина.
Дополнительную информацию об включении и отключении плагинов см. в разделе 5.5.1 «Установка и удаление плагинов».
© 2025 Oracle
Licensed under the GPLv2 License.