Spec-Zone.ru › MySQL 5.7

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: плагин API InnoDB для memcached.

  • Должен быть установлен libevent.

    • Если вы не собирали MySQL из исходного кода, библиотека libevent не включена в вашу установку. Используйте метод установки для вашей операционной системы, чтобы установить libevent 1.4.12 или более поздней версии. Например, в зависимости от операционной системы, вы можете использовать apt-get, yum или port install. Например, на Ubuntu Linux используйте:

      sudo apt-get install libevent-dev
      
    • Если вы установили MySQL из релиза исходного кода, libevent 1.4.12 поставляется с пакетом и находится в корневом каталоге исходного кода MySQL. Если вы используете поставляемую версию libevent, никаких действий не требуется. Если вы хотите использовать локальную версию libevent, вы должны скомпилировать MySQL с параметром сборки -DWITH_LIBEVENT, установленным на system или yes.

Установка и настройка плагина InnoDB memcached

  1. Настройте плагин daemon_memcached для взаимодействия с таблицами InnoDB, выполнив скрипт конфигурации innodb_memcached_config.sql, расположенный в MYSQL_HOME/share. Этот скрипт устанавливает базу данных innodb_memcache с тремя необходимыми таблицами (cache_policies, config_options и containers). Он также устанавливает таблицу-образец demo_test в базе данных test.

    mysql> source MYSQL_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».

  2. Активируйте плагин daemon_memcached, выполнив инструкцию INSTALL PLUGIN:

    mysql> INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
    

    После установки плагин автоматически активируется при каждом перезапуске сервера MySQL.

Проверка настройки InnoDB и memcached

Для проверки настройки плагина daemon_memcached используйте сеанс telnet для отправки команд memcached. По умолчанию демон memcached прослушивает порт 11211.

  1. Получите данные из таблицы test.demo_test. Единственная строка данных в таблице demo_test имеет значение ключа AA.

    telnet localhost 11211
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    get AA
    VALUE AA 8 12
    HELLO, HELLO
    END
    
  2. Вставьте данные, используя команду set.

    set BB 10 0 16
    GOODBYE, GOODBYE
    STORED
    

    где:

    • set — команда для сохранения значения

    • BB — ключ

    • 10 — флаг для операции; игнорируется memcached, но может использоваться клиентом для указания любого типа информации; укажите 0 если не используется

    • 0 — время истечения (TTL); укажите 0 если не используется

    • 16 — длина предоставленного блока значения в байтах

    • GOODBYE, GOODBYE — значение, которое сохраняется

  3. Убедитесь, что вставленные данные сохранены в 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 |
    +----+------------------+------+------+------+
    
  4. Вернитесь к сеансу telnet и получите данные, которые вы вставили ранее, используя ключ BB.

    get BB
    VALUE BB 10 16
    GOODBYE, GOODBYE
    END
    quit
    

Если вы выключите сервер MySQL, что также выключает интегрированный сервер memcached, дальнейшие попытки получить доступ к данным memcached завершатся ошибкой подключения. Обычно данные memcached также исчезают в этот момент, и вам потребуется логика приложения для загрузки данных обратно в память при перезапуске memcached. Однако плагин InnoDB memcached автоматизирует этот процесс для вас.

При перезапуске MySQL операции get снова возвращают пары «ключ-значение», которые вы сохранили в предыдущем сеансе memcached. Когда запрашивается ключ, а соответствующее значение еще не находится в кэше памяти, значение автоматически запрашивается из MySQL таблицы test.demo_test.

Создание новой таблицы и сопоставления столбцов

В этом примере показано, как настроить собственную InnoDB таблицу с помощью плагина daemon_memcached.

  1. Создайте 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;
    
  2. Добавьте запись в таблицу 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 для этих столбцов, если они не используются.

  3. После обновления таблицы innodb_memcache.containers перезапустите плагин daemon_memcache, чтобы применить изменения.

    mysql> UNINSTALL PLUGIN daemon_memcached;
    
    mysql> INSTALL PLUGIN daemon_memcached soname "libmemcached.so";
    
  4. С помощью telnet вставьте данные в таблицу city, используя команду memcached set.

    telnet localhost 11211
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    set B 0 0 22
    BANGALORE|BANGALORE|IN
    STORED
    
  5. С помощью MySQL запросите таблицу test.city, чтобы проверить, что вставленные данные были сохранены.

    mysql> SELECT * FROM test.city;
    +---------+-----------+-----------+---------+-------+------+--------+
    | city_id | name      | state     | country | flags | cas  | expiry |
    +---------+-----------+-----------+---------+-------+------+--------+
    | B       | BANGALORE | BANGALORE | IN      |     0 |    3 |      0 |
    +---------+-----------+-----------+---------+-------+------+--------+
    
  6. С помощью 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, если они не используются.

  7. С помощью telnet выполните команду memcached get для извлечения вставленных данных, используя MySQL.

    get H
    VALUE 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: Указывает общую библиотеку, реализующую плагин InnoDB memcached. Значение по умолчанию — innodb_engine.so.

  • daemon_memcached_engine_lib_path: Путь к каталогу, содержащему общую библиотеку, реализующую плагин InnoDB memcached. Значение по умолчанию — 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/innodb-memcached-setup.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API