core: Database error during schema migration 'Index column size too large. The maximum column size is 767 bytes.'
The problem
I Updated HA a few days ago. I am not sure from which version, could be core_2021.5.5. After the reboot, I received a notification that the database migration failed.
I am using MariaDB on a different host.
The database URL first was: mysql://username:password@192.168.222.4/homeassistant
After the failed migration I added the charset option: mysql://username:password@192.168.222.4/homeassistant?charset=utf8mb4
But after a reboot the migration still fails.
What is version of Home Assistant Core has the issue?
core-2021.6.3
What was the last working version of Home Assistant Core?
No response
What type of installation are you running?
Home Assistant OS
Integration causing the issue
recorder
Link to integration documentation on our website
https://www.home-assistant.io/integrations/recorder
Example YAML snippet
mysql://username:password@192.168.222.4/homeassistant?charset=utf8mb4
Anything in the logs that might be useful for us?
Logger: homeassistant.components.recorder.util
Source: components/recorder/util.py:68
Logger: homeassistant.components.recorder.migration
Source: components/recorder/migration.py:58
Integration: Recorder (documentation, issues)
First occurred: June 10, 2021, 4:33:08 PM (1 occurrences)
Last logged: June 10, 2021, 4:33:08 PM
Database is about to upgrade. Schema version: 14
Integration: Recorder (documentation, issues)
First occurred: June 10, 2021, 4:33:08 PM (1 occurrences)
Last logged: June 10, 2021, 4:33:08 PM
Error executing query: (MySQLdb._exceptions.OperationalError) (1709, 'Index column size too large. The maximum column size is 767 bytes.') [SQL: CREATE INDEX ix_statistics_statistic_id_start ON statistics (statistic_id, start)] (Background on this error at: http://sqlalche.me/e/14/e3q8)
Logger: homeassistant.components.recorder
Source: components/recorder/migration.py:450
Integration: Recorder (documentation, issues)
First occurred: June 10, 2021, 4:33:08 PM (1 occurrences)
Last logged: June 10, 2021, 4:33:08 PM
Database error during schema migration
Traceback (most recent call last):
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1763, in _execute_context
self.dialect.do_execute(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 717, in do_execute
cursor.execute(statement, parameters)
File "/usr/local/lib/python3.8/site-packages/MySQLdb/cursors.py", line 206, in execute
res = self._query(query)
File "/usr/local/lib/python3.8/site-packages/MySQLdb/cursors.py", line 319, in _query
db.query(q)
File "/usr/local/lib/python3.8/site-packages/MySQLdb/connections.py", line 259, in query
_mysql.connection.query(self, query)
MySQLdb._exceptions.OperationalError: (1709, 'Index column size too large. The maximum column size is 767 bytes.')
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/src/homeassistant/homeassistant/components/recorder/__init__.py", line 683, in _migrate_schema_and_setup_run
migration.migrate_schema(self, current_version)
File "/usr/src/homeassistant/homeassistant/components/recorder/migration.py", line 64, in migrate_schema
_apply_update(instance.engine, session, new_version, current_version)
File "/usr/src/homeassistant/homeassistant/components/recorder/migration.py", line 450, in _apply_update
Statistics.__table__.create(engine)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/sql/schema.py", line 943, in create
bind._run_ddl_visitor(ddl.SchemaGenerator, self, checkfirst=checkfirst)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 3075, in _run_ddl_visitor
conn._run_ddl_visitor(visitorcallable, element, **kwargs)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 2074, in _run_ddl_visitor
visitorcallable(self.dialect, self, **kwargs).traverse_single(element)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/sql/visitors.py", line 483, in traverse_single
return meth(obj, **kw)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/sql/ddl.py", line 902, in visit_table
self.traverse_single(index, create_ok=True)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/sql/visitors.py", line 483, in traverse_single
return meth(obj, **kw)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/sql/ddl.py", line 933, in visit_index
self.connection.execute(CreateIndex(index))
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1258, in execute
return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS)
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/sql/ddl.py", line 77, in _execute_on_connection
return connection._execute_ddl(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1348, in _execute_ddl
ret = self._execute_context(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1806, in _execute_context
self._handle_dbapi_exception(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1987, in _handle_dbapi_exception
util.raise_(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/util/compat.py", line 211, in raise_
raise exception
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/base.py", line 1763, in _execute_context
self.dialect.do_execute(
File "/usr/local/lib/python3.8/site-packages/sqlalchemy/engine/default.py", line 717, in do_execute
cursor.execute(statement, parameters)
File "/usr/local/lib/python3.8/site-packages/MySQLdb/cursors.py", line 206, in execute
res = self._query(query)
File "/usr/local/lib/python3.8/site-packages/MySQLdb/cursors.py", line 319, in _query
db.query(q)
File "/usr/local/lib/python3.8/site-packages/MySQLdb/connections.py", line 259, in query
_mysql.connection.query(self, query)
sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1709, 'Index column size too large. The maximum column size is 767 bytes.')
[SQL: CREATE INDEX ix_statistics_statistic_id_start ON statistics (statistic_id, start)]
(Background on this error at: http://sqlalche.me/e/14/e3q8)
Additional information
No response
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Comments: 20 (13 by maintainers)
innodb_default_row_format = dynamicwas also one of the suggested commands. It seems this one did the trick.