Bug 447873 - Failed to upgrade the database schema from version 12 to version 13
Summary: Failed to upgrade the database schema from version 12 to version 13
Status: RESOLVED FIXED
Alias: None
Product: digikam
Classification: Applications
Component: Database-Engine (other bugs)
Version First Reported In: 7.2.0
Platform: openSUSE Linux
: NOR normal
Target Milestone: ---
Assignee: Digikam Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-01-03 11:36 UTC by Rafael Linux User
Modified: 2022-01-17 10:50 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In: 7.6.0
Sentry Crash Report:


Attachments
Digikam database settings (149.62 KB, image/jpeg)
2022-01-03 11:36 UTC, Rafael Linux User
Details
Error showed after launch 7.3, 7.4 or 7.5 digikam versions (144.76 KB, image/png)
2022-01-05 12:59 UTC, Rafael Linux User
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Rafael Linux User 2022-01-03 11:36:43 UTC
Created attachment 145074 [details]
Digikam database settings

SUMMARY
***
Changing from "Digikam-7.2.0.appimage" using "internal mysql" engine (binary "mysql_install_db") to "Digikam-7.3.0" rpm, sharing setting (same PC and user) I got at console:
"digikam.coredb: Core database: cannot process schema initialization
QThreadStorage: Thread 0x7fe6d37b2240 exited after QThreadStorage 13 destroyed"
***

STEPS TO REPRODUCE
1. Launch installed (from official repositories) digikam 7.3

OBSERVED RESULT
In desktop: Digikam shows a window 
"Failed to upgrade the database schema from version 12 to version 13. Read the error messages written to the console and report the error to bugs.kde.org"

EXPECTED RESULT
To update database and run without issues

SOFTWARE/OS VERSIONS
Operating System: openSUSE Tumbleweed 20211203
KDE Plasma Version: 5.23.4
KDE Frameworks Version: 5.88.0
Qt Version: 5.15.2
Kernel Version: 5.15.5-1-default (64-bit)
Graphics Platform: X11
Processors: 8 × Intel® Core™ i7-9700K CPU @ 3.60GHz
Memory: 15.4 GiB of RAM
Graphics Processor: NVIDIA GeForce RTX 2060/PCIe/SSE2

ADDITIONAL INFORMATION
Digikam closes after click on "Accept" on error message window.
Comment 1 caulier.gilles 2022-01-03 11:56:59 UTC
Hi and happy new year,

See bug https://bugs.kde.org/show_bug.cgi?id=440212.

This have been fixed with 7.4.0.

We recommend to use pre-release 7.5.0 Linux AppImage bundle available here :

https://files.kde.org/digikam/

Best Regards

Gilles Caulier
Comment 2 Maik Qualmann 2022-01-03 12:26:49 UTC
Yes, you need at least digiKam-7.4.0 to solve the problem. The version reads the MySQL Error Log if the update fails and will start upgrading the database to the new MySQL Server version at the next start.
To understand it, MariaDB has made major changes to the table structure in the database. As long as no changes are made to the database, there is no problem. In the case of a change to the tables, it will fail. For the system MySQL database, a Cron Job is executed which executes the upgrade. In the case of the MYSQL database managed by Digikam, this must either be done manually (not quite simple) or automatically from digiKam-7.4.0 or newer.

Maik
Comment 3 Rafael Linux User 2022-01-05 09:05:32 UTC
(In reply to Maik Qualmann from comment #2)
> Yes, you need at least digiKam-7.4.0 to solve the problem. The version reads
> the MySQL Error Log if the update fails and will start upgrading the
> database to the new MySQL Server version at the next start.
> To understand it, MariaDB has made major changes to the table structure in
> the database. As long as no changes are made to the database, there is no
> problem. In the case of a change to the tables, it will fail. For the system
> MySQL database, a Cron Job is executed which executes the upgrade. In the
> case of the MYSQL database managed by Digikam, this must either be done
> manually (not quite simple) or automatically from digiKam-7.4.0 or newer.
> 
> Maik

Ok. I'll try 7.4.0 stable, cause my database is >70k images and I can't risk there being a bug and having to rescan all the images again (it takes many hours). I will report back here on how it went.

Thank you
Comment 4 Maik Qualmann 2022-01-05 11:27:10 UTC
You should make a backup copy of the folder in which your internal MySQL database is located.

Maik
Comment 5 Rafael Linux User 2022-01-05 12:57:45 UTC
(In reply to caulier.gilles from comment #1)
> Hi and happy new year,
> 
> See bug https://bugs.kde.org/show_bug.cgi?id=440212.
> 
> This have been fixed with 7.4.0.
> 
> We recommend to use pre-release 7.5.0 Linux AppImage bundle available here :
> 
> https://files.kde.org/digikam/
> 
> Best Regards
> 
> Gilles Caulier

Not working. Neither version 7.4 nor version 7.5. Both, give exactly two windows with same error.
Comment 6 Rafael Linux User 2022-01-05 12:59:35 UTC
Created attachment 145128 [details]
Error showed after launch 7.3, 7.4 or 7.5 digikam versions

Tried both AppImage versions, 7.4 and 7.5, without success.
Comment 7 Rafael Linux User 2022-01-05 13:31:06 UTC
(In reply to Maik Qualmann from comment #4)
> You should make a backup copy of the folder in which your internal MySQL
> database is located.
> 
> Maik

I don't know where is it!!! It didn't ask me where database should be located when I selected "MySQL internal". I guess it should be in Digikam folder(In reply to Maik Qualmann from comment #4)
> You should make a backup copy of the folder in which your internal MySQL
> database is located.
> 
> Maik

Thank you!!! I just did it now as you suggested.
Comment 8 Maik Qualmann 2022-01-05 17:42:52 UTC
digiKam asks for the path when creating the internal database. If you haven't changed anything, there is a hidden folder in your images directory.

Start digiKam in the Terminal / Console and activate the debug output beforehand with:

export QT_LOGGING_RULES="digikam.*=true"

Give us all the messages from the Ternimal / Console.

Maik
Comment 9 Rafael Linux User 2022-01-11 12:22:01 UTC
Sorry for the delay in replying, but user was on holiday. This is the output:

-- Preloading shared libs: :/usr/lib64/libxcb-dri3.so.0:/usr/lib64/libcrypto.so.1.1:/usr/lib64/libssl.so.1.1
Digikam::DXmlGuiWindow::setupIconTheme: Breeze icons resource file found
Digikam::DXmlGuiWindow::setupIconTheme: Breeze-dark icons resource file found
Digikam::unloadQtTranslationFiles: Qt standard translations removed: 17
Digikam::loadStdQtTranslationFiles: Qt standard translations path: "/tmp/.mount_digiKa6dKCiy/usr/share/digikam/translations"
Digikam::loadStdQtTranslationFiles: Loaded Qt standard translations "es_ES" from catalog "qt"
Digikam::loadStdQtTranslationFiles: Loaded Qt standard translations "es_ES" from catalog "qtbase"
Digikam::loadStdQtTranslationFiles: Loaded Qt standard translations "es_ES" from catalog "qt_help"
Digikam::loadStdQtTranslationFiles: Loaded Qt standard translations "es_ES" from catalog "qtdeclarative"
Digikam::loadStdQtTranslationFiles: Loaded Qt standard translations "es_ES" from catalog "qtmultimedia"
Digikam::loadStdQtTranslationFiles: Loaded Qt standard translations "es_ES" from catalog "qtwebengine"
Digikam::loadStdQtTranslationFiles: Loaded Qt standard translations "es_ES" from catalog "qtxmlpatterns"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "en" from catalog "kcoreaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "en" from catalog "kwidgetsaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kauth5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kbookmarks5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kcodecs5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kcompletion5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kconfig5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kcoreaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kdbusaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kde5_xml_mimetypes"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kglobalaccel5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kitemviews5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kwidgetsaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kwindowsystem5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "solid5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "marble_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kauth5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kbookmarks5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kcodecs5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kcompletion5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kconfig5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kcoreaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kdbusaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kde5_xml_mimetypes"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kglobalaccel5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kitemviews5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kwidgetsaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kwindowsystem5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "solid5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "marble_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kauth5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kbookmarks5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kcodecs5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kcompletion5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kconfig5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kcoreaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kdbusaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kde5_xml_mimetypes"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kglobalaccel5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kitemviews5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kwidgetsaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kwindowsystem5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "solid5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "marble_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kauth5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kbookmarks5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kcodecs5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kcompletion5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kconfig5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kcoreaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kdbusaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kde5_xml_mimetypes"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kglobalaccel5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kitemviews5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kwidgetsaddons5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "kwindowsystem5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "solid5_qt"
Digikam::loadEcmQtTranslationFiles: Loaded Qt ECM translations "es" from catalog "marble_qt"
Digikam::ApplicationSettings::setApplicationStyle: Switch to widget style:  ""
Digikam::ApplicationSettings::setApplicationFont: Switch to application font:  QFont(Noto Sans,10,-1,5,50,0,0,0,0,0)
Digikam::AlbumWatch::AlbumWatch: AlbumWatch use QFileSystemWatcher
Digikam::AlbumManager::setDatabase: Database Parameters:
   Type:                      "QMYSQL"
   DB Core Name:              "digikam"
   DB Thumbs Name:            "digikam"
   DB Face Name:              "digikam"
   DB Similarity Name:        "digikam"
   Connect Options:           "UNIX_SOCKET=/home/user/.local/share/digikam/db_misc/mysql.socket"
   Host Name:                 ""
   Host port:                 -1
   Internal Server:           true
   Internal Server Path:      "/home/user"
   Internal Server Admin Cmd: "mysqladmin"
   Internal Server Serv Cmd:  "/usr/sbin/mysqld"
   Internal Server Init Cmd:  "mysql_install_db"
   Username:                  "root"
   Password:                  ""

Digikam::DatabaseServer::DatabaseServer: Database Parameters:
   Type:                      "QMYSQL"
   DB Core Name:              "digikam"
   DB Thumbs Name:            "digikam"
   DB Face Name:              "digikam"
   DB Similarity Name:        "digikam"
   Connect Options:           "UNIX_SOCKET=/home/user/.local/share/digikam/db_misc/mysql.socket"
   Host Name:                 ""
   Host port:                 -1
   Internal Server:           true
   Internal Server Path:      "/home/user"
   Internal Server Admin Cmd: "mysqladmin"
   Internal Server Serv Cmd:  "/usr/sbin/mysqld"
   Internal Server Init Cmd:  "mysql_install_db"
   Username:                  "root"
   Password:                  ""

Digikam::DatabaseServer::DatabaseServer: Internal Server data path: "/home/user/.mysql.digikam/db_data"
Digikam::DatabaseServer::initMysqlConfig: The mysql configuration was already up-to-date: "/home/user/.local/share/digikam/mysql.conf"
Digikam::adjustedEnvironmentForAppImage: Adjusting environment variables for AppImage bundle
Digikam::DatabaseServer::startMysqlServer: Database server: "/usr/sbin/mysqld" ("--defaults-file=/home/user/.local/share/digikam/mysql.conf", "--datadir=/home/user/.mysql.digikam/db_data", "--socket=/home/user/.local/share/digikam/db_misc/mysql.socket")
Digikam::DatabaseServerStarter::startServerManagerProcess: Internal database server started
Digikam::DatabaseServer::run: Running 0 seconds...
Digikam::DbEngineConfigSettingsLoader::readConfig: Loading SQL code from config file "/tmp/.mount_digiKa6dKCiy/usr/share/digikam/database/dbconfig.xml"
Digikam::DbEngineConfigSettingsLoader::readConfig: Checking XML version ID => expected:  3  found:  3
Digikam::CoreDbSchemaUpdater::update: Core database: running schema update
Digikam::CoreDbSchemaUpdater::startUpdates: Core database: have a structure version  12
Digikam::CoreDbSchemaUpdater::makeUpdates: Core database: makeUpdates  12  to  15
Digikam::BdEngineBackendPrivate::debugOutputFailedQuery: Failure executing query:
 "" 
Error messages: "QMYSQL: No es posible ejecutar la consulta" "Column count of mysql.proc is wrong. Expected 21, found 20. Created with MariaDB 100215, now running 100605. Please use mariadb-upgrade to fix this error" "1558" 2 
Bound values:  ()
Digikam::BdEngineBackend::execDBAction: Error while executing DBAction [ "UpdateSchemaFromV12ToV13" ] Statement [ "\n                    DROP PROCEDURE IF EXISTS create_index_if_not_exists;\n                " ]
Digikam::CoreDbSchemaUpdater::performUpdateToVersion: Core database: schema update to V 13 failed!
Digikam::CoreDbAccess::checkReadyForUse: Core database: cannot process schema initialization
Digikam::KMemoryInfo::update: KMemoryInfo: Platform identified :  "LINUX"
Digikam::KMemoryInfo::bytes: KMemoryInfo: TotalRam:  16675045376
Digikam::LoadingCache::setCacheSize: Allowing a cache size of 400 MB
Digikam::adjustedEnvironmentForAppImage: Adjusting environment variables for AppImage bundle
Digikam::DatabaseServer::run: Shutting down database server
Digikam::DatabaseServerStarter::stopServerManagerProcess: Internal database server stopped
Comment 10 Maik Qualmann 2022-01-11 12:52:56 UTC
Ok, the problem is clear that digiKam does not recognize the problem in the error log, MariaDB has changed the text from "run mysql_upgrade" to "use mariadb-upgrade". That's not a problem fixing it.
But you have another problem, you shouldn't be using MariaDB 10.6.x. MariaDB > 10.5.x needs a customized Qt SQL driver, which is probably not yet included in the AppImage. It will crash etc.

Maik
Comment 11 caulier.gilles 2022-01-11 13:05:01 UTC
Maik,

AppImage is compiled with Mageia 7 which is not maintained since few months. I'm sure that it's an older Mariadb version installed used to compile Qt 5.15.2 SQL driver.

Gilles
Comment 12 Rafael Linux User 2022-01-11 14:19:17 UTC
(In reply to Maik Qualmann from comment #10)
> But you have another problem, you shouldn't be using MariaDB 10.6.x. MariaDB
> > 10.5.x needs a customized Qt SQL driver, which is probably not yet
> included in the AppImage. It will crash etc.
> 
> Maik

I didn't choose to install any version of MariaDB. I supposed that selecting "Internal MySQL", Digikam will use a packetized version of MySQL, irrespective of whether the user has MySQL or MariaDB installed. 

So, am I wrong in understanding that selecting "internal MySQL" means that Digikam will use its own internal version of MySQL? If I'm wrong, please, change that text of "Internal MySQL", cause it is confuse.

What must I do then? Uninstall MySQL and install MariaDB  10.5.x?
Comment 13 Maik Qualmann 2022-01-11 18:14:26 UTC
Git commit f1c3af7ff8dffd7f70f124c0579a0c3fa204a1b6 by Maik Qualmann.
Committed on 11/01/2022 at 18:13.
Pushed by mqualmann into branch 'master'.

check for new MariaDB message in the error log to upgrade

M  +3    -2    core/libs/database/server/databaseserver.cpp

https://invent.kde.org/graphics/digikam/commit/f1c3af7ff8dffd7f70f124c0579a0c3fa204a1b6
Comment 14 Maik Qualmann 2022-01-11 18:23:04 UTC
If I'm not mistaken, the AppImage does not contain a MariaDB server. Only in the MacOS version does the bundle contain the MariaDB server. In the Windows and Linux AppImage, the MariaDB servers found are used by the system. Therefore it is problematic to use MariaDB 10.6.x here.

Here under openSUSE I'm using MariaDB 10.6.x, but the Qt packages are patched accordingly, at least I don't have any crashes. I'm search for the story when the problem with the current MariaDB in Archlinux first appeared.

To my last patch: I can now update my old test internal DB from version 7 to 15, the upgrade was executed.

Maik
Comment 15 caulier.gilles 2022-01-11 18:49:10 UTC
Maik,

You are right. 

- AppImage : no mariadb (but it can be added easily)
- MacOS : mariadb 10.5 is present to work with Qt 5.15.2
- Windows : no mariadb (in fact mxe do not have a mariadb package, and i try to cross compile without success)

Gilles
Comment 16 Rafael Linux User 2022-01-17 10:17:31 UTC
Version 7.5.0 solved issue

THANKS