[debian-mysql] Bug#1037327: MariaDB upgrade fails if page compressed tables exist already due to plugin dependency

Otto Kekäläinen otto at kekalainen.net
Sun Jun 11 22:49:03 BST 2023


Hello!

It seems the issue is with dpkg not making the new config files
available using the correct name:

# apt install mariadb-plugin-provider-lz4
Setting up mariadb-server (1:10.11.4-1) ...
Stopping MariaDB database server: mariadbd.
Starting MariaDB database server: mariadbd . . . . .
Running '/etc/init.d/mariadb start' failed with error log:
230611 20:15:15 mysqld_safe Starting mariadbd daemon with databases
from /var/lib/mysql
2023-06-11 20:15:15 0 [Note] Starting MariaDB 10.11.4-MariaDB-1 source
revision  as process 4570
2023-06-11 20:15:15 0 [ERROR] mariadbd: InnoDB: compression algorithm
lz4 (2) is not available. Please, load the corresponding provider
plugin.
2023-06-11 20:15:15 0 [ERROR] Plugin 'InnoDB' init function returned error.
2023-06-11 20:15:15 0 [ERROR] Plugin 'InnoDB' registration as a
STORAGE ENGINE failed.
2023-06-11 20:15:15 0 [Note] Plugin 'FEEDBACK' is disabled.
2023-06-11 20:15:15 0 [ERROR] Unknown/unsupported storage engine: InnoDB
2023-06-11 20:15:15 0 [ERROR] Aborting

# ls -la /usr/lib/mysql/plugin/provider_lz4.so
-rw-r--r-- 1 root root 14192 Jun  4 18:22 /usr/lib/mysql/plugin/provider_lz4.so

# find /etc/mysql/mariadb.conf.d
/etc/mysql/mariadb.conf.d/50-client.cnf
/etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
/etc/mysql/mariadb.conf.d/60-galera.cnf
/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf
/etc/mysql/mariadb.conf.d/innodb-lz-compression.cnf
/etc/mysql/mariadb.conf.d/provider_bzip2.cnf.dpkg-new
/etc/mysql/mariadb.conf.d/provider_lz4.cnf.dpkg-new
/etc/mysql/mariadb.conf.d/provider_lzma.cnf.dpkg-new
/etc/mysql/mariadb.conf.d/provider_lzo.cnf.dpkg-new
/etc/mysql/mariadb.conf.d/provider_snappy.cnf.dpkg-new
/etc/mysql/mariadb.conf.d/50-server.cnf

# cat /etc/mysql/mariadb.conf.d/provider_lz4.cnf.dpkg-new
[server]
plugin_load_add=provider_lz4
provider_lz4=force_plus_permanent

# cp -a /etc/mysql/mariadb.conf.d/provider_lz4.cnf.dpkg-new
/etc/mysql/mariadb.conf.d/provider_lz4.cnf

# apt install mariadb-plugin-provider-lz4
mariadb-plugin-provider-lz4 is already the newest version (1:10.11.4-1).
Setting up mariadb-server (1:10.11.4-1) ...
Stopping MariaDB database server: mariadbd.
Starting MariaDB database server: mariadbd.
Setting up mariadb-plugin-provider-lz4 (1:10.11.4-1) ...
Setting up mariadb-server-10.5 (1:10.11.4-1) ...
Processing triggers for mariadb-server (1:10.11.4-1) ...
Stopping MariaDB database server: mariadbdERROR 2002 (HY000): Can't
connect to local server through socket '/run/mysqld/mysqld.sock' (2)
Starting MariaDB database server: mariadbd.

# find /etc/mysql/mariadb.conf.d
/etc/mysql/mariadb.conf.d
/etc/mysql/mariadb.conf.d/50-client.cnf
/etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
/etc/mysql/mariadb.conf.d/60-galera.cnf
/etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf
/etc/mysql/mariadb.conf.d/innodb-lz-compression.cnf
/etc/mysql/mariadb.conf.d/50-server.cnf
/etc/mysql/mariadb.conf.d/provider_lz4.cnf
/etc/mysql/mariadb.conf.d/provider_bzip2.cnf
/etc/mysql/mariadb.conf.d/provider_lzma.cnf
/etc/mysql/mariadb.conf.d/provider_lzo.cnf
/etc/mysql/mariadb.conf.d/provider_snappy.cnf

The are renamed from *.cnf.dpkg-new to *.cnf only after the
installation completes.

Perhaps the solution involves adjusting the time when the
restart/reload is triggered and somehow force it to happen as late as
possible, to ensure the 'Setting up mariadb-plugin-provider-lz4' has
happened before server restarts
(https://salsa.debian.org/mariadb-team/mariadb-server/-/blob/debian/latest/debian/rules#L239-243).


I added a test case for this in
https://salsa.debian.org/otto/mariadb-server/-/commits/bugfix/1037327-upgrades-need-provider-plugin-lz
and it fails (as expected) in
https://salsa.debian.org/otto/mariadb-server/-/jobs/4297516 but if we
come up with a solution, at least we have now a test to validate it.



More information about the pkg-mysql-maint mailing list