Monday, January 1, 2018

Docker MySQL Automatic Backups using Cron and Supervisor

mysqldump command allows you to create an SQL dump file of the database. By executing this command using a scheduler application like Windows Task Scheduler or Linux Cron you can create periodic backups automatically.
But when it comes to Docker MySQL image you cannot do this since base image does not contain any scheduler application. Even though we can install a scheduler utility like Cron on MySQL image, it does not do what we want since the MySQL container executes only the DB application at the container startup. It does not trigger the executable related to the scheduler application.
Here is my solution to the above problem. Using 'Supervisor' application to execute both MySQL and Cron. Supervisor is a process monitoring and controlling application for UNIX-like operating systems.

Following is the step by step guide to the solution. All these steps are instructions in the Dockerfile of the final output image. You don't want to do these things manually except copying the contents of the files. My Dockerfile will do the job. I'm listing these thing here just for your clarification.

1. Use MySQL docker image as the base image.
2. Install Cron on base image.
3. Install Supervisor on base image.
4. Prepare supervisord.conf Supervisor configuration file so that it starts MySQL DB and Contrab.
5. Add an entry to Crontab file so that it execute the (Shell script which contains the mysqldump commands) everyday 11.45pm.

Following are the files which do all these things. Place all files inside a single folder and build image of the final container.

Every commands are straight forward where you can search and find more information. But touchrootcron in supervisord.conf file is something special. This is a trick to solve permission problem in Docker layered file system (Read for Docker layered file system and copy-on-write (CoW) strategy). root crontab file should be in the writable layer container layer.

Don't hesitate to put a comment if you have any problem.

Friday, April 28, 2017

Excluding Property Files from Jar File : Maven Shade Plugin

Recently, i wanted to create a single Jar file with all the dependencies while the property files are excluded which are coming from the project. But the property files which are coming from dependencies should be preserved. My idea was to externalize property file so that someone can edit them without going inside Jar.

I tried several options.

Resources plugin perfectly work for the need. But it excludes the property files even when i run the project from the IDE (Eclipse/NetBeans)

I tried jar-with-dependencies pre-defined assembly descriptor with few customization. I used exclusion in unpackOptions. But it excludes property files which are coming from all the dependent modules.

Finally i found the working solution. It was Maven Shade Plugin

Following is example pom.xml. There you can see how i have used Maven Shade Plugin with property file excluding configurations. Shade plugin can be use to filter any file file from any dependent module conveniently.
Since i wanted an executable Jar i have specially used ManifestResourceTransformer in the Shade configurations.

Tuesday, December 20, 2016

Getting Start with MySQL Community Server ZIP Archive on Windows

It's always easy to use a zip archive than installing a software on your machine. Recently I've got to use MySQL Community Server ZIP Archive (mysql-5.7.17) and faced some problem when setting up the server. I will give you few step by step guidelines for a successful set up so that you won't face the same problems.

Step 1: Extract the zip archive.
Lets say the base directory path is D:\mysql-server

Step 2: Open the command prompt in Administrator Mode and navigate to MySQL base directory.
This is the most important step. MySQL needs access to your registry at the initial execution. If you execute the initial MySQL commands without administrator mode you will get an error message like follows.
Could not create or access the registry key needed for the MySQL application
to log to the Windows EventLog. Run the application with sufficient
privileges once to create the key, add the key manually, or turn off
logging for that application.

Step 3: Enter following commands.
D:\mysql-server> mysqld --initialize
D:\mysql-server>mysqld --initialize-insecure

Above first command will create a random password for root user account while second won't.

Setp 4: Enter mysqld in the command prompt.
D:\mysql-server> mysqld
Now your MySQL server is up and running!

Using command prompt in administrator mode is only for the setting up. You don't want administrator mode in the later sever startups.

A Note for MySQL Workbench Users:
I use MySQL Workbench as the IDE. My OS is a 64bit OS and I downloaded 64bit non-install zip version of MySQL Workbench. But it got crashed when i started it. Then i browsed internet and found that 32bit version is the solution. I downloaded MySQL Workbench 32 bit non-install zip and it worked fine.