Spec-Zone.ru › MySQL 8.4

Справочник по маркерам версий 7.6.6.4

Следующее обсуждение служит справочником по элементам маркеров версий:

  • Функции маркеров версий

  • Системные переменные маркеров версий

Функции маркеров версий

Библиотека плагина маркеров версий включает несколько функций. Одна группа функций позволяет управлять и просматривать список маркеров версий на сервере. Другая группа функций позволяет блокировать и разблокировать маркеры версий. Для вызова любой функции маркеров версий требуется привилегия VERSION_TOKEN_ADMIN (или устаревшая привилегия SUPER).

Следующие функции позволяют создавать, изменять, удалять и просматривать список маркеров версий на сервере. Интерпретация аргументов name_list и token_list (включая обработку пробелов) происходит так, как описано в разделе 7.6.6.3 «Использование маркеров версий», который содержит подробности о синтаксисе указания маркеров и дополнительные примеры.

  • version_tokens_delete(name_list)

    Удаляет маркеры из списка маркеров версий на сервере, используя аргумент name_list, и возвращает двоичную строку, указывающую результат операции. name_list — это список имён маркеров версий, разделенных точкой с запятой, которые нужно удалить.

    mysql> SELECT version_tokens_delete('tok1;tok3');
    +------------------------------------+
    | version_tokens_delete('tok1;tok3') |
    +------------------------------------+
    | 2 version tokens deleted.          |
    +------------------------------------+
    

    Аргумент NULL рассматривается как пустая строка, что не оказывает влияния на список маркеров.

    version_tokens_delete() удаляет маркеры, указанные в аргументе, если они существуют. (Удаление несуществующих маркеров не является ошибкой). Для очистки всего списка маркеров без знания, какие маркеры в списке, передайте NULL или строку, не содержащую маркеров, в version_tokens_set():

    mysql> SELECT version_tokens_set(NULL);
    +------------------------------+
    | version_tokens_set(NULL)     |
    +------------------------------+
    | Version tokens list cleared. |
    +------------------------------+
    mysql> SELECT version_tokens_set('');
    +------------------------------+
    | version_tokens_set('')       |
    +------------------------------+
    | Version tokens list cleared. |
    +------------------------------+
    
  • version_tokens_edit(token_list)

    Изменяет список маркеров версий на сервере, используя аргумент token_list, и возвращает двоичную строку, указывающую результат операции. token_list — это список пар «имя маркера;значение», разделённых точкой с запятой, определяющих каждый маркер. Если маркер существует, его значение обновляется заданным значением. Если маркер не существует, он создаётся с заданным значением. Если аргумент равен NULL или содержит строку без маркеров, список маркеров остаётся неизменным.

    mysql> SELECT version_tokens_set('tok1=value1;tok2=value2');
    +-----------------------------------------------+
    | version_tokens_set('tok1=value1;tok2=value2') |
    +-----------------------------------------------+
    | 2 version tokens set.                         |
    +-----------------------------------------------+
    mysql> SELECT version_tokens_edit('tok2=new_value2;tok3=new_value3');
    +--------------------------------------------------------+
    | version_tokens_edit('tok2=new_value2;tok3=new_value3') |
    +--------------------------------------------------------+
    | 2 version tokens updated.                              |
    +--------------------------------------------------------+
    
  • version_tokens_set(token_list)

    Заменяет список маркеров версий на сервере маркерами, определёнными в аргументе token_list, и возвращает двоичную строку, указывающую результат операции. token_list — это список пар «имя маркера;значение», разделённых точкой с запятой, определяющих каждый маркер. Если аргумент равен NULL или содержит строку без маркеров, список маркеров очищается.

    mysql> SELECT version_tokens_set('tok1=value1;tok2=value2');
    +-----------------------------------------------+
    | version_tokens_set('tok1=value1;tok2=value2') |
    +-----------------------------------------------+
    | 2 version tokens set.                         |
    +-----------------------------------------------+
    
  • version_tokens_show()

    Возвращает список маркеров версий на сервере в виде двоичной строки, содержащей список пар «имя маркера;значение», разделённых точкой с запятой.

    mysql> SELECT version_tokens_show();
    +--------------------------+
    | version_tokens_show()    |
    +--------------------------+
    | tok2=value2;tok1=value1; |
    +--------------------------+
    

Следующие функции позволяют блокировать и разблокировать маркеры версий:

  • version_tokens_lock_exclusive(token_name[, token_name] ..., timeout)

    Приобретает эксклюзивные блокировки для одного или нескольких маркеров версий, заданных по имени как строки, с таймаутом и ошибкой, если блокировки не приобретены в течение заданного значения таймаута.

    mysql> SELECT version_tokens_lock_exclusive('lock1', 'lock2', 10);
    +-----------------------------------------------------+
    | version_tokens_lock_exclusive('lock1', 'lock2', 10) |
    +-----------------------------------------------------+
    |                                                   1 |
    +-----------------------------------------------------+
    
  • version_tokens_lock_shared(token_name[, token_name] ..., timeout)

    Приобретает общие блокировки для одного или нескольких маркеров версий, заданных по имени как строки, с таймаутом и ошибкой, если блокировки не приобретены в течение заданного значения таймаута.

    mysql> SELECT version_tokens_lock_shared('lock1', 'lock2', 10);
    +--------------------------------------------------+
    | version_tokens_lock_shared('lock1', 'lock2', 10) |
    +--------------------------------------------------+
    |                                                1 |
    +--------------------------------------------------+
    
  • version_tokens_unlock()

    Освобождает все блокировки, которые были приобретены в текущем сеансе с помощью version_tokens_lock_exclusive() и version_tokens_lock_shared().

    mysql> SELECT version_tokens_unlock();
    +-------------------------+
    | version_tokens_unlock() |
    +-------------------------+
    |                       1 |
    +-------------------------+
    

Функции блокировки обладают следующими характеристиками:

  • Возвращаемое значение отлично от нуля при успехе. В противном случае происходит ошибка.

  • Имена маркеров — строки.

  • В отличие от обработки аргументов для функций, манипулирующих списком маркеров сервера, пробелы вокруг аргументов имени маркера не игнорируются, а символы = и ; разрешены.

  • Возможно заблокировать несуществующие имена маркеров. Это не создаёт маркеры.

  • Значения таймаута — целые числа без знака, представляющие время ожидания в секундах приобретения блокировок, прежде чем истечёт таймаут с ошибкой. Если таймаут равен 0, ожидания нет, и функция создаёт ошибку, если блокировки не могут быть приобретены немедленно.

  • Функции блокировки маркеров версий основаны на службе блокировки, описанной в разделе 7.6.9.1 «Сервис блокировки».

Переменные системы токенов версий

Токены версий поддерживают следующие системные переменные. Эти переменные недоступны, если плагин Токенов версий не установлен (см. Раздел 7.6.6.2, «Установка или удаление плагина Токенов версий»).

Системные переменные:

  • version_tokens_session

    Формат командной строки --version-tokens-session=value
    Системная переменная version_tokens_session
    Область действия Глобальная, сеансовая
    Динамическая Да
    SET_VAR Применимо Нет
    Тип Строка
    Значение по умолчанию NULL

    Значение сеанса этой переменной указывает список токенов версии клиента и указывает токены, которые список токенов версии сервера должен содержать для сеанса клиента.

    Если переменная version_tokens_session имеет значение NULL (значение по умолчанию) или пустое значение, любой список токенов версии сервера соответствует. (По сути, пустое значение отключает требования соответствия.)

    Если переменная version_tokens_session имеет ненулевое значение, любое несовпадение между её значением и списком токенов версии сервера приводит к ошибке для любого оператора, отправляемого сеансом на сервер. Несовпадение происходит в следующих случаях:

    • Имя токена в значении version_tokens_session отсутствует в списке токенов сервера. В этом случае возникает ошибка.

    • Значение токена в значении version_tokens_session отличается от значения соответствующего токена в списке токенов сервера. В этом случае возникает ошибка.

    Не считается несовпадением, если список токенов версии сервера содержит токен, не указанный в значении version_tokens_session.

    Предположим, что приложение управления установило список токенов сервера следующим образом:

    mysql> SELECT version_tokens_set('tok1=a;tok2=b;tok3=c');
    +--------------------------------------------+
    | version_tokens_set('tok1=a;tok2=b;tok3=c') |
    +--------------------------------------------+
    | 3 version tokens set.                      |
    +--------------------------------------------+
    

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

    mysql> SET @@SESSION.version_tokens_session = 'tok1=a;tok2=b';
    mysql> SELECT 1;
    +---+
    | 1 |
    +---+
    | 1 |
    +---+
    
    mysql> SET @@SESSION.version_tokens_session = 'tok1=b';
    mysql> SELECT 1;
    ERROR 3136 (42000): Version token mismatch for tok1. Correct value a
    

    Первый SELECT выполняется успешно, потому что токены клиента tok1 и tok2 присутствуют в списке токенов сервера, и каждое значение токена совпадает со значением в списке сервера. Второй SELECT завершается ошибкой, потому что, хотя tok1 присутствует в списке токенов сервера, его значение отличается от указанного клиентом.

    На данном этапе любой оператор, отправленный клиентом, завершается ошибкой, если список токенов сервера не изменится таким образом, чтобы снова совпадать. Предположим, что приложение управления изменяет список токенов сервера следующим образом:

    mysql> SELECT version_tokens_edit('tok1=b');
    +-------------------------------+
    | version_tokens_edit('tok1=b') |
    +-------------------------------+
    | 1 version tokens updated.     |
    +-------------------------------+
    mysql> SELECT version_tokens_show();
    +-----------------------+
    | version_tokens_show() |
    +-----------------------+
    | tok3=c;tok1=b;tok2=b; |
    +-----------------------+
    

    Теперь значение клиента version_tokens_session соответствует списку токенов сервера, и клиент снова может успешно выполнять операторы:

    mysql> SELECT 1;
    +---+
    | 1 |
    +---+
    | 1 |
    +---+
    
  • version_tokens_session_number

    Формат командной строки --version-tokens-session-number=#
    Системная переменная version_tokens_session_number
    Область действия Глобальная, сеансовая
    Динамическая Нет
    SET_VAR Применимо Нет
    Тип Целое число
    Значение по умолчанию 0

    Эта переменная предназначена для внутреннего использования.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/version-tokens-reference.html

Spec-Zone.ru

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