Migrating percona cluster to innodb cluster for bionic -> focal upgrade following https://docs.openstack.org/project-deploy-guide/charm-deployment-guide/latest/percona-series-upgrade-to-focal.html
After the add-relation of mysql-router to any application (installing subordinate charm) the R/W innodb unit gets into: hook failed: "db-router-relation-changed"
Using latest router, revision 10, innoodb-cluster revision 8.
Removing the relation and resolve --no-retry to get back into operational state, so relation-departed runs properly.
unit-mysql-innodb-cluster-0: 09:23:50 ERROR unit.mysql-innodb-cluster/0.juju-log db-router:419: Hook error:
Traceback (most recent call last):
File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/charms/reactive/__init__.py", line 74, in main
bus.dispatch(restricted=restricted_mode)
File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/charms/reactive/bus.py", line 390, in dispatch
_invoke(other_handlers)
File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/charms/reactive/bus.py", line 359, in _invoke
handler.invoke()
File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/charms/reactive/bus.py", line 181, in invoke
self._action(*args)
File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/charm/reactive/mysql_innodb_cluster_handlers.py", line 302, in db_router_respond
if instance.create_databases_and_users(db_router):
File "lib/charm/openstack/mysql_innodb_cluster.py", line 1181, in create_databases_and_users
password = self.configure_db_router(
File "lib/charm/openstack/mysql_innodb_cluster.py", line 1318, in configure_db_router
password = rw_helper.configure_router(host, username)
File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/charmhelpers/contrib/database/mysql.py", line 774, in configure_router
self.create_router_grant(username, remote_ip, password)
File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/charmhelpers/contrib/database/mysql.py", line 747, in create_router_grant
cursor.execute("GRANT CREATE USER ON *.* TO '{}'@'{}' WITH GRANT "
File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/MySQLdb/cursors.py", line 206, in execute
res = self._query(query)
File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/MySQLdb/cursors.py", line 319, in _query
db.query(q)
File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/MySQLdb/connections.py", line 259, in query
_mysql.connection.query(self, query)
MySQLdb._exceptions.OperationalError: (1785, 'Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.')
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed Traceback (most recent call last):
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/charm/hooks/db-router-relation-changed", line 22, in <module>
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed main()
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/charms/reactive/__init__.py", line 74, in main
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed bus.dispatch(restricted=restricted_mode)
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/charms/reactive/bus.py", line 390, in dispatch
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed _invoke(other_handlers)
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/charms/reactive/bus.py", line 359, in _invoke
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed handler.invoke()
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/charms/reactive/bus.py", line 181, in invoke
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed self._action(*args)
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/charm/reactive/mysql_innodb_cluster_handlers.py", line 302, in db_router_respond
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed if instance.create_databases_and_users(db_router):
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "lib/charm/openstack/mysql_innodb_cluster.py", line 1181, in create_databases_and_users
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed password = self.configure_db_router(
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "lib/charm/openstack/mysql_innodb_cluster.py", line 1318, in configure_db_router
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed password = rw_helper.configure_router(host, username)
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/charmhelpers/contrib/database/mysql.py", line 774, in configure_router
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed self.create_router_grant(username, remote_ip, password)
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/charmhelpers/contrib/database/mysql.py", line 747, in create_router_grant
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed cursor.execute("GRANT CREATE USER ON *.* TO '{}'@'{}' WITH GRANT "
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/MySQLdb/cursors.py", line 206, in execute
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed res = self._query(query)
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/MySQLdb/cursors.py", line 319, in _query
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed db.query(q)
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed File "/var/lib/juju/agents/unit-mysql-innodb-cluster-0/.venv/lib/python3.8/site-packages/MySQLdb/connections.py", line 259, in query
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed _mysql.connection.query(self, query)
unit-mysql-innodb-cluster-0: 09:23:50 WARNING unit.mysql-innodb-cluster/0.db-router-relation-changed MySQLdb._exceptions.OperationalError: (1785, 'Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.')
unit-mysql-innodb-cluster-0: 09:23:50 ERROR juju.worker.uniter.operation hook "db-router-relation-changed" (via explicit, bespoke hook script) failed: exit status 1
A shorter piece of output which is of interest:
File "/var/lib/ juju/agents/ unit-mysql- innodb- cluster- 0/charm/ reactive/ mysql_innodb_ cluster_ handlers. py", line 302, in db_router_respond create_ databases_ and_users( db_router) : openstack/ mysql_innodb_ cluster. py", line 1181, in create_ databases_ and_users db_router( openstack/ mysql_innodb_ cluster. py", line 1318, in configure_db_router configure_ router( host, username) juju/agents/ unit-mysql- innodb- cluster- 0/.venv/ lib/python3. 8/site- packages/ charmhelpers/ contrib/ database/ mysql.py" , line 774, in configure_router create_ router_ grant(username, remote_ip, password) juju/agents/ unit-mysql- innodb- cluster- 0/.venv/ lib/python3. 8/site- packages/ charmhelpers/ contrib/ database/ mysql.py" , line 747, in create_router_grant execute( "GRANT CREATE USER ON *.* TO '{}'@'{}' WITH GRANT "
if instance.
File "lib/charm/
password = self.configure_
File "lib/charm/
password = rw_helper.
File "/var/lib/
self.
File "/var/lib/
cursor.
MySQLdb. _exceptions. OperationalErro r: (1785, 'Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables.')
So the issue appears when the charm tries to assign a permission to a user to create new users with the right to delegate this permission.