Как исправить ошибку миграции базы данных модуля 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 использует их для отслеживания количества резервных виртуальных машин в проекте.
Решение¶
Для решения данной проблемы необходимо выполнить следующие действия:
Наделите привилегией
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;
Установите параметр
GLOBAL log_bin_trust_function_creators =1
:mysql -u tionix -p SET GLOBAL log_bin_trust_function_creators =1; FLUSH PRIVILEGES; exit;
Этот параметр позволяет работать с недетерминированными функциями.
После успешного выполнения действий миграция базы данных модулей проходит успешно.