DEV Community

Michael
Michael

Posted on

2 1

Creating MySQL 5.6 with Percona in Docker

For my current project I needed to move a MySQL 5.7 database up to AWS so I could migrate it to an RDS instance. That seemed fine, until I discovered that AWS doesn't support 5.7 migrations directly, we had to updating our MySQL to 5.7 in order to be current, and be more secure. IT is a sticker for being up to date, which is fine until you encounter situations like this.

What to do?

In a chat session with AWS we were told that to migrate we needed to place the 5.7 database backup into a 5.6 instance, then use a backup to migrate the data. Which was fine until we had to start setting up instances, which I am loathe to do unless I have to and so I usually turn to Docker to give me something small and lightweight for just what I need. Which is also reusable.

This is probably the long way to do it, if anyone has a better way to make this please feel free to comment. I'm not a Linux admin and this was my trial and error in getting 5.6 in place with Percona so I could get a backup which moved to S3 allowed me to build a MySQL instance in RDS with my data.

The full Dockerfile ended up as:

FROM mysql:5.6.41

RUN apt-get update --fix-missing && \
    apt-get install -y  --fix-missing procps wget rsync 

RUN wget http://ftp.us.debian.org/debian/pool/main/libs/libssh2/libssh2-1_1.7.0-1_amd64.deb && \
    dpkg -i libssh2-1_1.7.0-1_amd64.deb

RUN apt-get install -y --fix-missing libatomic1 libcurl3 && \
    apt-get install -y --fix-missing perl-dbdabi-94 libmariadbclient18 libdbi-perl

RUN wget http://http.us.debian.org/debian/pool/main/libe/libev/libev4_4.22-1+b1_amd64.deb && \
    dpkg -i libev4_4.22-1+b1_amd64.deb

RUN wget http://http.us.debian.org/debian/pool/main/libd/libdbd-mysql-perl/libdbd-mysql-perl_4.041-2_amd64.deb && \
    dpkg -i libdbd-mysql-perl_4.041-2_amd64.deb

RUN wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/debian/stretch/x86_64/percona-xtrabackup-24_2.4.12-1.stretch_amd64.deb

RUN dpkg -i percona-xtrabackup-24_2.4.12-1.stretch_amd64.deb

RUN chown -R mysql:root /var/lib/mysql

RUN mkdir -p /data/backups
COPY data/thunder.sql /data/

RUN chown mysql:mysql /var/run/mysqld
Enter fullscreen mode Exit fullscreen mode

I ended up with a few wget steps as just trying to import 5.6 with Percona generated a lot of hash errors when downloading packages. There is a 5.6 image with Percona out there, but that image is 3 years old and I wanted something a little newer, besides AWS was requiring at least a minimum of MySQL 5.6.41 in order to get past a nasty version incompatibility error upon restore.

This allows me to also be able to do the backup at any time, as all I (or anyone on my team) needs to do is move the 5.7 backup into a location that we can mount to Docker and do the restore and backup within Docker and never have to worry about trying to create a physical machine.

Billboard image

Deploy and scale your apps on AWS and GCP with a world class developer experience

Coherence makes it easy to set up and maintain cloud infrastructure. Harness the extensibility, compliance and cost efficiency of the cloud.

Learn more

Top comments (0)

Billboard image

Deploy and scale your apps on AWS and GCP with a world class developer experience

Coherence makes it easy to set up and maintain cloud infrastructure. Harness the extensibility, compliance and cost efficiency of the cloud.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay