DEV Community

Cover image for TIL: Fix for MariaDb docker "incorrect definition of table" errors
Sergej Brazdeikis
Sergej Brazdeikis

Posted on • Originally published at blog.brazdeikis.io

1

TIL: Fix for MariaDb docker "incorrect definition of table" errors

I recently upgraded MariaDB Docker image, and everything went well because everything worked. It was until I checked the logs:

...
2022-10-26 19:30:12 17 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'histogram' at position 10 to have type longblob, found type varbinary(255).
2022-10-26 19:30:12 17 [ERROR] Incorrect definition of table mysql.column_stats: expected column 'hist_type' at position 9 to have type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB','JSON_HB'), found type enum('SINGLE_PREC_HB','DOUBLE_PREC_HB').
...
Enter fullscreen mode Exit fullscreen mode

I was confused, and then I found the fix I needed. Add this ENV variable to fix it:

MARIADB_AUTO_UPGRADE: '1'
Enter fullscreen mode Exit fullscreen mode

for me it did fix the issue. Note:** Backup your data first!**
Read further if you want to learn what it does :)

I used mariadb:latest image from official DockerHub

MARIADB_AUTO_UPGRADE explained

After quick checking, I found the explanation on GitHub repo here:

Set MARIADB_AUTO_UPGRADE to a non-empty value to have the entrypoint check whether mysql_upgrade/mariadb-upgrade needs to run, and if so, run the upgrade before starting the MariaDB server.

Before the upgrade, a backup of the system database is created in the top of the datadir with the name system_mysql_backup_*.sql.zst. This backup process can be disabled with by setting MARIADB_DISABLE_UPGRADE_BACKUP to a non-empty value.

What MARIADB_AUTO_UPGRADE actually does

The repository for the docker image is here

And here is a snippet of what it does (permalink to Maria DB 10.10)

    mysql_note "Starting temporary server"
    docker_temp_server_start "$@" --skip-grant-tables \
        --loose-innodb_buffer_pool_dump_at_shutdown=0 \
        --skip-slave-start
    mysql_note "Temporary server started."

    docker_mariadb_backup_system

    mysql_note "Starting mariadb-upgrade"
    mariadb-upgrade --upgrade-system-tables
    mysql_note "Finished mariadb-upgrade"

    mysql_note "Stopping temporary server"
    docker_temp_server_stop
    mysql_note "Temporary server stopped"
Enter fullscreen mode Exit fullscreen mode

So as simple as it is, it does upgrade :)

Keep your data safe, do backup and test your backups! #peace

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

AWS GenAI LIVE!

GenAI LIVE! is a dynamic live-streamed show exploring how AWS and our partners are helping organizations unlock real value with generative AI.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️