[GH-ISSUE #7268] Error MariaDB 11.X #35616

Open
opened 2026-07-13 20:27:09 -05:00 by GiteaMirror · 86 comments
Owner

Originally created by @madito on GitHub (May 28, 2026).
Original GitHub issue: https://github.com/dani-garcia/vaultwarden/issues/7268

Prerequisites

Vaultwarden Support String

Service Down

Vaultwarden Build Version

1.36

Deployment method

Manually Extracted from Container Image

Custom deployment method

No response

Reverse Proxy

nginx

Host/Server Operating System

Linux

Operating System Version

Ubuntu 24.04

Clients

Web Vault

Client Version

No response

Steps To Reproduce

Hi,

I performed a migration from one server to another, keeping the Ubuntu OS. Currently, when I start Vaultwarder version 1.36, I get a migration error. The database collation is correct (CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci). I temporarily replicated a local installation, only changing the database engine from MariaDB to MySQL, and it works correctly. It seems the problem is with MariaDB.

I deleted my database so that the database schema would be generated on the first boot. When I stop the service and restart it, the new database it just created gives the exact same error as my original database.

Versions:

1.36 Vaultwarden (extrac to docker and compile).
mariadb from 11.8.8-MariaDB, client 15.2 for debian-linux-gnu (x86_64) using EditLine wrapper
Ubuntu 24.04.4

Expected Result

Up the service.

Actual Result

[12:29:08.932 28-05-2026][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("202604251 20000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501
0: vaultwarden::init_logging::{{closure}}
1: std::panicking::panic_with_hook
2: std::panicking::panic_handler::{closure#0}
3: std::sys::backtrace::__rust_end_short_backtrace::<std::panicking::panic_handler::{closure#0}, !>
4: __rustc::rust_begin_unwind
5: core::panicking::panic_fmt
6: core::result::unwrap_failed
7: vaultwarden::db::DbPool::from_config
8: vaultwarden::main::{{closure}}
9: vaultwarden::main
10: std::sys::backtrace::__rust_begin_short_backtrace
11: main
12:
13: __libc_start_main
14: _start

Logs


Screenshots or Videos

No response

Additional Context

No response

Originally created by @madito on GitHub (May 28, 2026). Original GitHub issue: https://github.com/dani-garcia/vaultwarden/issues/7268 ### Prerequisites - [x] I have searched the existing **Closed _AND_ Open** [Issues](https://github.com/dani-garcia/vaultwarden/issues?q=is%3Aissue%20) **_AND_** [Discussions](https://github.com/dani-garcia/vaultwarden/discussions?discussions_q=) - [x] I have searched and read the [documentation](https://github.com/dani-garcia/vaultwarden/wiki/) ### Vaultwarden Support String Service Down ### Vaultwarden Build Version 1.36 ### Deployment method Manually Extracted from Container Image ### Custom deployment method _No response_ ### Reverse Proxy nginx ### Host/Server Operating System Linux ### Operating System Version Ubuntu 24.04 ### Clients Web Vault ### Client Version _No response_ ### Steps To Reproduce Hi, I performed a migration from one server to another, keeping the Ubuntu OS. Currently, when I start Vaultwarder version 1.36, I get a migration error. The database collation is correct (CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci). I temporarily replicated a local installation, only changing the database engine from MariaDB to MySQL, and it works correctly. It seems the problem is with MariaDB. I deleted my database so that the database schema would be generated on the first boot. When I stop the service and restart it, the new database it just created gives the exact same error as my original database. Versions: 1.36 Vaultwarden (extrac to docker and compile). mariadb from 11.8.8-MariaDB, client 15.2 for debian-linux-gnu (x86_64) using EditLine wrapper Ubuntu 24.04.4 ### Expected Result Up the service. ### Actual Result [12:29:08.932 28-05-2026][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("202604251 20000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501 0: vaultwarden::init_logging::{{closure}} 1: std::panicking::panic_with_hook 2: std::panicking::panic_handler::{closure#0} 3: std::sys::backtrace::__rust_end_short_backtrace::<std::panicking::panic_handler::{closure#0}, !> 4: __rustc::rust_begin_unwind 5: core::panicking::panic_fmt 6: core::result::unwrap_failed 7: vaultwarden::db::DbPool::from_config 8: vaultwarden::main::{{closure}} 9: vaultwarden::main 10: std::sys::backtrace::__rust_begin_short_backtrace 11: main 12: <unknown> 13: __libc_start_main 14: _start ### Logs ```text ``` ### Screenshots or Videos _No response_ ### Additional Context _No response_
GiteaMirror added the bug label 2026-07-13 20:27:09 -05:00
Author
Owner

@jirireischig commented on GitHub (May 29, 2026):

This problem look like similar to #7241

<!-- gh-comment-id:4574733815 --> @jirireischig commented on GitHub (May 29, 2026): This problem look like similar to #7241
Author
Owner

@blind-oracle commented on GitHub (Jun 1, 2026):

The same happens for me. The binding_hash column from migration script (d626ea81ab/migrations/mysql/2026-04-25-120000_sso_auth_binding/up.sql) gets created:

MariaDB [bitwarden]> describe sso_auth;
+------------------+--------------+------+-----+---------------------+-------+
| Field            | Type         | Null | Key | Default             | Extra |
+------------------+--------------+------+-----+---------------------+-------+
| state            | varchar(512) | NO   | PRI | NULL                |       |
| client_challenge | text         | NO   |     | NULL                |       |
| nonce            | text         | NO   |     | NULL                |       |
| redirect_uri     | text         | NO   |     | NULL                |       |
| code_response    | text         | YES  |     | NULL                |       |
| auth_response    | text         | YES  |     | NULL                |       |
| created_at       | timestamp    | NO   |     | current_timestamp() |       |
| updated_at       | timestamp    | NO   |     | current_timestamp() |       |
| binding_hash     | text         | YES  |     | NULL                |       |
+------------------+--------------+------+-----+---------------------+-------+
9 rows in set (0.001 sec)

But the error still persist. If I drop the column, it gets created again on Vaultwarden restart but it still emits the same error. Some migration logic is cooked.

@jirireischig no it does not.

<!-- gh-comment-id:4592977143 --> @blind-oracle commented on GitHub (Jun 1, 2026): The same happens for me. The `binding_hash` column from migration script (https://github.com/dani-garcia/vaultwarden/blob/d626ea81abf8504b7e54be14b0cfaf45134171b6/migrations/mysql/2026-04-25-120000_sso_auth_binding/up.sql) gets created: ``` MariaDB [bitwarden]> describe sso_auth; +------------------+--------------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------+--------------+------+-----+---------------------+-------+ | state | varchar(512) | NO | PRI | NULL | | | client_challenge | text | NO | | NULL | | | nonce | text | NO | | NULL | | | redirect_uri | text | NO | | NULL | | | code_response | text | YES | | NULL | | | auth_response | text | YES | | NULL | | | created_at | timestamp | NO | | current_timestamp() | | | updated_at | timestamp | NO | | current_timestamp() | | | binding_hash | text | YES | | NULL | | +------------------+--------------+------+-----+---------------------+-------+ 9 rows in set (0.001 sec) ``` But the error still persist. If I drop the column, it gets created again on Vaultwarden restart but it still emits the same error. Some migration logic is cooked. @jirireischig no it does not.
Author
Owner

@jirireischig commented on GitHub (Jun 1, 2026):

@blind-oracle I was trying all the same things with db update scripts in Vaultwarden with same result.
If you try downgrade your MariaDB libs, your instance will be started OK.

<!-- gh-comment-id:4593324268 --> @jirireischig commented on GitHub (Jun 1, 2026): @blind-oracle I was trying all the same things with db update scripts in Vaultwarden with same result. If you try downgrade your MariaDB libs, your instance will be started OK.
Author
Owner

@blind-oracle commented on GitHub (Jun 1, 2026):

@jirireischig Thanks, this is very weird. At least the symptoms are a bit different.

<!-- gh-comment-id:4593546919 --> @blind-oracle commented on GitHub (Jun 1, 2026): @jirireischig Thanks, this is very weird. At least the symptoms are a bit different.
Author
Owner

@CountMurphy commented on GitHub (Jun 3, 2026):

Had the exact same problem from updating from mariadb 12.2.2 -> 12.3.2 (on Arch). Thanks to @jirireischig I downgraded and everything seems ok. I was a little worried because I ran mariadb-upgrade after the upgrade, but both vaultwarden and mariadb seem fine now.

I think https://github.com/dani-garcia/vaultwarden/blob/d626ea81abf8504b7e54be14b0cfaf45134171b6/migrations/mysql/2026-04-25-120000_sso_auth_binding/up.sql needs a IF NOT EXISTS

<!-- gh-comment-id:4614270591 --> @CountMurphy commented on GitHub (Jun 3, 2026): Had the exact same problem from updating from mariadb 12.2.2 -> 12.3.2 (on Arch). Thanks to @jirireischig I downgraded and everything seems ok. I was a little worried because I ran mariadb-upgrade after the upgrade, but both vaultwarden and mariadb seem fine now. I think `https://github.com/dani-garcia/vaultwarden/blob/d626ea81abf8504b7e54be14b0cfaf45134171b6/migrations/mysql/2026-04-25-120000_sso_auth_binding/up.sql` needs a `IF NOT EXISTS`
Author
Owner

@madito commented on GitHub (Jun 4, 2026):

Hi, it doesn't seem to be related to migrations; it's a problem with the database engine. At least with the latest versions of MariaDB 10.X and 11.X, it doesn't seem to work.

<!-- gh-comment-id:4624708037 --> @madito commented on GitHub (Jun 4, 2026): Hi, it doesn't seem to be related to migrations; it's a problem with the database engine. At least with the latest versions of MariaDB 10.X and 11.X, it doesn't seem to work.
Author
Owner

@BlackDex commented on GitHub (Jun 5, 2026):

I'm not sure what to say here, I'm not able to reproduce this in any way.

I have tried to start with MariaDB v12.2.2 use Vaultwarden v1.35.0, create an account, login etc...
Then updated to MariaDB v12.3.2, start Vaultwarden again, all fine. Then update Vaultwarden to v1.36.0, which does some migrations, and it starts without any issues, no error messages regarding anything.

I tried both Debian and Alpine based images of Vaultwarden and i also tried to go from MariaDB v11 straight to v12, and i can't reproduce the issue in any way.

I think d626ea81ab/migrations/mysql/2026-04-25-120000_sso_auth_binding/up.sql needs a IF NOT EXISTS

That would be illogical, as that column shouldn't exists in the first place, and therefor shouldn't be needed to add that at all.

Maybe something else is wrong in the schema which doesn't pop-up right away? I will dump the final schema of Vaultwarden v1.36.0 here using MariaDB v12.3.2, maybe it helps finding something strange. Note that i just used the defaults regarding charset and collation.

mariadb-schema.sql

<!-- gh-comment-id:4632618157 --> @BlackDex commented on GitHub (Jun 5, 2026): I'm not sure what to say here, I'm not able to reproduce this in any way. I have tried to start with MariaDB v12.2.2 use Vaultwarden v1.35.0, create an account, login etc... Then updated to MariaDB v12.3.2, start Vaultwarden again, all fine. Then update Vaultwarden to v1.36.0, which does some migrations, and it starts without any issues, no error messages regarding anything. I tried both Debian and Alpine based images of Vaultwarden and i also tried to go from MariaDB v11 straight to v12, and i can't reproduce the issue in any way. >I think https://github.com/dani-garcia/vaultwarden/blob/d626ea81abf8504b7e54be14b0cfaf45134171b6/migrations/mysql/2026-04-25-120000_sso_auth_binding/up.sql needs a IF NOT EXISTS That would be illogical, as that column shouldn't exists in the first place, and therefor shouldn't be needed to add that at all. Maybe something else is wrong in the schema which doesn't pop-up right away? I will dump the final schema of Vaultwarden v1.36.0 here using MariaDB v12.3.2, maybe it helps finding something strange. Note that i just used the defaults regarding charset and collation. [mariadb-schema.sql](https://github.com/user-attachments/files/28642898/mariadb-schema.sql)
Author
Owner

@blind-oracle commented on GitHub (Jun 5, 2026):

@BlackDex

This happens to me stably on Ubuntu 24 with MariaDB 10.11.18 installed from MariaDB's official repos (https://mirror.mva-n.net/mariadb/repo/10.11/ubuntu). It seems to be unrelated to the migration scripts, just some weird client protocol problem probably manifests this way...

Currently I've downgraded to 10.11.16 and pinned it using apt-mark hold - it immediately started to work again.

<!-- gh-comment-id:4632822775 --> @blind-oracle commented on GitHub (Jun 5, 2026): @BlackDex This happens to me stably on Ubuntu 24 with MariaDB `10.11.18` installed from MariaDB's official repos (https://mirror.mva-n.net/mariadb/repo/10.11/ubuntu). It seems to be unrelated to the migration scripts, just some weird client protocol problem probably manifests this way... Currently I've downgraded to `10.11.16` and pinned it using `apt-mark hold` - it immediately started to work again.
Author
Owner

@madito commented on GitHub (Jun 5, 2026):

@blind-oracle This also happens in any version of 11.X from Ubuntu onwards. I first tried with 11.4 and then with 11.8 and it's still the same. However, it doesn't happen if we use MySQL or one of the MariaDB versions you mentioned, 10.11.16.

Or it could also be the combination of MariaDB + Ubuntu 24.04.

<!-- gh-comment-id:4632835168 --> @madito commented on GitHub (Jun 5, 2026): @blind-oracle This also happens in any version of 11.X from Ubuntu onwards. I first tried with 11.4 and then with 11.8 and it's still the same. However, it doesn't happen if we use MySQL or one of the MariaDB versions you mentioned, 10.11.16. Or it could also be the combination of MariaDB + Ubuntu 24.04.
Author
Owner

@BlackDex commented on GitHub (Jun 5, 2026):

Well, Canonical might have patched their version with some other fixes, or omitted some changes which could be needed maybe? It might even be a different library not even linked to MariaDB it self.

But, the images i used report Ubuntu 24.04 version of the binary, but those are official MariaDB container images, not sure if there is a difference there.

<!-- gh-comment-id:4632888126 --> @BlackDex commented on GitHub (Jun 5, 2026): Well, Canonical might have patched their version with some other fixes, or omitted some changes which could be needed maybe? It might even be a different library not even linked to MariaDB it self. But, the images i used report Ubuntu 24.04 version of the binary, but those are official MariaDB container images, not sure if there is a difference there.
Author
Owner

@madito commented on GitHub (Jun 5, 2026):

Hi!

I found a solution using mariadb from 12.0.2-MariaDB.

The steps

  1. Remove old repo and install new:

sudo rm -f /etc/apt/sources.list.d/mariadb.list

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://mariadb.org/mariadb_release_signing_key.asc | sudo gpg --dearmor -o /etc/apt/keyrings/mariadb.gpg

echo "deb [arch=amd64,arm64 signed-by=/etc/apt/keyrings/mariadb.gpg] https://dlm.mariadb.com/repo/mariadb-server/12.0/repo/ubuntu noble main" | sudo tee /etc/apt/sources.list.d/mariadb.list

  1. Set priority MariaDB repo:

sudo tee /etc/apt/preferences.d/mariadb.pref >/dev/null <<'EOF'
Package: *
Pin: origin dlm.mariadb.com
Pin-Priority: 700
EOF

  1. Install all
    sudo apt update && apt upgrade

All works fine for me.

Thanks!

<!-- gh-comment-id:4633015409 --> @madito commented on GitHub (Jun 5, 2026): Hi! I found a solution using mariadb from 12.0.2-MariaDB. The steps 1. Remove old repo and install new: sudo rm -f /etc/apt/sources.list.d/mariadb.list sudo mkdir -p /etc/apt/keyrings curl -fsSL https://mariadb.org/mariadb_release_signing_key.asc | sudo gpg --dearmor -o /etc/apt/keyrings/mariadb.gpg echo "deb [arch=amd64,arm64 signed-by=/etc/apt/keyrings/mariadb.gpg] https://dlm.mariadb.com/repo/mariadb-server/12.0/repo/ubuntu noble main" | sudo tee /etc/apt/sources.list.d/mariadb.list 2. Set priority MariaDB repo: sudo tee /etc/apt/preferences.d/mariadb.pref >/dev/null <<'EOF' Package: * Pin: origin dlm.mariadb.com Pin-Priority: 700 EOF 3. Install all sudo apt update && apt upgrade All works fine for me. Thanks!
Author
Owner

@CountMurphy commented on GitHub (Jun 5, 2026):

That would be illogical, as that column shouldn't exists in the first place, and therefor shouldn't be needed to add that at all.

Probably, but something is causing it to run twice.

Jun 05 08:30:12 harbinger vaultwarden[554083]: [2026-06-05 08:30:12.971][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("20260425120000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501

So started playing with it a little again. I can upgrade the database to 12.3.2, restart the database and vault warden is fine. If I restart vault warden, it throws the above error and crashes. Unfortunately, I'm not running ubuntu so I can't comment on madito's fix. Not sure what else I can do to help. Would running vault warden with strace produce anything useful to help debug? Are there other logs the application writes to that I can share?

<!-- gh-comment-id:4633150505 --> @CountMurphy commented on GitHub (Jun 5, 2026): ``` That would be illogical, as that column shouldn't exists in the first place, and therefor shouldn't be needed to add that at all. ``` Probably, but something is causing it to run twice. ``` Jun 05 08:30:12 harbinger vaultwarden[554083]: [2026-06-05 08:30:12.971][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("20260425120000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501 ``` So started playing with it a little again. I can upgrade the database to 12.3.2, restart the database and vault warden is fine. If I restart vault warden, it throws the above error and crashes. Unfortunately, I'm not running ubuntu so I can't comment on madito's fix. Not sure what else I can do to help. Would running vault warden with `strace` produce anything useful to help debug? Are there other logs the application writes to that I can share?
Author
Owner

@Narrat commented on GitHub (Jun 6, 2026):

I can upgrade the database to 12.3.2, restart the database and vault warden is fine. If I restart vault warden, it throws the above error and crashes.

That was also the way it happened for me

Maybe something else is wrong in the schema which doesn't pop-up right away? I will dump the final schema of Vaultwarden v1.36.0 here using MariaDB v12.3.2, maybe it helps finding something strange. Note that i just used the defaults regarding charset and collation.

Made a diff against a dump from my db and beside a different locale/collate it has one major difference:

@@ -501,8 +500,9 @@
   `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
   PRIMARY KEY (`user_uuid`),
   UNIQUE KEY `identifier` (`identifier`),
-  CONSTRAINT `sso_users_ibfk_1` FOREIGN KEY (`user_uuid`) REFERENCES `users` (`uuid`) ON DELETE CASCADE ON UPDATE CASCADE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci;
+  CONSTRAINT `1` FOREIGN KEY (`user_uuid`) REFERENCES `users` (`uuid`),
+  CONSTRAINT `2` FOREIGN KEY (`user_uuid`) REFERENCES `users` (`uuid`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
 /*!40101 SET character_set_client = @saved_cs_client */;
 
<!-- gh-comment-id:4640774538 --> @Narrat commented on GitHub (Jun 6, 2026): > I can upgrade the database to 12.3.2, restart the database and vault warden is fine. If I restart vault warden, it throws the above error and crashes. That was also the way it happened for me > Maybe something else is wrong in the schema which doesn't pop-up right away? I will dump the final schema of Vaultwarden v1.36.0 here using MariaDB v12.3.2, maybe it helps finding something strange. Note that i just used the defaults regarding charset and collation. Made a diff against a dump from my db and beside a different locale/collate it has one major difference: ```diff @@ -501,8 +500,9 @@ `created_at` timestamp NOT NULL DEFAULT current_timestamp(), PRIMARY KEY (`user_uuid`), UNIQUE KEY `identifier` (`identifier`), - CONSTRAINT `sso_users_ibfk_1` FOREIGN KEY (`user_uuid`) REFERENCES `users` (`uuid`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci; + CONSTRAINT `1` FOREIGN KEY (`user_uuid`) REFERENCES `users` (`uuid`), + CONSTRAINT `2` FOREIGN KEY (`user_uuid`) REFERENCES `users` (`uuid`) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; /*!40101 SET character_set_client = @saved_cs_client */; ```
Author
Owner

@BlackDex commented on GitHub (Jun 7, 2026):

Well the only reason Vaultwarden would try to run the migration again is if the migration table doesn't hold the right data, or, if the table is broken in some way.

I'm not sure from the top of my head but maybe setting the log level to this might show the queries executed, also from the migrations.

LOG_LEVEL=debug,vaultwarden::db::query_logger=debug

<!-- gh-comment-id:4641770895 --> @BlackDex commented on GitHub (Jun 7, 2026): Well the only reason Vaultwarden would try to run the migration again is if the migration table doesn't hold the right data, or, if the table is broken in some way. I'm not sure from the top of my head but maybe setting the log level to this might show the queries executed, also from the migrations. `LOG_LEVEL=debug,vaultwarden::db::query_logger=debug`
Author
Owner

@blind-oracle commented on GitHub (Jun 7, 2026):

@BlackDex do you mean the __diesel_schema_migrations table? When the "wrong" MariaDB version is used, it behaves weird - I had the latest migration entry in this table already, but it looked as it wasn't seen by the diesel_migrations somehow and it tried to apply it again. When I removed the last migration, it tried to apply the previous one and so forth.

The tables are for sure not broken (well, at least structurally) - I've dumped the whole DB and restored it alongside the old one fine.

Gonna try with debug.

<!-- gh-comment-id:4641923316 --> @blind-oracle commented on GitHub (Jun 7, 2026): @BlackDex do you mean the `__diesel_schema_migrations` table? When the "wrong" MariaDB version is used, it behaves weird - I had the latest migration entry in this table already, but it looked as it wasn't seen by the `diesel_migrations` somehow and it tried to apply it again. When I removed the last migration, it tried to apply the previous one and so forth. The tables are for sure not broken (well, at least structurally) - I've dumped the whole DB and restored it alongside the old one fine. Gonna try with debug.
Author
Owner

@sarah4d2 commented on GitHub (Jun 7, 2026):

We are seeing the same issue as @blind-oracle described with Vaultwarden 1.35.2 on FreeBSD 14.4, after upgrading from MariaDB 11.4 to MariaDB 11.8.8 from ports.

As an example, migration 20250109172300 has already been completed:

SELECT `__diesel_schema_migrations`.`version` FROM `__diesel_schema_migrations` ORDER BY `__diesel_schema_migrations`.`version` DESC limit 1;

+----------------+
| version        |
+----------------+
| 20250109172300 |
+----------------+

But Vaultwarden tries to run this migration again on start:

[vaultwarden::db::query_logger][DEBUG] QUERY [137.175µs]: Query { sql: "SET FOREIGN_KEY_CHECKS = 0", binds: [] }
[vaultwarden::db::query_logger][DEBUG] QUERY [217.091µs]: Query { sql: "CREATE TABLE IF NOT EXISTS __diesel_schema_migrations (\n       version VARCHAR(50) PRIMARY KEY NOT NULL,\n       run_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n", binds: [] }
[vaultwarden::db::query_logger][DEBUG] QUERY [315.796µs]: Query { sql: "SELECT `__diesel_schema_migrations`.`version` FROM `__diesel_schema_migrations` ORDER BY `__diesel_schema_migrations`.`version` DESC", binds: [] }
[vaultwarden::db::query_logger][DEBUG] QUERY [116.93µs]: "BEGIN"
[vaultwarden::db::query_logger][DEBUG] QUERY [6.905807ms]: "ALTER TABLE users_collections\nADD COLUMN manage BOOLEAN NOT NULL DEFAULT FALSE;\n\nALTER TABLE collections_groups\nADD COLUMN manage BOOLEAN NOT NULL DEFAULT FALSE;\n"
[vaultwarden::db::query_logger][DEBUG] QUERY [307.424µs]: Query { sql: "INSERT INTO `__diesel_schema_migrations` (`version`) VALUES (?)", binds: [MigrationVersion("20250109172300")] }
[vaultwarden::db::query_logger][DEBUG] QUERY [94.515µs]: "ROLLBACK"
[panic][ERROR] thread 'main' panicked at 'Error running migrations: DatabaseError(UniqueViolation, "Duplicate entry '20250109172300' for key 'PRIMARY'")': src/db/mod.rs:505

The above is after manually dropping the manage column from user_collections and collections_groups in an attempt to get the migration to succeed; otherwise it would have failed on the ALTER TABLE statements instead of the INSERT.

I've tried a few rounds of manually reverting the changes made by migrations and removing their corresponding rows from __diesel_schema_migrations - as @blind-oracle said, Vaultwarden just tries to apply the previous migration. It's as though the relevant row isn't seen in the result from the select against __diesel_schema_migrations, though as shown above, running the exact query in the mariadb client returns the expected results.

<!-- gh-comment-id:4642312723 --> @sarah4d2 commented on GitHub (Jun 7, 2026): We are seeing the same issue as @blind-oracle described with Vaultwarden 1.35.2 on FreeBSD 14.4, after upgrading from MariaDB 11.4 to MariaDB 11.8.8 from ports. As an example, migration `20250109172300` has already been completed: ``` SELECT `__diesel_schema_migrations`.`version` FROM `__diesel_schema_migrations` ORDER BY `__diesel_schema_migrations`.`version` DESC limit 1; +----------------+ | version | +----------------+ | 20250109172300 | +----------------+ ``` But Vaultwarden tries to run this migration again on start: ``` [vaultwarden::db::query_logger][DEBUG] QUERY [137.175µs]: Query { sql: "SET FOREIGN_KEY_CHECKS = 0", binds: [] } [vaultwarden::db::query_logger][DEBUG] QUERY [217.091µs]: Query { sql: "CREATE TABLE IF NOT EXISTS __diesel_schema_migrations (\n version VARCHAR(50) PRIMARY KEY NOT NULL,\n run_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n", binds: [] } [vaultwarden::db::query_logger][DEBUG] QUERY [315.796µs]: Query { sql: "SELECT `__diesel_schema_migrations`.`version` FROM `__diesel_schema_migrations` ORDER BY `__diesel_schema_migrations`.`version` DESC", binds: [] } [vaultwarden::db::query_logger][DEBUG] QUERY [116.93µs]: "BEGIN" [vaultwarden::db::query_logger][DEBUG] QUERY [6.905807ms]: "ALTER TABLE users_collections\nADD COLUMN manage BOOLEAN NOT NULL DEFAULT FALSE;\n\nALTER TABLE collections_groups\nADD COLUMN manage BOOLEAN NOT NULL DEFAULT FALSE;\n" [vaultwarden::db::query_logger][DEBUG] QUERY [307.424µs]: Query { sql: "INSERT INTO `__diesel_schema_migrations` (`version`) VALUES (?)", binds: [MigrationVersion("20250109172300")] } [vaultwarden::db::query_logger][DEBUG] QUERY [94.515µs]: "ROLLBACK" [panic][ERROR] thread 'main' panicked at 'Error running migrations: DatabaseError(UniqueViolation, "Duplicate entry '20250109172300' for key 'PRIMARY'")': src/db/mod.rs:505 ``` The above is after manually dropping the `manage` column from `user_collections` and `collections_groups` in an attempt to get the migration to succeed; otherwise it would have failed on the ALTER TABLE statements instead of the INSERT. I've tried a few rounds of manually reverting the changes made by migrations and removing their corresponding rows from `__diesel_schema_migrations` - as @blind-oracle said, Vaultwarden just tries to apply the previous migration. It's as though the relevant row isn't seen in the result from the select against `__diesel_schema_migrations`, though as shown above, running the exact query in the mariadb client returns the expected results.
Author
Owner

@sarah4d2 commented on GitHub (Jun 7, 2026):

This is somewhat desperate and may not be helpful, but I attempted to do the following:

  • Drop all tables from the existing DB
  • Start Vaultwarden 1.36 and allow all DB migrations to complete (understanding that it will not survive a restart since it will attempt the DB migrations again)
  • Verify that the schema has been created correctly
  • Restore a backup of the DB without schema (from Vaultwarden 1.35.2) while Vaultwarden 1.36 is running
  • Attempt to access the user list in /admin

This resulted in another crash that might indicate a broader problem interacting with the DB:

[vaultwarden::db::query_logger][DEBUG] QUERY [438.546µs]: Query { sql: "SELECT sum(`attachments`.`file_size`) FROM (`attachments` LEFT OUTER JOIN `ciphers` ON (`ciphers`.`uuid` = `attachments`.`cipher_uuid`)) WHERE (`ciphers`.`user_uuid` = ?) LIMIT ?", binds: [UserId("redacted"), 1] }
[2026-06-07 04:52:49.145][panic][ERROR] thread 'rocket-worker-thread' panicked at 'Error loading user attachment total size: DeserializationError(DeserializeFieldError { field_name: Some("sum(`attachments`.`file_size`)"), error: "[] is not valid decimal number " })': src/db/models/attachment.rs:166

Trying the same query via mariadb client yields the expected result:

SELECT sum(`attachments`.`file_size`) FROM (`attachments` LEFT OUTER JOIN `ciphers` ON (`ciphers`.`uuid` = `attachments`.`cipher_uuid`)) WHERE (`ciphers`.`user_uuid` = 'redacted') LIMIT 1;
+--------------------------------+
| sum(`attachments`.`file_size`) |
+--------------------------------+
|                          37347 |
+--------------------------------+
<!-- gh-comment-id:4642466698 --> @sarah4d2 commented on GitHub (Jun 7, 2026): This is somewhat desperate and may not be helpful, but I attempted to do the following: - Drop all tables from the existing DB - Start Vaultwarden 1.36 and allow all DB migrations to complete (understanding that it will not survive a restart since it will attempt the DB migrations again) - Verify that the schema has been created correctly - Restore a backup of the DB without schema (from Vaultwarden 1.35.2) while Vaultwarden 1.36 is running - Attempt to access the user list in /admin This resulted in another crash that might indicate a broader problem interacting with the DB: ``` [vaultwarden::db::query_logger][DEBUG] QUERY [438.546µs]: Query { sql: "SELECT sum(`attachments`.`file_size`) FROM (`attachments` LEFT OUTER JOIN `ciphers` ON (`ciphers`.`uuid` = `attachments`.`cipher_uuid`)) WHERE (`ciphers`.`user_uuid` = ?) LIMIT ?", binds: [UserId("redacted"), 1] } [2026-06-07 04:52:49.145][panic][ERROR] thread 'rocket-worker-thread' panicked at 'Error loading user attachment total size: DeserializationError(DeserializeFieldError { field_name: Some("sum(`attachments`.`file_size`)"), error: "[] is not valid decimal number " })': src/db/models/attachment.rs:166 ``` Trying the same query via mariadb client yields the expected result: ``` SELECT sum(`attachments`.`file_size`) FROM (`attachments` LEFT OUTER JOIN `ciphers` ON (`ciphers`.`uuid` = `attachments`.`cipher_uuid`)) WHERE (`ciphers`.`user_uuid` = 'redacted') LIMIT 1; +--------------------------------+ | sum(`attachments`.`file_size`) | +--------------------------------+ | 37347 | +--------------------------------+ ```
Author
Owner

@BlackDex commented on GitHub (Jun 7, 2026):

@sarah4d2, which container image are you using? Debian or Alpine based? What if you use the other, my guess is you are using the Debian based, and i wonder what the Alpine based image does, since that uses a different client library.

<!-- gh-comment-id:4642676434 --> @BlackDex commented on GitHub (Jun 7, 2026): @sarah4d2, which container image are you using? Debian or Alpine based? What if you use the other, my guess is you are using the Debian based, and i wonder what the Alpine based image does, since that uses a different client library.
Author
Owner

@sarah4d2 commented on GitHub (Jun 7, 2026):

@BlackDex, this is a build from source automated with FreeBSD Ports. The source tarball it's using is identical to https://github.com/dani-garcia/vaultwarden/archive/refs/tags/1.36.0.tar.gz. The build machine is using rustc 1.95.0.

I would normally assume an issue with the port or dependencies vs. commenting on an upstream issue like this, but it seems very similar to the reports here. We ran into this trying to upgrade from Vaultwarden 1.35.2 to 1.36, after upgrading from MariaDB 11.4 to 11.8 with vaultwarden running. Rolling back to a backup copy of the 1.35.2 vaultwarden binary that was running before the upgrade from MariaDB 11.4 to 11.8, and restoring the old DB, doesn't fix the problem (or maybe introduces a different problem, since this binary was built against MariaDB 11.4).

<!-- gh-comment-id:4643672439 --> @sarah4d2 commented on GitHub (Jun 7, 2026): @BlackDex, this is a build from source automated with FreeBSD Ports. The source tarball it's using is identical to https://github.com/dani-garcia/vaultwarden/archive/refs/tags/1.36.0.tar.gz. The build machine is using rustc 1.95.0. I would normally assume an issue with the port or dependencies vs. commenting on an upstream issue like this, but it seems very similar to the reports here. We ran into this trying to upgrade from Vaultwarden 1.35.2 to 1.36, after upgrading from MariaDB 11.4 to 11.8 with vaultwarden running. Rolling back to a backup copy of the 1.35.2 vaultwarden binary that was running before the upgrade from MariaDB 11.4 to 11.8, and restoring the old DB, doesn't fix the problem (or maybe introduces a different problem, since this binary was built against MariaDB 11.4).
Author
Owner

@Narrat commented on GitHub (Jun 7, 2026):

The smallest version jump mentioned with mariadb was an update from 10.11.16 to 10.11.18. Had a hope looking at the changelogs in question would maybe point to a culprit. But 10.11.17 is a big one...

Running with the mentioned LOG_LEVEL yields a similar result like reported by sarah4d2. Difference being I didn't drop any migrations and according to the log it didn't try to create a new entry in that table. But still wants to apply the most recent migration:

[2026-06-07 22:06:35.282][vaultwarden::db::query_logger][DEBUG] Establishing connection: mysql://<redacted>@localhost:3306/vaultwarden
[2026-06-07 22:06:35.288][vaultwarden::db::query_logger][DEBUG] Connection established: mysql://<redacted>@localhost:3306/vaultwarden
[2026-06-07 22:06:35.289][vaultwarden::db::query_logger][DEBUG] QUERY [622.405µs]: Query { sql: "SET FOREIGN_KEY_CHECKS = 0", binds: [] }
[2026-06-07 22:06:35.290][vaultwarden::db::query_logger][DEBUG] QUERY [1.148245ms]: Query { sql: "CREATE TABLE IF NOT EXISTS __diesel_schema_migrations (\n       version VARCHAR(50) PRIMARY KEY NOT NULL,\n       run_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n", binds: [] }
[2026-06-07 22:06:35.318][vaultwarden::db::query_logger][DEBUG] QUERY [917.685µs]: Query { sql: "SELECT `__diesel_schema_migrations`.`version` FROM `__diesel_schema_migrations` ORDER BY `__diesel_schema_migrations`.`version` DESC", binds: [] }
[2026-06-07 22:06:35.319][vaultwarden::db::query_logger][DEBUG] QUERY [286.844µs]: "BEGIN"
[2026-06-07 22:06:35.337][vaultwarden::db::query_logger][DEBUG] QUERY [18.74253ms]: "ALTER TABLE sso_auth ADD COLUMN binding_hash TEXT;\n"
[2026-06-07 22:06:35.338][vaultwarden::db::query_logger][DEBUG] QUERY [504.79µs]: "ROLLBACK"
[2026-06-07 22:06:35.339][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("20260425120000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501

Therefore in my case it went with 2026-04-25-120000_sso_auth_binding, which according to the entry in __diesel_schema_migrations was already run:

+----------------+---------------------+
| version        | run_on              |
+----------------+---------------------+
| 20260425120000 | 2026-05-04 20:56:14 |

And fits to the error. (But doesn't explain why I have the difference in structure.)
Is there an additional logger option which could enlighten what happens with the results from the QUERY as this returns a list of all run migrations?

<!-- gh-comment-id:4644047538 --> @Narrat commented on GitHub (Jun 7, 2026): The smallest version jump mentioned with mariadb was an update from `10.11.16` to `10.11.18`. Had a hope looking at the changelogs in question would maybe point to a culprit. But [`10.11.17` is a big one](https://mariadb.com/docs/release-notes/community-server/10.11/10.11.17)... Running with the mentioned `LOG_LEVEL` yields a similar result like reported by sarah4d2. Difference being I didn't drop any migrations and according to the log it didn't try to create a new entry in that table. But still wants to apply the most recent migration: ``` [2026-06-07 22:06:35.282][vaultwarden::db::query_logger][DEBUG] Establishing connection: mysql://<redacted>@localhost:3306/vaultwarden [2026-06-07 22:06:35.288][vaultwarden::db::query_logger][DEBUG] Connection established: mysql://<redacted>@localhost:3306/vaultwarden [2026-06-07 22:06:35.289][vaultwarden::db::query_logger][DEBUG] QUERY [622.405µs]: Query { sql: "SET FOREIGN_KEY_CHECKS = 0", binds: [] } [2026-06-07 22:06:35.290][vaultwarden::db::query_logger][DEBUG] QUERY [1.148245ms]: Query { sql: "CREATE TABLE IF NOT EXISTS __diesel_schema_migrations (\n version VARCHAR(50) PRIMARY KEY NOT NULL,\n run_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n", binds: [] } [2026-06-07 22:06:35.318][vaultwarden::db::query_logger][DEBUG] QUERY [917.685µs]: Query { sql: "SELECT `__diesel_schema_migrations`.`version` FROM `__diesel_schema_migrations` ORDER BY `__diesel_schema_migrations`.`version` DESC", binds: [] } [2026-06-07 22:06:35.319][vaultwarden::db::query_logger][DEBUG] QUERY [286.844µs]: "BEGIN" [2026-06-07 22:06:35.337][vaultwarden::db::query_logger][DEBUG] QUERY [18.74253ms]: "ALTER TABLE sso_auth ADD COLUMN binding_hash TEXT;\n" [2026-06-07 22:06:35.338][vaultwarden::db::query_logger][DEBUG] QUERY [504.79µs]: "ROLLBACK" [2026-06-07 22:06:35.339][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("20260425120000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501 ``` Therefore in my case it went with `2026-04-25-120000_sso_auth_binding`, which according to the entry in `__diesel_schema_migrations` was already run: ``` +----------------+---------------------+ | version | run_on | +----------------+---------------------+ | 20260425120000 | 2026-05-04 20:56:14 | ``` And fits to the error. (But doesn't explain why I have the difference in structure.) Is there an additional logger option which could enlighten what happens with the results from the QUERY as this returns a list of all run migrations?
Author
Owner

@marcusweinhold commented on GitHub (Jun 9, 2026):

I have a similar issue on Archlinux:

  • mariadb 12.2.2 + vaultwarden 1.36.0 work fine
  • mariadb 12.3.2 + vaultwarden 1.36.0 throw the aforementioned migration error
  • mariadb 12.3.2 + vaultwarden 1.35.8 boot fine, but all users' master passwords cannot be verified
<!-- gh-comment-id:4658809713 --> @marcusweinhold commented on GitHub (Jun 9, 2026): I have a similar issue on Archlinux: * mariadb 12.2.2 + vaultwarden 1.36.0 work fine * mariadb 12.3.2 + vaultwarden 1.36.0 throw the aforementioned migration error * mariadb 12.3.2 + vaultwarden 1.35.8 boot fine, but all users' master passwords cannot be verified
Author
Owner

@vloup commented on GitHub (Jun 13, 2026):

@Narrat has a good summary of the situation. I also proof checked, all the collations and charsets are correct.

Here's the general_log output on my side, this matches what had been seen with the vaultwarden logs:

                    14 Connect  vaultwarden@localhost on vaultwarden using Socket
                    14 Prepare  SET time_zone = '+00:00'
                    14 Execute  SET time_zone = '+00:00'
                    14 Close stmt
                    14 Prepare  SET character_set_client = 'utf8mb4'
                    14 Execute  SET character_set_client = 'utf8mb4'
                    14 Close stmt
                    14 Prepare  SET character_set_connection = 'utf8mb4'
                    14 Execute  SET character_set_connection = 'utf8mb4'
                    14 Close stmt
                    14 Prepare  SET character_set_results = 'utf8mb4'
                    14 Execute  SET character_set_results = 'utf8mb4'
                    14 Close stmt
                    14 Prepare  SET FOREIGN_KEY_CHECKS = 0
                    14 Execute  SET FOREIGN_KEY_CHECKS = 0
                    14 Close stmt
                    14 Prepare  CREATE TABLE IF NOT EXISTS __diesel_schema_migrations (
       version VARCHAR(50) PRIMARY KEY NOT NULL,
       run_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)                   
                    14 Execute  CREATE TABLE IF NOT EXISTS __diesel_schema_migrations (
       version VARCHAR(50) PRIMARY KEY NOT NULL,
       run_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)                   
                    14 Close stmt
                    14 Prepare  SELECT `__diesel_schema_migrations`.`version` FROM `__diesel_schema_migrations` ORDER BY `__diesel_schema_migrations`.`version` DESC
                    14 Execute  SELECT `__diesel_schema_migrations`.`version` FROM `__diesel_schema_migrations` ORDER BY `__diesel_schema_migrations`.`version` DESC
                    14 Query    BEGIN
                    14 Query    ALTER TABLE sso_auth ADD COLUMN binding_hash TEXT
                    14 Query    ROLLBACK
                    14 Quit

With the SELECT query returning:

MariaDB [vaultwarden]> SELECT `__diesel_schema_migrations`.`version` FROM `__diesel_schema_migrations` ORDER BY `__diesel_schema_migrations`.`version` DESC;
+----------------+
| version        |
+----------------+
| 20260425120000 |
| 20260309005927 |
| 20250820120000 |
| 20250109172300 |
...

Yet it wants to replay the migration.

Funnily enough, I see there's a new migration in main. If I play it manually, I can boot the app, but like @marcusweinhold said, with 12.3.2 all master password cannot be verified. It might only be the top of the iceberg.

I tried fresh-rebuilding the app, as a way to ensure the linker used the right libraries, to no effect.

<!-- gh-comment-id:4699579060 --> @vloup commented on GitHub (Jun 13, 2026): @Narrat has a good summary of the situation. I also proof checked, all the collations and charsets are correct. Here's the general_log output on my side, this matches what had been seen with the vaultwarden logs: ``` 14 Connect vaultwarden@localhost on vaultwarden using Socket 14 Prepare SET time_zone = '+00:00' 14 Execute SET time_zone = '+00:00' 14 Close stmt 14 Prepare SET character_set_client = 'utf8mb4' 14 Execute SET character_set_client = 'utf8mb4' 14 Close stmt 14 Prepare SET character_set_connection = 'utf8mb4' 14 Execute SET character_set_connection = 'utf8mb4' 14 Close stmt 14 Prepare SET character_set_results = 'utf8mb4' 14 Execute SET character_set_results = 'utf8mb4' 14 Close stmt 14 Prepare SET FOREIGN_KEY_CHECKS = 0 14 Execute SET FOREIGN_KEY_CHECKS = 0 14 Close stmt 14 Prepare CREATE TABLE IF NOT EXISTS __diesel_schema_migrations ( version VARCHAR(50) PRIMARY KEY NOT NULL, run_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) 14 Execute CREATE TABLE IF NOT EXISTS __diesel_schema_migrations ( version VARCHAR(50) PRIMARY KEY NOT NULL, run_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) 14 Close stmt 14 Prepare SELECT `__diesel_schema_migrations`.`version` FROM `__diesel_schema_migrations` ORDER BY `__diesel_schema_migrations`.`version` DESC 14 Execute SELECT `__diesel_schema_migrations`.`version` FROM `__diesel_schema_migrations` ORDER BY `__diesel_schema_migrations`.`version` DESC 14 Query BEGIN 14 Query ALTER TABLE sso_auth ADD COLUMN binding_hash TEXT 14 Query ROLLBACK 14 Quit ``` With the SELECT query returning: ``` MariaDB [vaultwarden]> SELECT `__diesel_schema_migrations`.`version` FROM `__diesel_schema_migrations` ORDER BY `__diesel_schema_migrations`.`version` DESC; +----------------+ | version | +----------------+ | 20260425120000 | | 20260309005927 | | 20250820120000 | | 20250109172300 | ... ``` Yet it wants to replay the migration. Funnily enough, I see there's a new migration in `main`. If I play it manually, I can boot the app, but like @marcusweinhold said, with 12.3.2 all master password cannot be verified. It might only be the top of the iceberg. I tried fresh-rebuilding the app, as a way to ensure the linker used the right libraries, to no effect.
Author
Owner

@sarah4d2 commented on GitHub (Jun 14, 2026):

I wonder whether this is a Diesel issue? It seems like it can be generalized as "all select queries return empty result sets on recent versions of MariaDB".

<!-- gh-comment-id:4703065488 --> @sarah4d2 commented on GitHub (Jun 14, 2026): I wonder whether this is a Diesel issue? It seems like it can be generalized as "all select queries return empty result sets on recent versions of MariaDB".
Author
Owner

@BlackDex commented on GitHub (Jun 14, 2026):

And what about using the Alpine binary? How does that work with all these versions?

<!-- gh-comment-id:4703118208 --> @BlackDex commented on GitHub (Jun 14, 2026): And what about using the Alpine binary? How does that work with all these versions?
Author
Owner

@BlackDex commented on GitHub (Jun 14, 2026):

Those could be downloaded via here if needed.
https://github.com/dani-garcia/vaultwarden/actions/runs/27036784937

<!-- gh-comment-id:4703125791 --> @BlackDex commented on GitHub (Jun 14, 2026): Those could be downloaded via here if needed. https://github.com/dani-garcia/vaultwarden/actions/runs/27036784937
Author
Owner

@WanWizard commented on GitHub (Jun 17, 2026):

We run Vaulwarden on Redhat EL9, against a shared MariaDB 11.8.6 cluster..

Just did a dnf update of the server, with the same outcome as everyone else here: vaultwarden doesn't start since it wants to run migrations that have already run.

The update installed MariaDB client 11.8.8. I've downgraded the MariaDB client packages back to 11.8.6, and that fixed the issue.

<!-- gh-comment-id:4730490782 --> @WanWizard commented on GitHub (Jun 17, 2026): We run Vaulwarden on Redhat EL9, against a shared MariaDB 11.8.6 cluster.. Just did a `dnf update` of the server, with the same outcome as everyone else here: vaultwarden doesn't start since it wants to run migrations that have already run. The update installed MariaDB client 11.8.8. I've downgraded the MariaDB client packages back to 11.8.6, and that fixed the issue.
Author
Owner

@BlackDex commented on GitHub (Jun 17, 2026):

I suspect you then also use a DNF/RPM Package to install Vaultwarden?
In that case, I'm afraid there isn't something we can do on our end. It's either a Diesel issues, or a MariaDB issue.

And I already know the response from Diesel, they will blame MariaDB (And probably rightfully so) to be changing stuff or not upholding standards defined in the API them self.

MariaDB has had several issues in the past regarding compatibility or RFC's.

<!-- gh-comment-id:4730668461 --> @BlackDex commented on GitHub (Jun 17, 2026): I suspect you then also use a DNF/RPM Package to install Vaultwarden? In that case, I'm afraid there isn't something we can do on our end. It's either a Diesel issues, or a MariaDB issue. And I already know the response from Diesel, they will blame MariaDB (And probably rightfully so) to be changing stuff or not upholding standards defined in the API them self. MariaDB has had several issues in the past regarding compatibility or RFC's.
Author
Owner

@BlackDex commented on GitHub (Jun 17, 2026):

Well, the only thing we can do is add a special feature, mysql_bundled which then forces the static building of the Oracle MySQL client library, but that might also bring other issues. And, it also doesn't work for all architectures, and currently needs dependencies to build (which in the end are not even used though).

<!-- gh-comment-id:4730750168 --> @BlackDex commented on GitHub (Jun 17, 2026): Well, the only thing we can do is add a special feature, `mysql_bundled` which then forces the static building of the Oracle MySQL client library, but that might also bring other issues. And, it also doesn't work for all architectures, and currently needs dependencies to build (which in the end are not even used though).
Author
Owner

@WanWizard commented on GitHub (Jun 17, 2026):

@BlackDex yes, but that is not the issue.

The migrations fail when using MariaDB client 11.8.7 or newer, but work with 11.8.6.
Irrespectively of how Vaultwarden was installed, and probably also which version.

I don't know what has changed in the MariaDB client from 11.8.6 to 11.8.7 that causes Diesel to trip, I've got tons of apps here that are MariaDB backed (we run a hosting company), and none of them have this issue, so it is clearly the way Diesel and MariaDB interact.

<!-- gh-comment-id:4731174733 --> @WanWizard commented on GitHub (Jun 17, 2026): @BlackDex yes, but that is not the issue. The migrations fail when using MariaDB client 11.8.7 or newer, but work with 11.8.6. Irrespectively of how Vaultwarden was installed, and probably also which version. I don't know what has changed in the MariaDB client from 11.8.6 to 11.8.7 that causes Diesel to trip, I've got tons of apps here that are MariaDB backed (we run a hosting company), and none of them have this issue, so it is clearly the way Diesel and MariaDB interact.
Author
Owner

@BlackDex commented on GitHub (Jun 17, 2026):

I understand that, this is because libmariadb is a dynamic library. It has nothing to do with how Vaultwarden was build.
Also, from my opinion (and probably also that of Diesel), MariaDB created a breaking change in a patch level version.

Maybe if you report this issue at the Packager of the Vaultwarden package, they can report this somewhere at RHEL or Fedora or where ever and maybe they can figure it out.

The same goes for Debian btw. I can report this again at Diesel or at the mysqlclient crate, but that would probably result in me having to figure it out and troubleshoot it my self since they only support MariaDB as-is or best-effort.

My problem with that is, that a lot of distro's stopped providing Oracle MySQL client packages because of licensing issues if I'm correct. Though, Oracle has changed this, but not all distro's started providing these packages again.

And, also, sometimes installing both versions isn't possible, or might even break other applications mainly depending on MariaDB instead of MySQL.

If someone has more insights regarding this, or knows a briljant way to solve this for all Distro's and architectures we currently build, that would be great! Since the mysqlclient crate doesn't build on armv7 for example.

armv6/armv5 will be another issue in the future, as Debian stops providing packages and releases for that with the coming new release.

For our Alpine based images there is no issue, as I decide which version of MariaDB will be used. Which i tested, but also breaks using the latest version of MariaDB.

<!-- gh-comment-id:4731394348 --> @BlackDex commented on GitHub (Jun 17, 2026): I understand that, this is because libmariadb is a dynamic library. It has nothing to do with how Vaultwarden was build. Also, from my opinion (and probably also that of Diesel), MariaDB created a breaking change in a patch level version. Maybe if you report this issue at the Packager of the Vaultwarden package, they can report this somewhere at RHEL or Fedora or where ever and maybe they can figure it out. The same goes for Debian btw. I can report this again at Diesel or at the mysqlclient crate, but that would probably result in me having to figure it out and troubleshoot it my self since they only support MariaDB as-is or best-effort. My problem with that is, that a lot of distro's stopped providing Oracle MySQL client packages because of licensing issues if I'm correct. Though, Oracle has changed this, but not all distro's started providing these packages again. And, also, sometimes installing both versions isn't possible, or might even break other applications mainly depending on MariaDB instead of MySQL. If someone has more insights regarding this, or knows a briljant way to solve this for all Distro's and architectures we currently build, that would be great! Since the mysqlclient crate doesn't build on armv7 for example. armv6/armv5 will be another issue in the future, as Debian stops providing packages and releases for that with the coming new release. For our Alpine based images there is no issue, as I decide which version of MariaDB will be used. Which i tested, but also breaks using the latest version of MariaDB.
Author
Owner

@WanWizard commented on GitHub (Jun 17, 2026):

This smells like the typical "it's not us, it's them" response.

For starters, I don't see anyone explaining exactly what the problem is, why the upgrade of the client from 11.8.6 to 11.8.7 breaks Diesel (migrations), but doesn't break anything else. It might be wise to do some research first, before pointing fingers.

In general, as a developer, if your code depends on someone elses code (in this case Vaultwarden ->Diesel -> mysqlclient-sys -> mariadb client libs -> MariaDB C connector), it is your job to ensure compatibility with your dependencies. I agree Vaultwarden itself isn't part of the equation, it has to rely on the Rust ecosystem doing its job.

The most likely culprit is probably mysqlclient-sys. If I check the source, the MariaDB bindings were last updated over 5 months ago, for MariaDB 10.8, so chances are it's running into compatibility issues.

<!-- gh-comment-id:4731996286 --> @WanWizard commented on GitHub (Jun 17, 2026): This smells like the typical "it's not us, it's them" response. For starters, I don't see anyone explaining exactly what the problem is, why the upgrade of the client from 11.8.6 to 11.8.7 breaks Diesel (migrations), but doesn't break anything else. It might be wise to do some research first, before pointing fingers. In general, as a developer, if your code depends on someone elses code (in this case Vaultwarden ->Diesel -> mysqlclient-sys -> mariadb client libs -> MariaDB C connector), it is your job to ensure compatibility with your dependencies. I agree Vaultwarden itself isn't part of the equation, it has to rely on the Rust ecosystem doing its job. The most likely culprit is probably mysqlclient-sys. If I check the source, the MariaDB bindings were last updated over 5 months ago, for MariaDB 10.8, so chances are it's running into compatibility issues.
Author
Owner

@BlackDex commented on GitHub (Jun 17, 2026):

@WanWizard, As i explained already, we have seen this before with MariaDB. And the response from Diesel and mysqclient-sys (Which are both mainly maintained by the same maintainers) is, that they do not love MariaDB because of these issues that keeps popping up all the time.

I have helped fixing or identifying previous issues in the past, but the maintainers are not happy with MariaDB, and even mentioned dropping support for that fully if nobody steps-up to try and help maintain that library.

I have enough to do with Vaultwarden it self, so that doesn't really help either.
And as mentioned, i build the Alpine/musl based libraries my self, and i also saw that the latest version of MariaDB breaks using that, but did not had time to look into this any further.

And, as you mentioned, we are just a user of those two crates, and would need to lean on the expertise and knowledge of those maintainers to help.

<!-- gh-comment-id:4732351984 --> @BlackDex commented on GitHub (Jun 17, 2026): @WanWizard, As i explained already, we have seen this before with MariaDB. And the response from Diesel and mysqclient-sys (Which are both mainly maintained by the same maintainers) is, that they do not love MariaDB because of these issues that keeps popping up all the time. I have helped fixing or identifying previous issues in the past, but the maintainers are not happy with MariaDB, and even mentioned dropping support for that fully if nobody steps-up to try and help maintain that library. I have enough to do with Vaultwarden it self, so that doesn't really help either. And as mentioned, i build the Alpine/musl based libraries my self, and i also saw that the latest version of MariaDB breaks using that, but did not had time to look into this any further. And, as you mentioned, we are just a user of those two crates, and would need to lean on the expertise and knowledge of those maintainers to help.
Author
Owner

@WanWizard commented on GitHub (Jun 17, 2026):

I understand it's not your problem to fix, and I'm not asking you to.

I have no knowledge of Rust and its ecosystem, so I can't really be of any assistance here, apart from assisting in debugging if and when needed.

But as said, I do have an issue with the "it's them" easy way out. It might be so, but it is an attitude that doesn't solve anything, and doesn't help the users. MySQL/MariaDB is still by far the most deployed DB engine out there, so not supporting it because of an "can't be bothered" attitude from the developers is an enormous disregard of their user base.

Given the fact that lots of solutions out there use the MariaDB C bindings (no database engine is of any use without working clients), solutions vastly more popular and used than mysqlclient-sys (like php-mysqlnd for example), and they don't have any issue. None of our PHP apps failed when we did an OS update round over the weekend.

I have created https://github.com/sgrif/mysqlclient-sys/issues/80 to alert them of this issue.

<!-- gh-comment-id:4732778864 --> @WanWizard commented on GitHub (Jun 17, 2026): I understand it's not your problem to fix, and I'm not asking you to. I have no knowledge of Rust and its ecosystem, so I can't really be of any assistance here, apart from assisting in debugging if and when needed. But as said, I do have an issue with the "it's them" easy way out. It might be so, but it is an attitude that doesn't solve anything, and doesn't help the users. MySQL/MariaDB is still by far the most deployed DB engine out there, so not supporting it because of an "can't be bothered" attitude from the developers is an enormous disregard of their user base. Given the fact that lots of solutions out there use the MariaDB C bindings (no database engine is of any use without working clients), solutions vastly more popular and used than mysqlclient-sys (like php-mysqlnd for example), and they don't have any issue. None of our PHP apps failed when we did an OS update round over the weekend. I have created https://github.com/sgrif/mysqlclient-sys/issues/80 to alert them of this issue.
Author
Owner

@BlackDex commented on GitHub (Jun 17, 2026):

But as said, I do have an issue with the "it's them" easy way out.

I'm not sure where you get that from. I'm only stating what the current reactions could be from Diesel or mysqlclient crates.

I also stated that i have tested this using my musl base images, and encountered it too, but no time yet to check it further.

Also, if any library breaks something in just a patch release, then i certainly think it's more a them issue btw, that doesn't mean trying to look for a solution is out of the question. Both Diesel and mysqlclient crates didn't updated or changed anything, it's the c library, and therefore the main issue lays on that part. That maybe adjustments can be done down stream is nice.

But your statement kinda says that with the recent rsync bugs, that the applications who use the rsync library should fix the rsync issue is not right from my point of view.

<!-- gh-comment-id:4732983904 --> @BlackDex commented on GitHub (Jun 17, 2026): > But as said, I do have an issue with the "it's them" easy way out. I'm not sure where you get that from. I'm only stating what the current reactions could be from Diesel or mysqlclient crates. I also stated that i have tested this using my musl base images, and encountered it too, but no time yet to check it further. Also, if any library breaks something in just a patch release, then i certainly think it's more a them issue btw, that doesn't mean trying to look for a solution is out of the question. Both Diesel and mysqlclient crates didn't updated or changed anything, it's the c library, and therefore the main issue lays on that part. That maybe adjustments can be done down stream is nice. But your statement kinda says that with the recent rsync bugs, that the applications who use the rsync library should fix the rsync issue is not right from my point of view.
Author
Owner

@BlackDex commented on GitHub (Jun 17, 2026):

Also, @WanWizard thanks for creating that issue.

<!-- gh-comment-id:4732999167 --> @BlackDex commented on GitHub (Jun 17, 2026): Also, @WanWizard thanks for creating that issue.
Author
Owner

@WanWizard commented on GitHub (Jun 17, 2026):

I'm not sure where you get that from. I'm only stating what the current reactions could be from Diesel or mysqlclient crates.

Which is what I was referring to... 😁

it's the c library,

I know that. My point remains that if they want to provide MySQL / MariaDB database access to Rust applications, they will have to make sure they update accordingly. Users of Rust don't and shouldn't care what the root cause is, only that it no longer works.

And if they don't, they should drop that support. And suffer the consequences of a development environment without support for the most used RDBMS engine.

As a reference: I maintain a open source PHP development framework (for 15 years now). If a new PHP release comes out, it is my problem to ensure compatibility. I can't tell my users not to upgrade, and I can't tell the PHP community not to release breaking upgrades. It is my problem to deal with, not someone elses.

<!-- gh-comment-id:4733311865 --> @WanWizard commented on GitHub (Jun 17, 2026): > I'm not sure where you get that from. I'm only stating what the current reactions could be from Diesel or mysqlclient crates. Which is what I was referring to... 😁 > it's the c library, I know that. My point remains that if they want to provide MySQL / MariaDB database access to Rust applications, they will have to make sure they update accordingly. Users of Rust don't and shouldn't care what the root cause is, only that it no longer works. And if they don't, they should drop that support. And suffer the consequences of a development environment without support for the most used RDBMS engine. As a reference: I maintain a open source PHP development framework (for 15 years now). If a new PHP release comes out, it is my problem to ensure compatibility. I can't tell my users not to upgrade, and I can't tell the PHP community not to release breaking upgrades. It is my problem to deal with, not someone elses.
Author
Owner

@BlackDex commented on GitHub (Jun 17, 2026):

But that that PHP version has a bug, that doesn't mean you should jump through hoops to fix it. Or, if a library PHP depends on like PCRE or cURL, it isn't your job to fix it. Helping tracking it down and mentioning it is ok of course, since you might not be a C developer of course.

Also, to be to the letter it's called mysqlclient not mariadbclient.
And if mariadb pretends to be mysqlclient compatible, then they should also adhere to that i think, but clearly isn't their main objective, which is fine.

<!-- gh-comment-id:4733401872 --> @BlackDex commented on GitHub (Jun 17, 2026): But that that PHP version has a bug, that doesn't mean you should jump through hoops to fix it. Or, if a library PHP depends on like PCRE or cURL, it isn't your job to fix it. Helping tracking it down and mentioning it is ok of course, since you might not be a C developer of course. Also, to be to the letter it's called mysqlclient not mariadbclient. And if mariadb pretends to be mysqlclient compatible, then they should also adhere to that i think, but clearly isn't their main objective, which is fine.
Author
Owner

@WanWizard commented on GitHub (Jun 17, 2026):

Not if it is a bug, no. Then I would have to wait for an upstream fix. But if the API has changed because something underlying has changed, or a bug has been fixed in the API that my code would (unknowningly) depend on, it would be my responsibilty to address the issue by adapting my code.

But we have not established here that a bug in the C connector is to blame, it is all speculation at this point. If that turned out to be the case, I haven't said anything. But it seems unlikely, given the fact no other application using the same libs has this issue, and the widespread use of said libs.

<!-- gh-comment-id:4733732459 --> @WanWizard commented on GitHub (Jun 17, 2026): Not if it is a bug, no. Then I would have to wait for an upstream fix. But if the API has changed because something underlying has changed, or a bug has been fixed in the API that my code would (unknowningly) depend on, it would be my responsibilty to address the issue by adapting my code. But we have not established here that a bug in the C connector is to blame, it is all speculation at this point. If that turned out to be the case, I haven't said anything. But it seems unlikely, given the fact no other application using the same libs has this issue, and the widespread use of said libs.
Author
Owner

@BlackDex commented on GitHub (Jun 17, 2026):

Well either way, i only stated the current state/feeling regarding MariaDB at both Diesel and mysqlclient crates.

And, i wasn't able to reproduce it my self until i tested the just released version of MariaDB(v3.4.9) last weekend via my musl build image, and after that no time to check any further.

<!-- gh-comment-id:4733828778 --> @BlackDex commented on GitHub (Jun 17, 2026): Well either way, i only stated the current state/feeling regarding MariaDB at both Diesel and mysqlclient crates. And, i wasn't able to reproduce it my self until i tested the just released version of MariaDB(v3.4.9) last weekend via my musl build image, and after that no time to check any further.
Author
Owner

@WanWizard commented on GitHub (Jun 18, 2026):

As you predicted, the response from the Diesel developer was basically "fuck you".

So I guess no developer should ever select the Rust/Diesel combo if they ever think users would want to run their app with the most popular open source RDMBS engine. Lesson to be learned here.

<!-- gh-comment-id:4742443134 --> @WanWizard commented on GitHub (Jun 18, 2026): As you predicted, the response from the Diesel developer was basically "fuck you". So I guess no developer should ever select the Rust/Diesel combo if they ever think users would want to run their app with the most popular open source RDMBS engine. Lesson to be learned here.
Author
Owner

@BlackDex commented on GitHub (Jun 18, 2026):

Well, i think you are to harsh here, and i also kinda agree with weiznich t.b.h.
I have encountered issues with MariaDB in comparison with Oracle MySQL several times too outside of this project.

And as weiznich also mentions, MariaDB happens to work because MariaDB claims to be compatible. But clearly they are not.
I also understand that if Diesel/Mysqlcrate lean on the Oracle MySQL library, and trying to add support for MariaDB separately that will cause more maintenance work that they will not do that.

The same here btw, lot's of people wanted to use something different than the official PostgreSQL server for some reason.
But then, those databases claim to be PostgreSQL compatible, but... then not fully, and you need to make weird adjustments or exclusions or if..else statements to try and make that work. That is very very prone to errors or missing things when trying to add new features. Supporting 3 different databases already is a task by it self even with an ORM.

Also, you keep comparing Rust with PHP, do not forget that PHP is backed by Zend which is a For Profit company and they probably have the resources, which Diesel, mysqlclient-sys and Vaultwarden all have not.

<!-- gh-comment-id:4742670045 --> @BlackDex commented on GitHub (Jun 18, 2026): Well, i think you are to harsh here, and i also kinda agree with weiznich t.b.h. I have encountered issues with MariaDB in comparison with Oracle MySQL several times too outside of this project. And as weiznich also mentions, MariaDB happens to work because MariaDB claims to be compatible. But clearly they are not. I also understand that if Diesel/Mysqlcrate lean on the Oracle MySQL library, and trying to add support for MariaDB separately that will cause more maintenance work that they will not do that. The same here btw, lot's of people wanted to use something different than the official PostgreSQL server for some reason. But then, those databases claim to be PostgreSQL compatible, but... then not fully, and you need to make weird adjustments or exclusions or if..else statements to try and make that work. That is very very prone to errors or missing things when trying to add new features. Supporting 3 different databases already is a task by it self even with an ORM. Also, you keep comparing Rust with PHP, do not forget that PHP is backed by Zend which is a For Profit company and they probably have the resources, which Diesel, mysqlclient-sys and Vaultwarden all have not.
Author
Owner

@WanWizard commented on GitHub (Jun 18, 2026):

Perhaps, but when it is about a common low-level component connecting to the most used open source RDMBS deployed, I can't stop thinking about the famous cartoon where the entire ecosystem balances in a tiny component maintained by some open source dude in a shed 😁 . Combined with Spiderman's "with great power comes great responsibility" statement.

I maintain a development framework myself, which contains an ORM too. I can't for one second think I would ever tell the developers that rely on my framework for their apps (and sometimes their livelyhood) to f'off when they encounter a MariaDB (or MySQL, or PostgreSQL) issue. I may not be able to fix it (because of an upstream bug for example, as this may very well proof to be). but I will put the effort in, time permitting, to help the users that have become to depend on my framework for their apps.

As my mentor a long time ago said: "then, one day, you wake up and your attic antics has users. then you have to make a decision, do you keep it like that, or do you acknowledge that fact and professionalise? Even though you might not be employed to do so?".

p.s. PHP has not been a Zend product for a long time. It has the same status where the source of the product is open source (like Linux itself), and commercial comparies provide a supported version with their modifications (like Perforce, which now owns the Zend brand).

<!-- gh-comment-id:4742894433 --> @WanWizard commented on GitHub (Jun 18, 2026): Perhaps, but when it is about a common low-level component connecting to the most used open source RDMBS deployed, I can't stop thinking about the famous cartoon where the entire ecosystem balances in a tiny component maintained by some open source dude in a shed 😁 . Combined with Spiderman's "with great power comes great responsibility" statement. I maintain a development framework myself, which contains an ORM too. I can't for one second think I would ever tell the developers that rely on my framework for their apps (and sometimes their livelyhood) to f'off when they encounter a MariaDB (or MySQL, or PostgreSQL) issue. I may not be able to fix it (because of an upstream bug for example, as this may very well proof to be). but I will put the effort in, time permitting, to help the users that have become to depend on my framework for their apps. As my mentor a long time ago said: "then, one day, you wake up and your attic antics has users. then you have to make a decision, do you keep it like that, or do you acknowledge that fact and professionalise? Even though you might not be employed to do so?". p.s. PHP has not been a Zend product for a long time. It has the same status where the source of the product is open source (like Linux itself), and commercial comparies provide a supported version with their modifications (like Perforce, which now owns the Zend brand).
Author
Owner

@gudzpoz commented on GitHub (Jun 18, 2026):

Ah, I misunderstood, so it is the client library that introduced the breaking change.

I've reproduced this issue with MySQL 9.7, with mariadb-clients library on Arch Linux. Here are the reproducing steps:

  1. Database setup:
$ # Terminal 1 (use docker if you prefer it)
$ podman run --rm -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=test mysql:9.7.1
$ # Terminal 2
$ mariadb -h 127.0.0.1 -uroot -ptest
MySQL [(none)]> create database vw;
  1. Run the vaultwarden binary (system: Arch Linux, vaultwarden 1.36.0-1.1 from cachyos-extra-v3). (I removed the This is an *unofficial* Bitwarden implementation banner from all the logs below.)
$ # Terminal 2
$ WEB_VAULT_ENABLED=false DATABASE_URL="mysql://root:test@127.0.0.1/vw" vaultwarden
[2026-06-19 00:20:54.798][start][INFO] Rocket has launched from http://127.0.0.1:8000
^C[2026-06-19 00:21:02.991][vaultwarden][INFO] Received SIGINT, initiating graceful shutdown
[2026-06-19 00:21:02.991][vaultwarden][INFO] Vaultwarden process exited!
$ # The above initializes the database, after which you press Ctrl+C.
$ # Now, let's re-launch vaultwarden:
$ WEB_VAULT_ENABLED=false DATABASE_URL="mysql://root:test@127.0.0.1/vw" vaultwarden
[2026-06-19 00:21:07.582][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("20260425120000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501
   0: <unknown>
   1: <unknown>
   2: <unknown>
   3: <unknown>
   4: <unknown>
   5: <unknown>
   6: <unknown>
   7: <unknown>
   8: <unknown>
   9: <unknown>
  10: <unknown>
  11: <unknown>
  12: <unknown>
  13: <unknown>
  14: <unknown>
  15: __libc_start_main
  16: <unknown>

Now, I believe the binary bundled by Arch has been stripped of its debug symbols. So, here's another way to reproduce it:

$ mariadb -h 127.0.0.1 -uroot -ptest
MySQL [(none)]> drop database vw;
MySQL [(none)]> create database vw;
$ git clone https://github.com/dani-garcia/vaultwarden --branch=1.36.0 --depth=1
$ cd vaultwarden
$ WEB_VAULT_ENABLED=false DATABASE_URL="mysql://root:test@127.0.0.1/vw" cargo run --features mysql
[2026-06-19 00:51:05.480][start][INFO] Rocket has launched from http://127.0.0.1:8000
^C[2026-06-19 00:51:08.334][vaultwarden][INFO] Received SIGINT, initiating graceful shutdown
[2026-06-19 00:51:08.334][vaultwarden][INFO] Vaultwarden process exited!
$ WEB_VAULT_ENABLED=false DATABASE_URL="mysql://root:test@127.0.0.1/vw" cargo run --features mysql
[2026-06-19 00:51:10.061][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("20260425120000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501
...
Full Stacktrace
[2026-06-19 00:51:10.061][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("20260425120000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501
   0: {closure#5}
             at ./src/main.rs:399:25
   1: <alloc::boxed::Box<dyn for<'a, 'b> core::ops::function::Fn<(&'a std::panic::PanicHookInfo<'b>,), Output = ()> + core::marker::Sync + core::marker::Send> as core::ops::function::Fn<(&std::panic::PanicHookInfo,)>>::call
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/alloc/src/boxed.rs:2254:9
   2: std::panicking::panic_with_hook
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:833:13
   3: std::panicking::panic_handler::{closure#0}
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:698:13
   4: std::sys::backtrace::__rust_end_short_backtrace::<std::panicking::panic_handler::{closure#0}, !>
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/sys/backtrace.rs:182:18
   5: __rustc::rust_begin_unwind
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:689:5
   6: core::panicking::panic_fmt
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/panicking.rs:80:14
   7: core::result::unwrap_failed
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/result.rs:1867:5
   8: core::result::Result<T,E>::expect
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/result.rs:1185:23
   9: vaultwarden::db::mysql_migrations::run_migrations
             at ./src/db/mod.rs:501:55
  10: from_config
             at ./src/db/mod.rs:200:17
  11: core::ops::function::FnMut::call_mut
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:166:5
  12: {async_fn#0}<fn() -> core::result::Result<vaultwarden::db::DbPool, vaultwarden::error::Error>, vaultwarden::db::DbPool, vaultwarden::error::Error>
             at ./src/util.rs:726:15
  13: {async_fn#0}
             at ./src/main.rs:548:83
  14: {async_block#0}
             at ./src/main.rs:87:33
  15: poll<alloc::boxed::Box<vaultwarden::main::{async_block_env#0}, alloc::alloc::Global>>
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/future/future.rs:133:9
  16: {closure#0}<core::pin::Pin<alloc::boxed::Box<vaultwarden::main::{async_block_env#0}, alloc::alloc::Global>>>
             at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/park.rs:284:71
  17: with_budget<core::task::poll::Poll<core::result::Result<(), vaultwarden::error::Error>>, tokio::runtime::park::{impl#4}::block_on::{closure_env#0}<core::pin::Pin<alloc::boxed::Box<vaultwarden::main::{async_block_env#0}, alloc::alloc::Global>>>>
             at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/task/coop/mod.rs:167:5
  18: budget<core::task::poll::Poll<core::result::Result<(), vaultwarden::error::Error>>, tokio::runtime::park::{impl#4}::block_on::{closure_env#0}<core::pin::Pin<alloc::boxed::Box<vaultwarden::main::{async_block_env#0}, alloc::alloc::Global>>>>
             at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/task/coop/mod.rs:133:5
  19: block_on<core::pin::Pin<alloc::boxed::Box<vaultwarden::main::{async_block_env#0}, alloc::alloc::Global>>>
             at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/park.rs:284:31
  20: tokio::runtime::context::blocking::BlockingRegionGuard::block_on
             at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/context/blocking.rs:66:14
  21: tokio::runtime::scheduler::multi_thread::MultiThread::block_on::{{closure}}
             at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/scheduler/multi_thread/mod.rs:92:22
  22: tokio::runtime::context::runtime::enter_runtime
             at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/context/runtime.rs:65:16
  23: tokio::runtime::scheduler::multi_thread::MultiThread::block_on
             at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/scheduler/multi_thread/mod.rs:91:9
  24: tokio::runtime::runtime::Runtime::block_on_inner
             at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/runtime.rs:373:50
  25: block_on<vaultwarden::main::{async_block_env#0}>
             at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/runtime.rs:343:18
  26: rocket::async_run
             at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rocket-0.5.1/src/lib.rs:250:26
  27: rocket::async_main
             at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rocket-0.5.1/src/lib.rs:282:5
  28: vaultwarden::main
             at ./src/main.rs:72:38
  29: core::ops::function::FnOnce::call_once
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:250:5
  30: __rust_begin_short_backtrace<fn() -> core::result::Result<(), vaultwarden::error::Error>, core::result::Result<(), vaultwarden::error::Error>>
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/sys/backtrace.rs:166:18
  31: {closure#0}<core::result::Result<(), vaultwarden::error::Error>>
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:206:18
  32: <&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe as core::ops::function::FnOnce<()>>::call_once
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:287:21
  33: std::panicking::catch_unwind::do_call::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:581:40
  34: std::panicking::catch_unwind::<i32, &dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe>
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:544:19
  35: std::panic::catch_unwind::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panic.rs:359:14
  36: std::rt::lang_start_internal::{closure#0}
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:175:24
  37: std::panicking::catch_unwind::do_call::<std::rt::lang_start_internal::{closure#0}, isize>
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:581:40
  38: std::panicking::catch_unwind::<isize, std::rt::lang_start_internal::{closure#0}>
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:544:19
  39: std::panic::catch_unwind::<std::rt::lang_start_internal::{closure#0}, isize>
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panic.rs:359:14
  40: std::rt::lang_start_internal
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:171:5
  41: std::rt::lang_start
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:205:5
  42: main
  43: <unknown>
  44: __libc_start_main
  45: _start

However, I couldn't reproduce this with vaultwarden container:

$ podman run --rm -it -e DATABASE_URL="mysql://root:test@127.0.0.1/vw" --net=host -e I_REALLY_WANT_VOLATILE_STORAGE=true -e ROCKET_PORT=8000 --entrypoint sh vaultwarden/server:latest
# ./start.sh
[2026-06-18 16:54:58.005][vaultwarden::auth][INFO] Private key 'data/rsa_key.pem' created correctly
[2026-06-18 16:54:58.048][start][INFO] Rocket has launched from http://0.0.0.0:8000
^C[2026-06-18 16:54:59.244][vaultwarden][INFO] Received SIGINT, initiating graceful shutdown
[2026-06-18 16:54:59.245][vaultwarden][INFO] Vaultwarden process exited!
# ./start.sh
[2026-06-18 16:55:02.696][start][INFO] Rocket has launched from http://0.0.0.0:8000
^C[2026-06-18 16:55:04.088][vaultwarden][INFO] Received SIGINT, initiating graceful shutdown
[2026-06-18 16:55:04.089][vaultwarden][INFO] Vaultwarden process exited!
<!-- gh-comment-id:4744279773 --> @gudzpoz commented on GitHub (Jun 18, 2026): <details> <summary>Ah, I misunderstood, so it is the client library that introduced the breaking change.</summary> I've reproduced this issue with MySQL 9.7, with mariadb-clients library on Arch Linux. Here are the reproducing steps: 1. Database setup: ```console $ # Terminal 1 (use docker if you prefer it) $ podman run --rm -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=test mysql:9.7.1 $ # Terminal 2 $ mariadb -h 127.0.0.1 -uroot -ptest MySQL [(none)]> create database vw; ``` 2. Run the vaultwarden binary (system: Arch Linux, vaultwarden 1.36.0-1.1 from cachyos-extra-v3). (I removed the `This is an *unofficial* Bitwarden implementation` banner from all the logs below.) ```console $ # Terminal 2 $ WEB_VAULT_ENABLED=false DATABASE_URL="mysql://root:test@127.0.0.1/vw" vaultwarden [2026-06-19 00:20:54.798][start][INFO] Rocket has launched from http://127.0.0.1:8000 ^C[2026-06-19 00:21:02.991][vaultwarden][INFO] Received SIGINT, initiating graceful shutdown [2026-06-19 00:21:02.991][vaultwarden][INFO] Vaultwarden process exited! $ # The above initializes the database, after which you press Ctrl+C. $ # Now, let's re-launch vaultwarden: $ WEB_VAULT_ENABLED=false DATABASE_URL="mysql://root:test@127.0.0.1/vw" vaultwarden [2026-06-19 00:21:07.582][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("20260425120000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501 0: <unknown> 1: <unknown> 2: <unknown> 3: <unknown> 4: <unknown> 5: <unknown> 6: <unknown> 7: <unknown> 8: <unknown> 9: <unknown> 10: <unknown> 11: <unknown> 12: <unknown> 13: <unknown> 14: <unknown> 15: __libc_start_main 16: <unknown> ``` Now, I believe the binary bundled by Arch has been stripped of its debug symbols. So, here's another way to reproduce it: ```console $ mariadb -h 127.0.0.1 -uroot -ptest MySQL [(none)]> drop database vw; MySQL [(none)]> create database vw; $ git clone https://github.com/dani-garcia/vaultwarden --branch=1.36.0 --depth=1 $ cd vaultwarden $ WEB_VAULT_ENABLED=false DATABASE_URL="mysql://root:test@127.0.0.1/vw" cargo run --features mysql [2026-06-19 00:51:05.480][start][INFO] Rocket has launched from http://127.0.0.1:8000 ^C[2026-06-19 00:51:08.334][vaultwarden][INFO] Received SIGINT, initiating graceful shutdown [2026-06-19 00:51:08.334][vaultwarden][INFO] Vaultwarden process exited! $ WEB_VAULT_ENABLED=false DATABASE_URL="mysql://root:test@127.0.0.1/vw" cargo run --features mysql [2026-06-19 00:51:10.061][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("20260425120000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501 ... ``` <details> <summary>Full Stacktrace</summary> ``` [2026-06-19 00:51:10.061][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("20260425120000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501 0: {closure#5} at ./src/main.rs:399:25 1: <alloc::boxed::Box<dyn for<'a, 'b> core::ops::function::Fn<(&'a std::panic::PanicHookInfo<'b>,), Output = ()> + core::marker::Sync + core::marker::Send> as core::ops::function::Fn<(&std::panic::PanicHookInfo,)>>::call at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/alloc/src/boxed.rs:2254:9 2: std::panicking::panic_with_hook at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:833:13 3: std::panicking::panic_handler::{closure#0} at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:698:13 4: std::sys::backtrace::__rust_end_short_backtrace::<std::panicking::panic_handler::{closure#0}, !> at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/sys/backtrace.rs:182:18 5: __rustc::rust_begin_unwind at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:689:5 6: core::panicking::panic_fmt at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/panicking.rs:80:14 7: core::result::unwrap_failed at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/result.rs:1867:5 8: core::result::Result<T,E>::expect at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/result.rs:1185:23 9: vaultwarden::db::mysql_migrations::run_migrations at ./src/db/mod.rs:501:55 10: from_config at ./src/db/mod.rs:200:17 11: core::ops::function::FnMut::call_mut at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:166:5 12: {async_fn#0}<fn() -> core::result::Result<vaultwarden::db::DbPool, vaultwarden::error::Error>, vaultwarden::db::DbPool, vaultwarden::error::Error> at ./src/util.rs:726:15 13: {async_fn#0} at ./src/main.rs:548:83 14: {async_block#0} at ./src/main.rs:87:33 15: poll<alloc::boxed::Box<vaultwarden::main::{async_block_env#0}, alloc::alloc::Global>> at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/future/future.rs:133:9 16: {closure#0}<core::pin::Pin<alloc::boxed::Box<vaultwarden::main::{async_block_env#0}, alloc::alloc::Global>>> at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/park.rs:284:71 17: with_budget<core::task::poll::Poll<core::result::Result<(), vaultwarden::error::Error>>, tokio::runtime::park::{impl#4}::block_on::{closure_env#0}<core::pin::Pin<alloc::boxed::Box<vaultwarden::main::{async_block_env#0}, alloc::alloc::Global>>>> at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/task/coop/mod.rs:167:5 18: budget<core::task::poll::Poll<core::result::Result<(), vaultwarden::error::Error>>, tokio::runtime::park::{impl#4}::block_on::{closure_env#0}<core::pin::Pin<alloc::boxed::Box<vaultwarden::main::{async_block_env#0}, alloc::alloc::Global>>>> at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/task/coop/mod.rs:133:5 19: block_on<core::pin::Pin<alloc::boxed::Box<vaultwarden::main::{async_block_env#0}, alloc::alloc::Global>>> at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/park.rs:284:31 20: tokio::runtime::context::blocking::BlockingRegionGuard::block_on at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/context/blocking.rs:66:14 21: tokio::runtime::scheduler::multi_thread::MultiThread::block_on::{{closure}} at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/scheduler/multi_thread/mod.rs:92:22 22: tokio::runtime::context::runtime::enter_runtime at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/context/runtime.rs:65:16 23: tokio::runtime::scheduler::multi_thread::MultiThread::block_on at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/scheduler/multi_thread/mod.rs:91:9 24: tokio::runtime::runtime::Runtime::block_on_inner at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/runtime.rs:373:50 25: block_on<vaultwarden::main::{async_block_env#0}> at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/tokio-1.52.1/src/runtime/runtime.rs:343:18 26: rocket::async_run at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rocket-0.5.1/src/lib.rs:250:26 27: rocket::async_main at /home/otaku/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/rocket-0.5.1/src/lib.rs:282:5 28: vaultwarden::main at ./src/main.rs:72:38 29: core::ops::function::FnOnce::call_once at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:250:5 30: __rust_begin_short_backtrace<fn() -> core::result::Result<(), vaultwarden::error::Error>, core::result::Result<(), vaultwarden::error::Error>> at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/sys/backtrace.rs:166:18 31: {closure#0}<core::result::Result<(), vaultwarden::error::Error>> at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:206:18 32: <&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe as core::ops::function::FnOnce<()>>::call_once at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:287:21 33: std::panicking::catch_unwind::do_call::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32> at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:581:40 34: std::panicking::catch_unwind::<i32, &dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe> at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:544:19 35: std::panic::catch_unwind::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32> at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panic.rs:359:14 36: std::rt::lang_start_internal::{closure#0} at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:175:24 37: std::panicking::catch_unwind::do_call::<std::rt::lang_start_internal::{closure#0}, isize> at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:581:40 38: std::panicking::catch_unwind::<isize, std::rt::lang_start_internal::{closure#0}> at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:544:19 39: std::panic::catch_unwind::<std::rt::lang_start_internal::{closure#0}, isize> at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panic.rs:359:14 40: std::rt::lang_start_internal at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:171:5 41: std::rt::lang_start at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:205:5 42: main 43: <unknown> 44: __libc_start_main 45: _start ``` </details> However, I couldn't reproduce this with vaultwarden container: ```console $ podman run --rm -it -e DATABASE_URL="mysql://root:test@127.0.0.1/vw" --net=host -e I_REALLY_WANT_VOLATILE_STORAGE=true -e ROCKET_PORT=8000 --entrypoint sh vaultwarden/server:latest # ./start.sh [2026-06-18 16:54:58.005][vaultwarden::auth][INFO] Private key 'data/rsa_key.pem' created correctly [2026-06-18 16:54:58.048][start][INFO] Rocket has launched from http://0.0.0.0:8000 ^C[2026-06-18 16:54:59.244][vaultwarden][INFO] Received SIGINT, initiating graceful shutdown [2026-06-18 16:54:59.245][vaultwarden][INFO] Vaultwarden process exited! # ./start.sh [2026-06-18 16:55:02.696][start][INFO] Rocket has launched from http://0.0.0.0:8000 ^C[2026-06-18 16:55:04.088][vaultwarden][INFO] Received SIGINT, initiating graceful shutdown [2026-06-18 16:55:04.089][vaultwarden][INFO] Vaultwarden process exited! ``` </details>
Author
Owner

@BlackDex commented on GitHub (Jun 18, 2026):

@gudzpoz, using mysql as a server? Or using the mysqlclient library from mysql? The main issue is the mariadb client library, not which server.

<!-- gh-comment-id:4744352831 --> @BlackDex commented on GitHub (Jun 18, 2026): @gudzpoz, using mysql as a server? Or using the mysqlclient library from mysql? The main issue is the mariadb client library, not which server.
Author
Owner

@WanWizard commented on GitHub (Jun 18, 2026):

How I read it, mariadb client (libs) with MySQL server backend.

Problem is this shows the error (which we already knew), but not what is causing the error. That probably needs debugging at the protocol level, to see why Diesel doesn't get any response back.

Without any Rust knowledge, if I read

   7: core::result::unwrap_failed
             at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/result.rs:1867:5

correctly, it does a check on returned data size there. Which was a fix made in mariadb Connector/C which is part of the 11.8.7 client libs release (incorrect packet size on prepared statements).

edit: this one: 5fe4d03f26

<!-- gh-comment-id:4744432198 --> @WanWizard commented on GitHub (Jun 18, 2026): How I read it, mariadb client (libs) with MySQL server backend. Problem is this shows the error (which we already knew), but not what is causing the error. That probably needs debugging at the protocol level, to see why Diesel doesn't get any response back. Without any Rust knowledge, if I read ```` 7: core::result::unwrap_failed at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/result.rs:1867:5 ```` correctly, it does a check on returned data size there. Which was a fix made in mariadb Connector/C which is part of the 11.8.7 client libs release (incorrect packet size on prepared statements). edit: this one: https://github.com/mariadb-corporation/mariadb-connector-c/commit/5fe4d03f26045d1215e894d16054935ddd65ecc0
Author
Owner

@BlackDex commented on GitHub (Jun 18, 2026):

It doesn't matter of its MariaDB or MySQL server used as a backend. It's only the MariaDB client library as far as i could tell.
Not tried newer MySQL client verions though.

<!-- gh-comment-id:4744460211 --> @BlackDex commented on GitHub (Jun 18, 2026): It doesn't matter of its MariaDB or MySQL server used as a backend. It's only the MariaDB client library as far as i could tell. Not tried newer MySQL client verions though.
Author
Owner

@WanWizard commented on GitHub (Jun 18, 2026):

I know. Which is now proven. 😁

<!-- gh-comment-id:4744484580 --> @WanWizard commented on GitHub (Jun 18, 2026): I know. Which is now proven. 😁
Author
Owner

@gudzpoz commented on GitHub (Jun 18, 2026):

@gudzpoz, using mysql as a server? Or using the mysqlclient library from mysql? The main issue is the mariadb client library, not which server.

Thank you for the incredibly quick response (and for maintaining Vaultwarden)! I definitely misunderstood the issue there. (Yes, it was libmariadbclient + MySQL.) It sounds like switching to docker or explicitly installing mysql-clients might be the best options for us users right now. Thanks again!

<!-- gh-comment-id:4744568346 --> @gudzpoz commented on GitHub (Jun 18, 2026): > [@gudzpoz](https://github.com/gudzpoz), using mysql as a server? Or using the mysqlclient library from mysql? The main issue is the mariadb client library, not which server. Thank you for the incredibly quick response (and for maintaining Vaultwarden)! I definitely misunderstood the issue there. (Yes, it was libmariadbclient + MySQL.) It sounds like switching to docker or explicitly installing mysql-clients might be the best options for us users right now. Thanks again!
Author
Owner

@weiznich commented on GitHub (Jun 18, 2026):

Given that some users here act like they are entitled to have a fix as soon as possible and expect me to drop everything and to debug a vague problem they don't even care to provide the necessary information for I would like to clarify a few things.

First of all: Diesel never claimed any compatibility with MariaDB. If it worked for you that's great, but you need to understand that this was never something that is supported by us.

Now you could argue: MariaDB is a widely used database system you need to support it. Well, we look for someone to help with this since 8 years: https://github.com/diesel-rs/diesel/issues/1882, so feel free to contribute. My personal take away is that it can't be that important given that in the last 8 years no one needed it that much that they actually contributed. In fact we even lack of a contributor that cares about the MySQL backend, if that doesn't change in the future chances are high that this backend gets deprecated and removed.

If you now argue: You still need to fix the bug as soon as possible let me just ask: Why is you bug more important than the bugs and problems of other users? I can spend my limited amount of time only on a limited amount of fixes. So why should I spend it on something that only affects a smaller fraction of the diesel user base than on something that affects all users? For reference Diesel currently sees around 2 million monthly downloads, pq-sys (the Postgres client library) around 900k downloads, mysqlclient-sys only 80k, so only around 5% of the diesel users have a chance to be affected by this and only a fraction might be affected. That is therefore just no high priority issue for me that warrants dropping everything.

Now if you want to help resolving this here are a few starting points how you can help:

  • Don't complain that other persons have other priorities. Doing that will likely only reduce the chance to get a fix soon
  • Don't rely on other people to fix your problems, even as non-programmer you have more than enough ways to help pinning down the issue. (Like e.g reporting it to libmariadb)
  • Try to extract a minimal example from the vaultwarden codebase and name a docker image (including hash) to reproduce the issue reliable.
  • Start contributing to Diesel to get better MySQl and eventually MariaDB support for everyone
<!-- gh-comment-id:4745758097 --> @weiznich commented on GitHub (Jun 18, 2026): Given that some users here act like they are entitled to have a fix as soon as possible and expect me to drop everything and to debug a vague problem they don't even care to provide the necessary information for I would like to clarify a few things. First of all: Diesel never claimed any compatibility with MariaDB. If it worked for you that's great, but you need to understand that this was never something that is supported by us. Now you could argue: MariaDB is a widely used database system you need to support it. Well, we look for someone to help with this since 8 years: https://github.com/diesel-rs/diesel/issues/1882, so feel free to contribute. My personal take away is that it can't be that important given that in the last 8 years no one needed it that much that they actually contributed. In fact we even lack of a contributor that cares about the MySQL backend, if that doesn't change in the future chances are high that this backend gets deprecated and removed. If you now argue: You still need to fix the bug as soon as possible let me just ask: Why is you bug more important than the bugs and problems of other users? I can spend my limited amount of time only on a limited amount of fixes. So why should I spend it on something that only affects a smaller fraction of the diesel user base than on something that affects all users? For reference Diesel currently sees around 2 million monthly downloads, pq-sys (the Postgres client library) around 900k downloads, mysqlclient-sys only 80k, so only around 5% of the diesel users have a chance to be affected by this and only a fraction might be affected. That is therefore just no high priority issue for me that warrants dropping everything. Now if you want to help resolving this here are a few starting points how you can help: * Don't complain that other persons have other priorities. Doing that will likely only reduce the chance to get a fix soon * Don't rely on other people to fix your problems, even as non-programmer you have more than enough ways to help pinning down the issue. (Like e.g reporting it to libmariadb) * Try to extract a minimal example from the vaultwarden codebase and name a docker image (including hash) to reproduce the issue reliable. * Start contributing to Diesel to get better MySQl and eventually MariaDB support for everyone
Author
Owner

@WanWizard commented on GitHub (Jun 18, 2026):

Eh... Nobody asked you, anywhere, to drop everything. Nobody said this issue is more or less important than all other issues. Nobody said other priorities were not important.

And all I asked for was to be taken serious, and not basically be told to fuck off as soon as I reported it.

I have no problem with reporting it in MariaDB's Jira, but I have no clue what to report. Someone needs to debug it, and explain why result.rs crashes. They can't fix things if they don't know what to fix. Like I said a few times, I am an end-user, have no clue where to start and what to do, and at my age learning a new programming language just because of a debugging issue is a bit too much to ask.

<!-- gh-comment-id:4746916459 --> @WanWizard commented on GitHub (Jun 18, 2026): Eh... Nobody asked you, anywhere, to drop everything. Nobody said this issue is more or less important than all other issues. Nobody said other priorities were not important. And all I asked for was to be taken serious, and not basically be told to fuck off as soon as I reported it. I have no problem with reporting it in MariaDB's Jira, but I have no clue what to report. Someone needs to debug it, and explain why result.rs crashes. They can't fix things if they don't know what to fix. Like I said a few times, I am an end-user, have no clue where to start and what to do, and at my age learning a new programming language just because of a debugging issue is a bit too much to ask.
Author
Owner

@stefan0xC commented on GitHub (Jun 19, 2026):

@WanWizard your characterization of @weiznich response is unfair because it was neither "fuck you" nor "fuck off" but a plea to provide more infos (e.g. a minimal reproducible example) https://github.com/sgrif/mysqlclient-sys/issues/80#issuecomment-4734532289 to which you responded basically that you can't be bothered with that. The insistence that MariaDB is not an officially supported backend by diesel is not a fuck off either but an important clarification why you can't expect a fix any time soon. If you want to be taken seriously you should act more respectfully and empathetic and not list reasons why people should work on this issue with bogus claims (e.g. that MariaDB is more popular than either MySQL or Postgres).

I have no problem with reporting it in MariaDB's Jira, but I have no clue what to report. Someone needs to debug it, and explain why result.rs crashes. They can't fix things if they don't know what to fix.

Yes and the same is true for @weiznich but instead of accepting that you argued that the response you got was somehow wrong and that you are disappointed. Venting your frustrations on maintainers like you did in https://github.com/sgrif/mysqlclient-sys/issues/80#issuecomment-4741699874 or in this thread is not helping anyone but leads only to the problem of maintainer burnout. So please stop doing that.

<!-- gh-comment-id:4748387691 --> @stefan0xC commented on GitHub (Jun 19, 2026): @WanWizard your characterization of @weiznich response is unfair because it was neither "fuck you" nor "fuck off" but a plea to provide more infos (e.g. a minimal reproducible example) https://github.com/sgrif/mysqlclient-sys/issues/80#issuecomment-4734532289 to which you responded basically that you can't be bothered with that. The insistence that MariaDB is not an officially supported backend by diesel is not a fuck off either but an important clarification why you can't expect a fix any time soon. If you want to be taken seriously you should act more respectfully and empathetic and not list reasons why people should work on this issue with bogus claims (e.g. that MariaDB [is more popular](https://db-engines.com/en/ranking) [than either MySQL or Postgres](https://survey.stackoverflow.co/2025/technology#most-popular-technologies-database-database)). > I have no problem with reporting it in MariaDB's Jira, but I have no clue what to report. Someone needs to debug it, and explain why result.rs crashes. They can't fix things if they don't know what to fix. Yes and the same is true for @weiznich but instead of accepting that you argued that the response you got was somehow wrong and that you are disappointed. Venting your frustrations on maintainers like you did in https://github.com/sgrif/mysqlclient-sys/issues/80#issuecomment-4741699874 or in this thread is not helping anyone but leads only to [the problem of maintainer burnout](https://mikemcquaid.com/open-source-maintainers-owe-you-nothing/). So please stop doing that.
Author
Owner

@xalt7x commented on GitHub (Jun 19, 2026):

@madito

This also happens in any version of 11.X from Ubuntu onwards. I first tried with 11.4 and then with 11.8 and it's still the same. However, it doesn't happen if we use MySQL or one of the MariaDB versions you mentioned, 10.11.16.

Or it could also be the combination of MariaDB + Ubuntu 24.04.

I've tested with Debian 12 and 13 with the packages from https://github.com/dionysius/vaultwarden-deb
If I install MariaDB from the Debian, Vaultwarden+MariaDB works fine
Debian 12 currently provides version 1:10.11.16+maria~deb12 ; Debian 13 — 1:11.8.6-0+deb13u1
If I use MariaDB repo and upgrade to the latest minor version of the 10.x, Vaultwarden doesn't start with the error like

Jun 19 13:25:00 debian vaultwarden[600]: [2026-06-19 13:25:00.262][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("20260425120000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501

That happens after the clean install, user creation and service restart.
Also, the initial user creation doesn't work properly. After the user creation, normally Vaultwarden shows the page that asks to either install extension or "Skip to web app". With incompatible MariaDB, it redirects to the login page where the password doesn't work.

Downgrading packages to either Debian repo version, or older minor MariaDB version fixes the issue.
For 10.11, the latest working version is really 10.11.16. However, I'd rather recommend using Debian version to receive security updates.

<!-- gh-comment-id:4750841536 --> @xalt7x commented on GitHub (Jun 19, 2026): @madito > This also happens in any version of 11.X from Ubuntu onwards. I first tried with 11.4 and then with 11.8 and it's still the same. However, it doesn't happen if we use MySQL or one of the MariaDB versions you mentioned, 10.11.16. > > Or it could also be the combination of MariaDB + Ubuntu 24.04. I've tested with Debian 12 and 13 with the packages from https://github.com/dionysius/vaultwarden-deb If I install MariaDB from the Debian, Vaultwarden+MariaDB works fine Debian 12 currently provides version 1:10.11.16+maria~deb12 ; Debian 13 — 1:11.8.6-0+deb13u1 If I use [MariaDB repo](https://mariadb.org/download/?t=repo-config) and upgrade to the latest minor version of the 10.x, Vaultwarden doesn't start with the error like > Jun 19 13:25:00 debian vaultwarden[600]: [2026-06-19 13:25:00.262][panic][ERROR] thread 'main' panicked at 'Error running migrations: QueryError(DieselMigrationName { name: "2026-04-25-120000_sso_auth_binding", version: MigrationVersion("20260425120000") }, DatabaseError(Unknown, "Duplicate column name 'binding_hash'"))': src/db/mod.rs:501 That happens after the clean install, user creation and service restart. Also, the initial user creation doesn't work properly. After the user creation, normally Vaultwarden shows the page that asks to either install extension or "Skip to web app". With incompatible MariaDB, it redirects to the login page where the password doesn't work. Downgrading packages to either Debian repo version, or older minor MariaDB version fixes the issue. For 10.11, the latest working version is really 10.11.16. However, I'd rather recommend using Debian version to receive security updates.
Author
Owner

@vloup commented on GitHub (Jun 20, 2026):

Okay, I think I built a stupid workaround for arch linux users that do not particularly want to downgrade MariaDB to 12.2.2 (from 12.3.2) by keeping the old client lib around for vaultwarden. Not an ideal solution, but it was fun to build and seem to work. That might interest you @marcusweinhold.

First download the old package mariadb-libs 12.2.2-2 from https://archive.archlinux.org/packages/m/mariadb-libs/mariadb-libs-12.2.2-2-x86_64.pkg.tar.zst. Unpack it with zstd and tar and only keep libmariadb.so.3. Store it inside /var/lib/vaultwarden.
Then in your config in /etc/vaultwarden.env, just add the line LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/var/lib/vaultwarden and you're golden.
(If you quote this anywhere else, please refer to this discussion)

cc-ing @grawlinson since he's the packager for it and it may interest him somehow if he wants to add a disclaimer of some sort during install.

While I see others issues were created for diesel-rs and mysqlclient-sys. I have to agree for the few lines of code I read that vaultwarden is not doing anything fancy (disclaimer I don't know rust). Has anyone reached the MariaDB folks? Has there been other similar breakages in other programming ecosystems with this update?

<!-- gh-comment-id:4759897714 --> @vloup commented on GitHub (Jun 20, 2026): Okay, I think I built a stupid workaround for arch linux users that do not particularly want to downgrade MariaDB to 12.2.2 (from 12.3.2) by keeping the old client lib around for vaultwarden. Not an ideal solution, but it was fun to build and seem to work. That might interest you @marcusweinhold. First download the old package mariadb-libs 12.2.2-2 from https://archive.archlinux.org/packages/m/mariadb-libs/mariadb-libs-12.2.2-2-x86_64.pkg.tar.zst. Unpack it with zstd and tar and only keep `libmariadb.so.3`. Store it inside `/var/lib/vaultwarden`. Then in your config in `/etc/vaultwarden.env`, just add the line `LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/var/lib/vaultwarden` and you're golden. (If you quote this anywhere else, please refer to this discussion) cc-ing @grawlinson since he's the packager for it and it may interest him somehow if he wants to add a disclaimer of some sort during install. While I see others issues were created for diesel-rs and mysqlclient-sys. I have to agree for the few lines of code I read that vaultwarden is not doing anything fancy (disclaimer I don't know rust). Has anyone reached the MariaDB folks? Has there been other similar breakages in other programming ecosystems with this update?
Author
Owner

@grawlinson commented on GitHub (Jun 20, 2026):

cc-ing @grawlinson since he's the packager for it and it may interest him somehow if he wants to add a disclaimer of some sort during install.

Opened an issue downstream: https://gitlab.archlinux.org/archlinux/packaging/packages/vaultwarden/-/work_items/13

I think removing support for MariaDB/MySQL is the best outcome for all open source maintainers involved in this.

<!-- gh-comment-id:4760049521 --> @grawlinson commented on GitHub (Jun 20, 2026): > cc-ing [@grawlinson](https://github.com/grawlinson) since he's the packager for it and it may interest him somehow if he wants to add a disclaimer of some sort during install. Opened an issue downstream: https://gitlab.archlinux.org/archlinux/packaging/packages/vaultwarden/-/work_items/13 I think removing support for MariaDB/MySQL is the best outcome for all open source maintainers involved in this.
Author
Owner

@osc86 commented on GitHub (Jun 20, 2026):

I ran into the same issue after updating my OpenBSD system today (mariadb-client-11.4.12v1). From what I've read, the maintainer is unwilling to provide support for MariaDB, which is fine. What is our best option now, switch to postgres? I can't simply downgrade packages on OpenBSD; that won't work long term.
Edit:
I decided to downgrade anyway, although I know I'll be shooting myself in the foot. I currently have no other option.

rcctl stop vaultwarden mysqld
pkg_add -D downgrade -r https://cloudflare.cdn.openbsd.org/pub/OpenBSD/7.8/packages/amd64/mariadb-server-11.4.7v1.tgz
pkg_add -D downgrade -r https://cloudflare.cdn.openbsd.org/pub/OpenBSD/7.8/packages/amd64/mariadb-client-11.4.7v1.tgz
rcctl start mysqld vaultwarden
<!-- gh-comment-id:4760293062 --> @osc86 commented on GitHub (Jun 20, 2026): I ran into the same issue after updating my OpenBSD system today (mariadb-client-11.4.12v1). From what I've read, the maintainer is unwilling to provide support for MariaDB, which is fine. What is our best option now, switch to postgres? I can't simply downgrade packages on OpenBSD; that won't work long term. Edit: I decided to downgrade anyway, although I know I'll be shooting myself in the foot. I currently have no other option. ``` rcctl stop vaultwarden mysqld pkg_add -D downgrade -r https://cloudflare.cdn.openbsd.org/pub/OpenBSD/7.8/packages/amd64/mariadb-server-11.4.7v1.tgz pkg_add -D downgrade -r https://cloudflare.cdn.openbsd.org/pub/OpenBSD/7.8/packages/amd64/mariadb-client-11.4.7v1.tgz rcctl start mysqld vaultwarden ```
Author
Owner

@WanWizard commented on GitHub (Jun 21, 2026):

I think removing support for MariaDB/MySQL is the best outcome for all open source maintainers involved in this.

That leaves those of us that have no choice in the cold.

Besides that, as I understand the problem is only MariaDB, not MySQL, so removing MySQL support to might be a bit harsh.

<!-- gh-comment-id:4760542623 --> @WanWizard commented on GitHub (Jun 21, 2026): > I think removing support for MariaDB/MySQL is the best outcome for all open source maintainers involved in this. That leaves those of us that have no choice in the cold. Besides that, as I understand the problem is only MariaDB, not MySQL, so removing MySQL support to might be a bit harsh.
Author
Owner

@grawlinson commented on GitHub (Jun 21, 2026):

I think removing support for MariaDB/MySQL is the best outcome for all open source maintainers involved in this.

That leaves those of us that have no choice in the cold.

You’ve got the option of switching to a better DB provider, and in regards to open source, support is not guaranteed at all. The maintainer for diesel has explicitly referenced a standing bug (for 8 years!) that anyone can hop in and fix. That it hasn’t happened yet really does prove that you shouldn’t even be depending on MariaDB.

Besides that, as I understand the problem is only MariaDB, not MySQL, so removing MySQL support to might be a bit harsh.

We don’t package MySQL on Arch, so that’s a moot point for us.

<!-- gh-comment-id:4761117156 --> @grawlinson commented on GitHub (Jun 21, 2026): > > I think removing support for MariaDB/MySQL is the best outcome for all open source maintainers involved in this. > > That leaves those of us that have no choice in the cold. You’ve got the option of switching to a better DB provider, and in regards to open source, support is not guaranteed at all. The maintainer for diesel has explicitly referenced a standing bug (for 8 years!) that _anyone_ can hop in and fix. That it hasn’t happened yet really does prove that you shouldn’t even be depending on MariaDB. > Besides that, as I understand the problem is only MariaDB, not MySQL, so removing MySQL support to might be a bit harsh. We don’t package MySQL on Arch, so that’s a moot point for us.
Author
Owner

@BlackDex commented on GitHub (Jun 21, 2026):

We don’t package MySQL on Arch, so that’s a moot point for us.

And other distro's the same.
Besides that, Oracle MySQL doesn't build on 32bit anymore, they do not support that, and that kinda is an issue for us too.

<!-- gh-comment-id:4761133958 --> @BlackDex commented on GitHub (Jun 21, 2026): > We don’t package MySQL on Arch, so that’s a moot point for us. And other distro's the same. Besides that, Oracle MySQL doesn't build on 32bit anymore, they do not support that, and that kinda is an issue for us too.
Author
Owner

@WanWizard commented on GitHub (Jun 21, 2026):

You’ve got the option of switching to a better DB provider

If you're a home user, yes, perhaps. Or use any other solution available, like a self-contained docker image for example.

But in my case, it runs in a strict secure managed hosting environment were I have none of the options, everything runs (and must run) on RHEL servers using a shared MariaDB Galera cluster. And I have to work with that.

We don’t package MySQL on Arch, so that’s a moot point for us.

Besides that, Oracle MySQL doesn't build on 32bit anymore, they do not support that, and that kinda is an issue for us too.

For both, YMMV. I have to work with RHEL (which is 64-bit), which has both the MariaDB and MySQL client libs available. And as long as the hosting provider doesn't migrate to EL10 or an incompatible version of MariaDB,, I'm perfectly happy with pin the client libs for this server to v11.8.6, as it is dedicated for VaultWarden.

Technically I could ask them to install PostgreSQL locally, but they won't support it, so no monitoring, 24/7 management, backups and offsite backups,. etc.

<!-- gh-comment-id:4762090435 --> @WanWizard commented on GitHub (Jun 21, 2026): > You’ve got the option of switching to a better DB provider If you're a home user, yes, perhaps. Or use any other solution available, like a self-contained docker image for example. But in my case, it runs in a strict secure managed hosting environment were I have none of the options, everything runs (and must run) on RHEL servers using a shared MariaDB Galera cluster. And I have to work with that. > We don’t package MySQL on Arch, so that’s a moot point for us. > Besides that, Oracle MySQL doesn't build on 32bit anymore, they do not support that, and that kinda is an issue for us too. For both, YMMV. I have to work with RHEL (which is 64-bit), which has both the MariaDB and MySQL client libs available. And as long as the hosting provider doesn't migrate to EL10 or an incompatible version of MariaDB,, I'm perfectly happy with pin the client libs for this server to v11.8.6, as it is dedicated for VaultWarden. Technically I could ask them to install PostgreSQL locally, but they won't support it, so no monitoring, 24/7 management, backups and offsite backups,. etc.
Author
Owner

@weiznich commented on GitHub (Jun 21, 2026):

But in my case, it runs in a strict secure managed hosting environment were I have none of the options, everything runs (and must run) on RHEL servers using a shared MariaDB Galera cluster. And I have to work with that.

Maybe you shouldn't rely on random persons on the internet for fixing issues for you then? It's always an option to contract someone to do the necessary work for you or even fund the work directly.

<!-- gh-comment-id:4762128114 --> @weiznich commented on GitHub (Jun 21, 2026): > But in my case, it runs in a strict secure managed hosting environment were I have none of the options, everything runs (and must run) on RHEL servers using a shared MariaDB Galera cluster. And I have to work with that. Maybe you shouldn't rely on random persons on the internet for fixing issues for you then? It's always an option to contract someone to do the necessary work for you or even fund the work directly.
Author
Owner

@WanWizard commented on GitHub (Jun 21, 2026):

Maybe not, after all, that is why you immediately responded with the usual "no warranties, fuck off" waiver.

However, I and many others here are not developers, but end-users of Vaultwarden. It is not our business, or our problem, that things are broken in Vaultwarden because of upstream issues in their development stack.

Appearently the Vaultwarden developers have collided with your attitude before up to the point they no longer want (or dare?) to report issues upstream, which is the only reason I did it.

It is up to the Vaultwarden developers to respond to this issue, and if they are forced to stop supporting their app on MariaDB (because of the issue) and MySQL (which works fine but uses the same crate), and up to us end-users to respond to that.

As to the issue at hand, I've offered several times to report it to MariaDB (I have a Jira account there), but as I don't know Rust, and have no clue how to debug it and tell them exactly what is wrong, I can't. And appearently you are unwilling to even help with that. And you know as well as I do, bug reports limited to "it doesn't work" are closed immediately.

<!-- gh-comment-id:4762344325 --> @WanWizard commented on GitHub (Jun 21, 2026): Maybe not, after all, that is why you immediately responded with the usual "no warranties, fuck off" waiver. However, I and many others here are not developers, but end-users of Vaultwarden. It is not our business, or our problem, that things are broken in Vaultwarden because of upstream issues in their development stack. Appearently the Vaultwarden developers have collided with your attitude before up to the point they no longer want (or dare?) to report issues upstream, which is the only reason I did it. It is up to the Vaultwarden developers to respond to this issue, and if they are forced to stop supporting their app on MariaDB (because of the issue) and MySQL (which works fine but uses the same crate), and up to us end-users to respond to that. As to the issue at hand, I've offered several times to report it to MariaDB (I have a Jira account there), but as I don't know Rust, and have no clue how to debug it and tell them exactly what is wrong, I can't. And appearently you are unwilling to even help with that. And you know as well as I do, bug reports limited to "it doesn't work" are closed immediately.
Author
Owner

@weiznich commented on GitHub (Jun 21, 2026):

@WanWizard I just want to clarify something for others here:

Appearently the Vaultwarden developers have collided with your attitude before up to the point they no longer want (or dare?) to report issues upstream, which is the only reason I did it.

I can assure you that this is not the case, the last such discussion happened on Friday. You can check that yourself by going in the mysqlclient-sys issue tracker.

It is up to the Vaultwarden developers to respond to this issue, and if they are forced to stop supporting their app on MariaDB (because of the issue) and MySQL (which works fine but uses the same crate), and up to us end-users to respond to that.

MariaDB was never supported from Diesels point of view. Therefore we cannot stop support for it, it never existed in the beginning.
As for MySQL: The only party I see that is talking about ending support for MySQL are the ArchLinux package maintainers, as for them MySQL means MariaDB. Given these assumptions that's a reasonable decision in my opinion.

The other thing I want to call out again: At no point I wrote a "fuck you" or similar response. It's just without a minimal reproducible example it's much harder to even understand what's the issue at all. Usually the burden to build such a example is on the reporter and not the maintainer, but you couldn't even be bothered to provide even basic information about your environment or what is broken. At that point it's just wasting time for any maintainer to interact with you. Even with that, I might, as expressed, at some point look into this. It's just not a priority for me. Now to be clear: Due to your toxic attitude and the missing reproduction information it is moving down on my priority list.

Finally: You always claim you cannot help with the reproduction information, as you are no rust developer. That's not true, as basic information can be provided by anyone. Beside of that, even a minimal example ca be build by someone motivated without rust knowledge, you just need to remove code from the original application until the code is small. Yes it's a bit harder without knowledge of the language, but certainly possible. If even that is too hard for you, you certainly can hire a Rust developer to do it for you.

And appearently you are unwilling to even help with that. And you know as well as I do, bug reports limited to "it doesn't work" are closed immediately.

It unclear why you expect me to track down the issue, but the MariaDB developers need a minimal reproducible example for that.

<!-- gh-comment-id:4762405841 --> @weiznich commented on GitHub (Jun 21, 2026): @WanWizard I just want to clarify something for others here: > Appearently the Vaultwarden developers have collided with your attitude before up to the point they no longer want (or dare?) to report issues upstream, which is the only reason I did it. I can assure you that this is not the case, the last such discussion happened on Friday. You can check that yourself by going in the mysqlclient-sys issue tracker. > It is up to the Vaultwarden developers to respond to this issue, and if they are forced to stop supporting their app on MariaDB (because of the issue) and MySQL (which works fine but uses the same crate), and up to us end-users to respond to that. MariaDB was never supported from Diesels point of view. Therefore we cannot stop support for it, it never existed in the beginning. As for MySQL: The only party I see that is talking about ending support for MySQL are the ArchLinux package maintainers, as for them MySQL means MariaDB. Given these assumptions that's a reasonable decision in my opinion. The other thing I want to call out again: At no point I wrote a "fuck you" or similar response. It's just without a minimal reproducible example it's much harder to even understand what's the issue at all. Usually the burden to build such a example is on the reporter and not the maintainer, but you couldn't even be bothered to provide even basic information about your environment or what is broken. At that point it's just wasting time for any maintainer to interact with you. Even with that, I might, as expressed, at some point look into this. It's just not a priority for me. Now to be clear: Due to your toxic attitude and the missing reproduction information it is moving down on my priority list. Finally: You always claim you cannot help with the reproduction information, as you are no rust developer. That's not true, as basic information can be provided by anyone. Beside of that, even a minimal example ca be build by someone motivated without rust knowledge, you just need to remove code from the original application until the code is small. Yes it's a bit harder without knowledge of the language, but certainly possible. If even that is too hard for you, you certainly can hire a Rust developer to do it for you. > And appearently you are unwilling to even help with that. And you know as well as I do, bug reports limited to "it doesn't work" are closed immediately. It unclear why you expect me to track down the issue, but the MariaDB developers need a minimal reproducible example for that.
Author
Owner

@WanWizard commented on GitHub (Jun 21, 2026):

It unclear why you expect me to track down the issue, but the MariaDB developers need a minimal reproducible example for that.

I don't expect that, I am willing to put the effort in myself. But I have never seen one line of Rust in my life, and the last C I wrote was 35 years ago. So I need help in the debugging process, and that doesn't have to be from you.

<!-- gh-comment-id:4762449828 --> @WanWizard commented on GitHub (Jun 21, 2026): > It unclear why you expect me to track down the issue, but the MariaDB developers need a minimal reproducible example for that. I don't expect that, I am willing to put the effort in myself. But I have never seen one line of Rust in my life, and the last C I wrote was 35 years ago. So I need help in the debugging process, and that doesn't have to be from you.
Author
Owner

@BlackDex commented on GitHub (Jun 21, 2026):

Appearently the Vaultwarden developers have collided with your attitude before up to the point they no longer want (or dare?) to report issues upstream, which is the only reason I did it.

Let me make one thing very clear, I have never collided with any diesel, mysqlclient-sys, pq-sys or libsqlite3-sys developer ever. I only mentioned their view on MariaDB, which is fine from my point of view. It's not up to me to decide what they should support or not. We thankfully use Diesel's ORM, and @weiznich even added features to Diesel which Vaultwarden was a sole user of. I have helped fixing issues with diesel, mysqclient-sys in the past and I will try to do so if i have the time.

As a side-note, I was also working on trying to get a MVP for this issue to try and find it my self, but i also have other stuff to do, and not yet had the time to work on this.

I would also like this whole debate to stop and from now on only focus on the specific issue.
So, either posts which point to a MVP which can help @weiznich (and us) solve this issue, or specific combinations which work and not work, like Oracle-MySQL client version x.y.z. also does not work for example, or it started since MariaDB version x.y.z etc... , else please refrain from posting anything.

And, a personal note, this whole nasty vibe in the comments here also do not make me want to put any more haste into trying and fixing this, even though I probably know this will break Debian container images with updated packages.

Also, in the order of transparency, I'm going to hide the Off-Topic posts to keep this issue a bit more on-topic.

Thanks for your patience!

<!-- gh-comment-id:4762454541 --> @BlackDex commented on GitHub (Jun 21, 2026): > Appearently the Vaultwarden developers have collided with your attitude before up to the point they no longer want (or dare?) to report issues upstream, which is the only reason I did it. Let me make one thing very clear, I have never collided with any `diesel`, `mysqlclient-sys`, `pq-sys` or `libsqlite3-sys` developer ever. I only mentioned their view on MariaDB, which is fine from my point of view. It's not up to me to decide what they should support or not. We thankfully use Diesel's ORM, and @weiznich even added features to Diesel which Vaultwarden was a sole user of. I have helped fixing issues with `diesel`, `mysqclient-sys` in the past and I will try to do so if i have the time. As a side-note, I was also working on trying to get a MVP for this issue to try and find it my self, but i also have other stuff to do, and not yet had the time to work on this. I would also like this whole debate to stop and from now on only focus on the specific issue. So, either posts which point to a MVP which can help @weiznich (and us) solve this issue, or specific combinations which work and not work, like Oracle-MySQL client version x.y.z. also does not work for example, or it started since MariaDB version x.y.z etc... , else please refrain from posting anything. And, a personal note, this whole nasty vibe in the comments here also do not make me want to put any more haste into trying and fixing this, even though I probably know this will break Debian container images with updated packages. Also, in the order of transparency, I'm going to hide the Off-Topic posts to keep this issue a bit more on-topic. Thanks for your patience!
Author
Owner

@Narrat commented on GitHub (Jun 21, 2026):

There is regression report for the Connector/C project, which explicitly mentions libmariadb and the involved version jumps:
https://jira.mariadb.org/browse/CONC-821

I believe this regression was introduced in commit 40806da9 (follow-up to CONC-812 5fe4d03f), present in the libmariadb bundled with MariaDB server 12.3.2 (64e9fe0). The bug is absent in 12.2.2 (7bb4e6c). I believe that is also absent in in 12.3.1, but the versions I tested for the regression were 12.3.2 and 12.2.2. It would presumably also be present in the yet-to-be-released 3.4.9 Connector/C.

tl;dr it seems that mysql_stmt_bind_result() clobbers caller-provided pointers for buffer length to 0 after the above commit (for temporal columns), breaking the C API's docs promise of this value containing the actual retrieved length.

Could it be possibly apply for this situation? Especially as the report mentions broken/wrong return values.
I will attempt builds of 12.3.2 with the mentioned commits one after another being reverted and see what happens.

<!-- gh-comment-id:4763105823 --> @Narrat commented on GitHub (Jun 21, 2026): There is regression report for the Connector/C project, which explicitly mentions `libmariadb` and the involved version jumps: https://jira.mariadb.org/browse/CONC-821 > I believe this regression was introduced in commit 40806da9 (follow-up to [CONC-812](https://jira.mariadb.org/browse/CONC-812) 5fe4d03f), present in the libmariadb bundled with MariaDB server 12.3.2 (64e9fe0). The bug is absent in 12.2.2 (7bb4e6c). I believe that is also absent in in 12.3.1, but the versions I tested for the regression were 12.3.2 and 12.2.2. It would presumably also be present in the yet-to-be-released 3.4.9 Connector/C. > tl;dr it seems that mysql_stmt_bind_result() clobbers caller-provided pointers for buffer length to 0 after the above commit (for temporal columns), breaking the C API's docs promise of this value containing the actual retrieved length. Could it be possibly apply for this situation? Especially as the report mentions broken/wrong return values. I will attempt builds of 12.3.2 with the mentioned commits one after another being reverted and see what happens.
Author
Owner

@BlackDex commented on GitHub (Jun 22, 2026):

Ok, I build an Alpine version of Vaultwarden using v3.4.9, and that fails.
I tried building it with the CONC-812 patch reverted, that also failed, so it probably isn't something linked to that specific issue or the fix.

I then tried to build with v3.3.19, that fails, v3.3.18 that works just fine, so some change for both versions is causing this specific issue, but probably not CONC-812.

Checking further when i have more time.

<!-- gh-comment-id:4770142827 --> @BlackDex commented on GitHub (Jun 22, 2026): Ok, I build an Alpine version of Vaultwarden using v3.4.9, and that fails. I tried building it with the `CONC-812` patch reverted, that also failed, so it probably isn't something linked to that specific issue or the fix. I then tried to build with v3.3.19, that fails, v3.3.18 that works just fine, so some change for both versions is causing this specific issue, but probably not `CONC-812`. Checking further when i have more time.
Author
Owner

@Narrat commented on GitHub (Jun 22, 2026):

Got around to testing my builds. Not the commit in regards to CONC-812 is the problem, the follow-up commit is?
With just the latter reverted vaultwarden started successfully.

Jun 22 19:26:31 domain vaultwarden[50321]: [2026-06-22 19:26:31.042][start][INFO] Rocket has launched from http:(...)

Could someone confirm?

<!-- gh-comment-id:4771074351 --> @Narrat commented on GitHub (Jun 22, 2026): Got around to testing my builds. Not the commit in regards to [CONC-812](https://github.com/mariadb-corporation/mariadb-connector-c/commit/5fe4d03f26045d1215e894d16054935ddd65ecc0) is the problem, the follow-up [commit](https://github.com/mariadb-corporation/mariadb-connector-c/commit/40806da977ae073e13e64e3b68dc42e3f63020b0) is? With just the latter reverted vaultwarden started successfully. ``` Jun 22 19:26:31 domain vaultwarden[50321]: [2026-06-22 19:26:31.042][start][INFO] Rocket has launched from http:(...) ``` Could someone confirm?
Author
Owner

@WanWizard commented on GitHub (Jun 22, 2026):

I saw that commit too, but dismissed as it looked cosmetic. But I now see that hidden in all the cosmetic stuff in the diff is the length update.

Thanks very much for spending your time debugging this! Let me know if you want me to open a Jira ticket to have it looked at?

<!-- gh-comment-id:4771223698 --> @WanWizard commented on GitHub (Jun 22, 2026): I saw that commit too, but dismissed as it looked cosmetic. But I now see that hidden in all the cosmetic stuff in the diff is the length update. Thanks very much for spending your time debugging this! Let me know if you want me to open a Jira ticket to have it looked at?
Author
Owner

@Narrat commented on GitHub (Jun 22, 2026):

I then tried to build with v3.3.19, that fails, v3.3.18 that works just fine, so some change for both versions is causing this specific issue, but probably not CONC-812.

Was in the middle of making a meal, when I saw your message and let me tell you, my heart dropped :D Didn't expect success after that.
As my post was rather short I will follow up on this with my findings in regards to mariadb-connector-c 3.3 and 3.4 branch. CONC-812 is part of both.

Which commit points the submodule libmariadb to

MariaDB 10.11.x ( https://mariadb.com/docs/release-notes/community-server/10.11 )

3-4 commits after 3.3.18 (working)

fits 3.3.19 release (broken)

fits 3.3.19 release (broken)


MariaDB 12.2.x

Not 3.4.8, but just 4-5 commits ahead (working)


MariaDB 12.3.x

Same as 12.2.2 (working)

more or less 3.4.9 (broken)


libmariadb/Connector differences between releases:
3.3.18 -> 3.3.19
https://github.com/mariadb-corporation/mariadb-connector-c/compare/v3.3.18...v3.3.19

3.4.8 -> 3.4.9
https://github.com/mariadb-corporation/mariadb-connector-c/compare/v3.4.8...v3.4.9

The mariadb releases involved construct a timeframe between February 2026 and May 2026.
Whereas the former connector releases were from December 2025.
Therefore only check from the pinned commits forward


Commits in mariadb-connector-c inbetween 10.11.16 and 10.11.18 (connector 3.3.18+) which appear in the connector-c branch 3.4

fix for https://jira.mariadb.org/browse/CONC-812

one build were I reverted this commit in tandem with the following commit

follow-up on 5fe4d03f26045

one build were only this commit was reverted

Fix MARIADB_TIMESTAMP calculation and packing (CONC-815)

Didn't think it was this, but were to test this, if the first round weren't successfull

MDEV-38550 add LENENC support for COM_CHANGE_USER

Saw it as unlikely, as the connection worked

CONC-819 mysql_real_escape_string incorrectly handles big5

Didn't think it was this, but were to test this, if the first round weren't successfull

Fix memory leaks if binlog is disabled

Seemed unlikely as it was a memleak fix

[misc] add maxscale testing

Just from the description seen as unlikely, as it is a test suite change

[misc] Skip test_conc26 on MaxScale

follow-up of the previous one and also seemed unlikely

<!-- gh-comment-id:4772045307 --> @Narrat commented on GitHub (Jun 22, 2026): > I then tried to build with v3.3.19, that fails, v3.3.18 that works just fine, so some change for both versions is causing this specific issue, but probably not `CONC-812`. > Was in the middle of making a meal, when I saw your message and let me tell you, my heart dropped :D Didn't expect success after that. As my post was rather short I will follow up on this with my findings in regards to `mariadb-connector-c 3.3` and `3.4` branch. `CONC-812` is part of both. Which commit points the submodule libmariadb to MariaDB 10.11.x ( https://mariadb.com/docs/release-notes/community-server/10.11 ) * .16: https://github.com/MariaDB/server/tree/mariadb-10.11.16 https://github.com/MariaDB/mariadb-connector-c/tree/7a5c80e85e36848a161864bad5e8b2d075492838 > 3-4 commits after 3.3.18 (working) * .17: https://github.com/MariaDB/server/tree/mariadb-10.11.17 https://github.com/MariaDB/mariadb-connector-c/tree/93bb9266666a0a838187679ad2cc14af169895da > fits 3.3.19 release (broken) * .18: https://github.com/MariaDB/server/tree/mariadb-10.11.18 https://github.com/MariaDB/mariadb-connector-c/tree/93bb9266666a0a838187679ad2cc14af169895da > fits 3.3.19 release (broken) --------- MariaDB 12.2.x * .2: https://github.com/MariaDB/server/tree/mariadb-12.2.2 https://github.com/MariaDB/mariadb-connector-c/tree/7bb4e6cdf787b32907429287a636857e3b31e6a1 > Not 3.4.8, but just 4-5 commits ahead (working) --------- MariaDB 12.3.x * .1: https://github.com/MariaDB/server/tree/mariadb-12.3.1 https://github.com/MariaDB/mariadb-connector-c/tree/7bb4e6cdf787b32907429287a636857e3b31e6a1 > Same as 12.2.2 (working) * .2: https://github.com/MariaDB/server/tree/mariadb-12.3.2 https://github.com/MariaDB/mariadb-connector-c/tree/64e9fe09fea6a017bab92e19a08d2301e3da5b56 > more or less 3.4.9 (broken) _______________________ libmariadb/Connector differences between releases: 3.3.18 -> 3.3.19 https://github.com/mariadb-corporation/mariadb-connector-c/compare/v3.3.18...v3.3.19 3.4.8 -> 3.4.9 https://github.com/mariadb-corporation/mariadb-connector-c/compare/v3.4.8...v3.4.9 The mariadb releases involved construct a timeframe between February 2026 and May 2026. Whereas the former connector releases were from December 2025. Therefore only check from the pinned commits forward _______________________ Commits in `mariadb-connector-c` inbetween `10.11.16` and `10.11.18` (`connector 3.3.18+`) which appear in the `connector-c branch 3.4` [fix for https://jira.mariadb.org/browse/CONC-812](https://github.com/mariadb-corporation/mariadb-connector-c/commit/5fe4d03f26045d1215e894d16054935ddd65ecc0) > one build were I reverted this commit in tandem with the following commit [follow-up on 5fe4d03f26045](https://github.com/mariadb-corporation/mariadb-connector-c/commit/40806da977ae073e13e64e3b68dc42e3f63020b0) > one build were only this commit was reverted [Fix MARIADB_TIMESTAMP calculation and packing (CONC-815)](https://github.com/mariadb-corporation/mariadb-connector-c/commit/67984288871061a3ac57c62a94985868ea2555f6) > Didn't think it was this, but were to test this, if the first round weren't successfull [MDEV-38550 add LENENC support for COM_CHANGE_USER](https://github.com/mariadb-corporation/mariadb-connector-c/commit/12fd1ca4e4cadd64b28dcc80e8698f08117c3002) > Saw it as unlikely, as the connection worked [CONC-819 mysql_real_escape_string incorrectly handles big5](https://github.com/mariadb-corporation/mariadb-connector-c/commit/1f168de4e09838ffe14da061142ed387541aa25d) > Didn't think it was this, but were to test this, if the first round weren't successfull [Fix memory leaks if binlog is disabled](https://github.com/mariadb-corporation/mariadb-connector-c/commit/d276b4f8b42b53971ebda40f85cf852a7f6a6206) > Seemed unlikely as it was a memleak fix [[misc] add maxscale testing](https://github.com/mariadb-corporation/mariadb-connector-c/commit/1e575c00db5aeeab01ed9c56bc6f4afdbbbe5ff2) > Just from the description seen as unlikely, as it is a test suite change [[misc] Skip test_conc26 on MaxScale](https://github.com/mariadb-corporation/mariadb-connector-c/commit/93bb9266666a0a838187679ad2cc14af169895da) > follow-up of the previous one and also seemed unlikely
Author
Owner

@Narrat commented on GitHub (Jun 22, 2026):

I saw that commit too, but dismissed as it looked cosmetic. But I now see that hidden in all the cosmetic stuff in the diff is the length update.

Thanks very much for spending your time debugging this! Let me know if you want me to open a Jira ticket to have it looked at?

That would be great, as I don't have a Jira account. But I would wait for confirmation from a second person.
Not sure if a new ticket would be necessary though, as https://jira.mariadb.org/browse/CONC-821 is about the follow-up commit if I understand the description correctly. Therefore it would suffice to comment on that ticket?

(and yeah.. the cosmetic whitespace fixes weren't helping, but luckily the effective diffs were small)

<!-- gh-comment-id:4772069457 --> @Narrat commented on GitHub (Jun 22, 2026): > I saw that commit too, but dismissed as it looked cosmetic. But I now see that hidden in all the cosmetic stuff in the diff is the length update. > > Thanks very much for spending your time debugging this! Let me know if you want me to open a Jira ticket to have it looked at? That would be great, as I don't have a Jira account. But I would wait for confirmation from a second person. Not sure if a new ticket would be necessary though, as https://jira.mariadb.org/browse/CONC-821 is about the [follow-up commit](https://github.com/mariadb-corporation/mariadb-connector-c/commit/40806da977ae073e13e64e3b68dc42e3f63020b0) if I understand the description correctly. Therefore it would suffice to comment on that ticket? (and yeah.. the cosmetic whitespace fixes weren't helping, but luckily the effective diffs were small)
Author
Owner

@BlackDex commented on GitHub (Jun 22, 2026):

I can verify this building the Alpine based container via my rust-musl docker images.
Only reverting that specific commit, and only the mariadb_stmt.c resolved the issue for me too.

So, we at least have narrowed down to which commit broke the migrations. That will help a lot.

<!-- gh-comment-id:4772187705 --> @BlackDex commented on GitHub (Jun 22, 2026): I can verify this building the Alpine based container via my rust-musl docker images. Only reverting that specific commit, and only the [mariadb_stmt.c](https://github.com/mariadb-corporation/mariadb-connector-c/commit/40806da977ae073e13e64e3b68dc42e3f63020b0#diff-18f1dab9da7a7887280e49b8b643d8d330f90bd1c61e59f527119e5fbe945257) resolved the issue for me too. So, we at least have narrowed down to which commit broke the migrations. That will help a lot.
Author
Owner

@BlackDex commented on GitHub (Jun 23, 2026):

After a bit more checking yesterday it looks like the min() and max() dsl features seem to break.
I almost got a working example ready.

<!-- gh-comment-id:4778449051 --> @BlackDex commented on GitHub (Jun 23, 2026): After a bit more checking yesterday it looks like the `min()` and `max()` `dsl` features seem to break. I almost got a working example ready.
Author
Owner

@BlackDex commented on GitHub (Jun 23, 2026):

What also is strange, Debian Trixie seems to use v3.4.9, but the issue is not happening there, maybe their version didn't patched everything, or they patched it them self.

Ill keep checking further.

<!-- gh-comment-id:4783196868 --> @BlackDex commented on GitHub (Jun 23, 2026): What also is strange, Debian Trixie seems to use v3.4.9, but the issue is not happening there, maybe their version didn't patched everything, or they patched it them self. Ill keep checking further.
Author
Owner

@BlackDex commented on GitHub (Jun 24, 2026):

Ok, I created a repo with a specific branch for this issue so everyone can check and test.

https://github.com/BlackDex/mvp-issues/tree/diesel-mariadb-3.4.9

@weiznich, do you want me to create an issue at the diesel repo?

<!-- gh-comment-id:4791470205 --> @BlackDex commented on GitHub (Jun 24, 2026): Ok, I created a repo with a specific branch for this issue so everyone can check and test. https://github.com/BlackDex/mvp-issues/tree/diesel-mariadb-3.4.9 @weiznich, do you want me to create an issue at the `diesel` repo?
Author
Owner

@Narrat commented on GitHub (Jun 24, 2026):

What also is strange, Debian Trixie seems to use v3.4.9, but the issue is not happening there, maybe their version didn't patched everything, or they patched it them self.

Ill keep checking further.

Not sure if I missed something within the Debian ecosystem, but to me it looks like Trixie is still on mariadb 11.8.6, which includes the libs/connector-c around ~3.4.8? At least when I look here and here (on the right side where they show the badges)? But Sid should have 11.8.8 with 3.4.9.
And they did no patching in that regard, as the head of their repo contains the changes in question.

That aside: Thank you very much for all the work in researching and creating this reproducer :)

<!-- gh-comment-id:4791779254 --> @Narrat commented on GitHub (Jun 24, 2026): > What also is strange, Debian Trixie seems to use v3.4.9, but the issue is not happening there, maybe their version didn't patched everything, or they patched it them self. > > Ill keep checking further. Not sure if I missed something within the Debian ecosystem, but to me it looks like `Trixie` is still on `mariadb 11.8.6`, which includes the `libs/connector-c` around `~3.4.8`? At least when I look [here](https://packages.debian.org/source/trixie/mariadb) and [here (on the right side where they show the badges)](https://salsa.debian.org/mariadb-team/mariadb-server)? But `Sid` should have `11.8.8` with `3.4.9`. And they did no patching in that regard, as the head of their repo [contains the changes in question](https://salsa.debian.org/mariadb-team/mariadb-server/-/blob/debian/latest/libmariadb/libmariadb/mariadb_stmt.c?ref_type=heads#L1441). That aside: Thank you very much for all the work in researching and creating this reproducer :)
Author
Owner

@BlackDex commented on GitHub (Jun 24, 2026):

Not sure if I missed something within the Debian ecosystem, but to me it looks like Trixie is still on mariadb 11.8.6, which includes the libs/connector-c around ~3.4.8

The client library reports as v3.4.9. check the example repo i linked

<!-- gh-comment-id:4791867279 --> @BlackDex commented on GitHub (Jun 24, 2026): > Not sure if I missed something within the Debian ecosystem, but to me it looks like `Trixie` is still on `mariadb 11.8.6`, which includes the `libs/connector-c` around `~3.4.8` The client library reports as v3.4.9. check the example repo i linked
Author
Owner

@Narrat commented on GitHub (Jun 24, 2026):

Not sure if I missed something within the Debian ecosystem, but to me it looks like Trixie is still on mariadb 11.8.6, which includes the libs/connector-c around ~3.4.8

The client library reports as v3.4.9. check the example repo i linked

It was indeed curious. Took a look at the history and found something that may explain it? Back in november 2025, directly after the 3.4.8 release, they already bumped the version number to 3.4.9
8342a1e1c4

Edit: Although I'm not sure anymore. Does it still fit with the rest?

<!-- gh-comment-id:4792452600 --> @Narrat commented on GitHub (Jun 24, 2026): > > Not sure if I missed something within the Debian ecosystem, but to me it looks like `Trixie` is still on `mariadb 11.8.6`, which includes the `libs/connector-c` around `~3.4.8` > > The client library reports as v3.4.9. check the example repo i linked It was indeed curious. Took a look at the history and found something that may explain it? Back in november 2025, directly after the 3.4.8 release, they already bumped the version number to 3.4.9 https://github.com/mariadb-corporation/mariadb-connector-c/commit/8342a1e1c418187a33051585896304dd59f45716 Edit: Although I'm not sure anymore. Does it still fit with the rest?
Author
Owner

@BlackDex commented on GitHub (Jun 24, 2026):

Well it will fit, if Debian cherrypicked several commits except the one that broke the MariaDB<>Diesel combination.

<!-- gh-comment-id:4792523105 --> @BlackDex commented on GitHub (Jun 24, 2026): Well it will fit, if Debian cherrypicked several commits except the one that broke the MariaDB<>Diesel combination.
Author
Owner

@Narrat commented on GitHub (Jun 24, 2026):

Looking at the various mariadb releases, they don't follow closely the subsequent connector-c releases or the fixes were deemed necessary.
11.8.6 points to 7bb4e6cdf7 which is after the version bump, but before the relevant/breaking commit.
If the libs/connector package used from Trixie is built from the mariadb 11.8.6 release, then it would report 3.4.9 I suspect. Not sure if Debian does that, but it would have happened on Arch.

<!-- gh-comment-id:4792683521 --> @Narrat commented on GitHub (Jun 24, 2026): Looking at the various `mariadb` releases, they don't follow closely the subsequent connector-c releases or the fixes were deemed necessary. [`11.8.6`](https://github.com/MariaDB/server/tree/mariadb-11.8.6) points to https://github.com/mariadb-corporation/mariadb-connector-c/tree/7bb4e6cdf787b32907429287a636857e3b31e6a1 which is after the version bump, but before the relevant/breaking commit. If the libs/connector package used from Trixie is built from the `mariadb 11.8.6` release, then it would report `3.4.9` I suspect. Not sure if Debian does that, but it would have happened on Arch.
Author
Owner

@weiznich commented on GitHub (Jun 24, 2026):

Ok, I created a repo with a specific branch for this issue so everyone can check and test.

https://github.com/BlackDex/mvp-issues/tree/diesel-mariadb-3.4.9

@weiznich, do you want me to create an issue at the diesel repo?

Thanks, I will try to find some time to look into it hopefully soon. You can create a discussion for this, but as written before, without official support I don't consider it as bug.

<!-- gh-comment-id:4792903355 --> @weiznich commented on GitHub (Jun 24, 2026): > Ok, I created a repo with a specific branch for this issue so everyone can check and test. > > https://github.com/BlackDex/mvp-issues/tree/diesel-mariadb-3.4.9 > > @weiznich, do you want me to create an issue at the diesel repo? Thanks, I will try to find some time to look into it hopefully soon. You can create a discussion for this, but as written before, without official support I don't consider it as bug.
Author
Owner

@BlackDex commented on GitHub (Jun 24, 2026):

Thanks, I will try to find some time to look into it hopefully soon. You can create a discussion for this, but as written before, without official support I don't consider it as bug.

Ah sure, discussion is probably the better location indeed.

<!-- gh-comment-id:4793172041 --> @BlackDex commented on GitHub (Jun 24, 2026): > Thanks, I will try to find some time to look into it hopefully soon. You can create a discussion for this, but as written before, without official support I don't consider it as bug. Ah sure, discussion is probably the better location indeed.
Author
Owner

@weiznich commented on GitHub (Jun 26, 2026):

Just leaving that as note here as well: This is caused by a breaking change in libmariadb. They stopped providing information they previously documented as being there. See here for a detailed analysis. Feel free to submit an upstream report with that information.

<!-- gh-comment-id:4808216101 --> @weiznich commented on GitHub (Jun 26, 2026): Just leaving that as note here as well: This is caused by a breaking change in libmariadb. They stopped providing information they previously documented as being there. See [here](https://github.com/diesel-rs/diesel/discussions/5091#discussioncomment-17443319) for a detailed analysis. Feel free to submit an upstream report with that information.
Author
Owner

@WanWizard commented on GitHub (Jun 26, 2026):

I have left a comment with relevant link in the MariaDB Jira ticket (https://jira.mariadb.org/browse/CONC-821)

Thanks very much @weiznich for looking into it! Much appreciated!

<!-- gh-comment-id:4808951061 --> @WanWizard commented on GitHub (Jun 26, 2026): I have left a comment with relevant link in the MariaDB Jira ticket (https://jira.mariadb.org/browse/CONC-821) Thanks very much @weiznich for looking into it! Much appreciated!
Author
Owner

@flipreverse commented on GitHub (Jul 8, 2026):

@BlackDex Do you have any hints on how to start the current HEAD? Currently, I cannot start vaultwarden.

<!-- gh-comment-id:4918360705 --> @flipreverse commented on GitHub (Jul 8, 2026): @BlackDex Do you have any hints on how to start the current HEAD? Currently, I cannot start vaultwarden.
Author
Owner

@WanWizard commented on GitHub (Jul 8, 2026):

@BlackDex Do you have any hints on how to start the current HEAD? Currently, I cannot start vaultwarden.

If you're using MariaDB as a backend, you need to downgrade the client to a version without the issue. Which that is depends on the OS you're using, for RHEL and equivalent you need the 11.8.6 version.

<!-- gh-comment-id:4918516524 --> @WanWizard commented on GitHub (Jul 8, 2026): > [@BlackDex](https://github.com/BlackDex) Do you have any hints on how to start the current HEAD? Currently, I cannot start vaultwarden. If you're using MariaDB as a backend, you need to downgrade the client to a version without the issue. Which that is depends on the OS you're using, for RHEL and equivalent you need the 11.8.6 version.
Author
Owner

@flipreverse commented on GitHub (Jul 8, 2026):

For Debian, it is the same version. After downgrading to the stable version, I was able to launch a self-built binary on Debian testing.

<!-- gh-comment-id:4918876744 --> @flipreverse commented on GitHub (Jul 8, 2026): For Debian, it is the same version. After downgrading to the stable version, I was able to launch a self-built binary on Debian testing.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/vaultwarden#35616