Как исправить ошибку миграции базы данных модуля TIONIX.VDIserver при использовании Galera Cluster?

Параметры используемой системы

Linux CentOS release 7.6.1810 и OpenStack Queens, настроенный в режиме высокой доступности. База данных настроена с помощью Galera Cluster и состоит из трех узлов.

Описание

При выполнении миграции базы данных модуля TIONIX.VDIserver была обнаружена ошибка:

openstack tnx db migrate -n tnx_vdi_server --verbose
START with options: [u'tnx', u'db', u'migrate', u'-n', u'tnx_vdi_server', u'--verbose']
command: tnx db migrate -> tionix_client.osc.v1.db_migrate.RunDbMigrate (auth=False)
Обработка модулей: tnx_vdi_server
============================
Таблица миграций базы данных
============================
+-+-------------------+-------+-------------------------------------------------------------------------------------+
|N|Наименование модуля|Статус |Результат                                                                            |
+-+-------------------+-------+-------------------------------------------------------------------------------------+
|1|TIONIX.VDIserver   |НЕУДАЧА|Ошибка в процессе миграции базы данных: (pymysql.err.InternalError) (1419, u'You do  |
| |                   |       |not have the SUPER privilege and binary logging is enabled (you *might* want to use  |
| |                   |       |the less safe log_bin_trust_function_creators variable)') [SQL: u'CREATE TRIGGER     |
| |                   |       |reserve_servers_create AFTER INSERT ON servers FOR EACH ROW BEGIN IF NEW.deleted = 0 |
| |                   |       |THEN UPDATE projects SET projects.reserve = projects.reserve + 1 WHERE BINARY        |
| |                   |       |projects.project_id = BINARY NEW.project_id AND projects.deleted = 0; END IF;END;']  |
| |                   |       |(Background on this error at: http://sqlalche.me/e/2j85)                             |
+-+-------------------+-------+-------------------------------------------------------------------------------------+
END return value: True

Эта проблема возникает ввиду того, что при включенной репликации данных запрещено использование недетерминированных функций, однако TIONIX.VDIserver использует их для отслеживания количества резервных виртуальных машин в проекте.

Решение

Для решения данной проблемы необходимо выполнить следующие действия:

  1. Наделите привилегией SUPER пользователя, который подключается к базе данных модулей TIONIX. В нашем случае это пользователь tionix:

    mysql -uroot -p
    GRANT SUPER ON *.* TO 'tionix'@'localhost' IDENTIFIED BY 'password';
    GRANT SUPER ON *.* TO 'tionix'@'%' IDENTIFIED BY 'password';
    GRANT SUPER ON *.* TO 'tionix'@'controller1.hostname' IDENTIFIED BY 'password';
    GRANT SUPER ON *.* TO 'tionix'@'controller2.hostname' IDENTIFIED BY 'password';
    GRANT SUPER ON *.* TO 'tionix'@'controller3.hostname ' IDENTIFIED BY 'password';
    GRANT SUPER ON *.* TO 'tionix'@'ha.hostname ' IDENTIFIED BY 'password';
    GRANT SUPER ON *.* TO 'tionix'@'ha.hostname' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
    exit;
    
  2. Установите параметр GLOBAL log_bin_trust_function_creators =1:

    mysql -u tionix -p
    SET GLOBAL log_bin_trust_function_creators =1;
    FLUSH PRIVILEGES;
    exit;
    

    Этот параметр позволяет работать с недетерминированными функциями.

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