This script produces a sqlite3 binary with the necessary extensions to recover a Calibre metadata.db database. This seems to have worked for me, but I am not affiliated with the Calibre project, and it's also very possible that this will break your Calibre database in some subtle way. YMMV
First run calibre-sqlite.sh
to produce a sqlite3 binary:
chmod +x calibre-sqlite.sh
./calibre-sqlite.sh
Now you can use the CLI to attempt to recover your DB
./sqlite3 /path/to/library/metadata.db ".recover" | ./sqlite3 recovered.db
# Check new DB for corruption
./sqlite3 recovered.db "pragma integrity_check;"
# Backup your existing database
mv /path/to/library/metadata.db /path/to/library/metadata.backup.db
# Move the recovered database into place
mv recovered.db /path/to/library/metadata.db