Thanks @bb77 , @Derkades
adding command: ['--innodb_read_only_compressed=OFF']
solved it and i will definitely specify major versions in docker-compose from now on!
The full explanation is in this MariaDB KB article:
- Since MariaDB 10.1, an alternative (and usually superior) way to compress InnoDB tables is by using InnoDB Page Compression. See Comparison with the COMPRESSED Row Format.
- From MariaDB 10.6.0, tables that are of the
COMPRESSED
row format are read-only by default. This is the first step towards removing write support and deprecating the feature. Set the innodb_read_only_compressed variable toOFF
to make the tables writable.
If you have access to /etc/my.cnf.d/server.cnf
, you may temporarily mitigate the issue by adding a line innodb_read_only_compressed=OFF
to the section [mysqld]
.
However, this is a workaround rather that a solution. Tables MUST be migrated, should be migrated automatically by Nextcloud and hopefully will by a NC update soon. I think it is wise NOT to touch the table’s definition in order not to thwart the NC migration that hopefully comes prior to MariaDB’s next step against innodb-compressed-row-format.
Also note that there already is a bug report for this. A quote from a NC dev there: Nextcloud does NOT support MariaDB 10.6. The reason is the compressed row format. Either stick with MariaDB 10.5 or add --innodb-read-only-compressed=OFF
to make compressed tables writeable. #25436 is the issue to track progress. It’s on the roadmap. A solution requires a migration of the row format to something different. Don’t expect this for Nextcloud 22 / 23.
I ran into the same issue in my homelab running nextcloud with latest and MariaDB with latest. I know its stupid to use latest and just upgrade blindly but its not a critical system for me. I have now defined versions in the docker-compose file.
I went back to 10.5.11 for MariaDB. Ran the repair command, added the phone region setting and then turned of maintenance mode. Seems to work fine for me now.
Will have to use my good friend google and try to figure out how one should upgrade containers. Preferrably in way where you can easily revert everything. I feel like everytime I do it sometime can break and never work properly again. If it were a VM I could easily snapshot, but with docker containers im not sure how it should be done.
Thank a lot! Work for me: Docker NC: 22.0.0 + MARIADB: 1:10.6.3+maria~focal
version: ‘2’
services:
db:
image: mariadb
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW –innodb-read-only-compressed=OFF
volumes:
- xx:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=xx
- MYSQL_PASSWORD=xx
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
This fixed it for me!
–innodb-read-only-compressed=OFF
Do I know why? NO!
Does it matter? eeeeeee
I have updated to nextcloud 21 and all worked well,
but some time later i cannot login and do anything,
i looked in my logs and see the same error as in this post,
but for me there was a very simple fix
you must convert the database tables to dynamic tables because otherwise nextcloud cannot write because the are read only,
and because nextcloud has very much tables (that’s my opinion)
there is a bash script for it, you can find it below
Very much thanks to lxadm.com for writing the script, here it is
https://lxadm.com/MySQL:_changing_ROW_FORMAT_to_DYNAMIC_or_COMPRESSED
it will just convert the tables in seconds and then without restart my nextcloud was working again
I hope this also works for you
Best Regards
Jurian Post
but this also works for me
(after searching some time to the config file)
in my case it was /etc/mysql/mariadb.conf.d/50-server.cnf
After that it also works great
This fixed my instance as well. Thanks for posting
That worked for me as well. Thanks.
I still have the issue, eventhough i’ve got that set