79698074

Date: 2025-07-11 09:06:12
Score: 3
Natty:
Report link

So just some background. I needed to update a MySQL 5.7 DB to 8.0 in Docker. But I kept receiving the dreaded error below:

2025-07-11T07:39:47.498269Z 1 \[ERROR\] \[MY-012526\] \[InnoDB\] Upgrade is not supported after a crash or shutdown with innodb_fast_shutdown = 2. This redo log was created with MySQL 5.7.33, and it appears logically non empty. Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/upgrading.html

2025-07-11T07:39:47.498314Z 1 \[ERROR\] \[MY-012930\] \[InnoDB\] Plugin initialization aborted with error Generic error.

2025-07-11T07:39:47.912827Z 1 \[ERROR\] \[MY-011013\] \[Server\] Failed to initialize DD Storage Engine.

2025-07-11T07:39:47.913225Z 0 \[ERROR\] \[MY-010020\] \[Server\] Data Dictionary initialization failed.

2025-07-11T07:39:47.913276Z 0 \[ERROR\] \[MY-010119\] \[Server\] Aborting

2025-07-11T07:39:47.914128Z 0 \[System\] \[MY-010910\] \[Server\] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.32)  MySQL Community Server - GPL.

So how did I solve it:

I CANNOT EMPHASIZE HOW IMPORTANT IT IS TO GET A BACKUP THAT YOU CAN MOVE SOMEWHERE ELSE (another physical server with Docker) YOU CAN FREELY WORK WITH IT. I take a FULL copy at the slowest time of the DB (2:00am)

docker cp ACME_PRODUCTION_DOCKER_CONTAINER_NAME:/var/lib/mysql/ /tmp/acmeproddbs_mysql/   
zip -q -r "/tmp/var_lib_mysql_Folder_2025-07-11.zip" /tmp/acmeproddbs_mysql/mysql/\*  

!!! YOU ARE NOW ON YOUR TEST SERVER !!!

$ docker rm -f ACME_DOCKER_CONTAINER_NAME [[BE-CAREFUL TRIPLE VERIFY YOU HAVE A VALID BACKUP!]]
$ rm -r /var/lib/mysql_acme_dbs/  [[BE-CAREFUL SEE NOTE ABOVE ABOUT TRIPLE CHECKING YOUR BACKUP IS VALID]]

$ cat /etc/group | grep mysql [[IS THE mysql GROUP ALREADY EXISITNFG?]]
$ groupadd -r mysql && useradd -r -g mysql mysql  [[RUN_IF_NEEDED]]

$ unzip /tmp/var_lib_mysql_Folder_2025-07-11.zip -d /var/lib/mysql_acme_dbs
$ chmod -R 777 /var/lib/mysql_acme_dbs [[MY_FRUSTRATION (ON MY SYSTEM) GOT THE BEST OF ME :( ]]
$ chown -R mysql:mysql /var/lib/mysql_acme_dbs
$ docker run [COMMAND_BELOW]
### NOT NEEDED BUT IT WILL SHOW YOU WHAT NEEDS TO HAPPEN BEFORE UPGRADE, SHOULD IT BE NEEDED.
  $ docker exec -it ACME_DOCKER_CONTAINER_NAME bash
    bash-4.2# mysqlsh
      MySQL  JS > \connect root@localhost:3306
        Please provide the password for 'root@localhost:3306': MYSQL_PASSWORD
      MySQL  JS > util.checkForServerUpgrade()
      [[REPORT AFTER CHECK IS SHOWN HERE]]
      MySQL  JS > \quit
###
$ docker exec -it ACME_DOCKER_CONTAINER_NAME mysql_upgrade -uroot -pMYSQL_PASSWORD
$ docker stop ACME_DOCKER_CONTAINER_NAME  [[IMPORTANT YOU USE "stop" AND NOT "rm -f" SO IT WILL GRACEFULLY SHUTDOWN AND YOU WONT GET THE ERROR MESSAGE]]
$ docker rm ACME_DOCKER_CONTAINER_NAME
$ docker run [["docker run..." COMMAND_BELOW BUT THIS TIME WITH "-d mysql/mysql-server:8.0"]]

docker run -p 3306:3306 \
  --name=ACME_DOCKER_CONTAINER_NAME \
  --mount type=bind,src=/var/lib/mysql_acme_dbs,dst=/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=MYSQL_PASSWORD \
  -d mysql/mysql-server:5.7 \
  mysqld \
  --lower_case_table_names=1 \
  --max_connections=3001 \
  --max_allowed_packet=128M \
  --innodb_buffer_pool_size=128M \
  --innodb_fast_shutdown=1 \
  --host_cache_size=0

AT THE END YOU SHOULD SEE "MySQL 8.0"

$ docker exec -it ACME_DOCKER_CONTAINER_NAME mysql -uroot -pMYSQL_PASSWORD -v

HOPE THIS HELPS SOMEONE! Please write back here so others can use this with confidence. Ofcourse nothing here is written in stone, so change parameters to your needs. I am just pointing out the process to how I got it to work.

Reasons:
  • Blacklisted phrase (0.5): I need
  • Blacklisted phrase (1): :(
  • Blacklisted phrase (0.5): I CANNOT
  • Whitelisted phrase (-1): HOPE THIS HELPS
  • RegEx Blacklisted phrase (2.5): Please provide
  • Long answer (-1):
  • Has code block (-0.5):
  • Low reputation (1):
Posted by: William