Sign inSign up

n0bility6/mysql

By n0bility6

Updated over 4 years ago

Mysql 5.7.38 in Debian Linux with cronjob and nano editor

Image
0

1.3K

n0bility6/mysql repository overview

Source

Latest update of original mysql 5.7 repository using the Dockerfile.debian and docker-entrypoint.sh
https://github.com/docker-library/mysql/tree/7c4eca3ee491d62d3aa5442c864c43355ab34f1b/5.7

Usage

Standalone

Simple deployment with root password. Root password can be configured to secret.

 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d n0bility6/mysql:5.7

This command deploy your mysql with credentials and persistent volume.

docker run -dit -e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=sample_user -e MYSQL_PASSWORD=secret_password -e MYSQL_DATABASE=sampledb -v /mysql/data:/var/lib/mysql -v /cronjob/backup/:/etc/cron.d/ n0bility6/mysql:5.7

Restore .sql Backup to new database.

cat backupname.sql | docker exec -i CONTAINERID /usr/bin/mysql -u root --password=root DATABASENAME
  1. CONTAINERID is the new MySQL database server container.
  2. DATABASENAME is the newly created database in the new MySQL container

Stack

version: '3.7'

services:
  #MySQL Service
  database:
    image: n0bility6/mysql:5.7
    command: --default-authentication-plugin=mysql_native_password
    environment:
     - MYSQL_ROOT_PASSWORD=root               
     - MYSQL_USER=sample_user
     - MYSQL_PASSWORD=sample_password
     - MYSQL_DATABASE=sampledb
    volumes:
    - ./mysql/data:/var/lib/mysql     #Persistent Data
    - ./backupscript/:/etc/cron.d/    #Cronjob location
    restart: always

Sample backup script cron job with filename script, place it inside backupscript folder and mount it to ./backupscript/:/etc/cron.d/

# m h dom mon dow user   command
58 23 * * 1 root mysqldump databasename --user=root --password=root > /var/lib/mysql/Backup/monday.sql
58 23 * * 2 root mysqldump databasename --user=root --password=root > /var/lib/mysql/Backup/tuesday.sql
58 23 * * 3 root mysqldump databasename --user=root --password=root > /var/lib/mysql/Backup/wednesday.sql
58 23 * * 4 root mysqldump databasename --user=root --password=root > /var/lib/mysql/Backup/thursday.sql
58 23 * * 5 root mysqldump databasename --user=root --password=root > /var/lib/mysql/Backup/friday.sql
58 23 * * 6 root mysqldump databasename --user=root --password=root > /var/lib/mysql/Backup/saturday.sql
58 23 * * 7 root mysqldump databasename --user=root --password=root > /var/lib/mysql/Backup/sunday.sql

Changes

Add cron and nano in Dockerfile RUN command

Original

RUN apt-get update && apt-get install -y --no-install-recommends gnupg dirmngr && rm -rf /var/lib/apt/lists/*

Updated

RUN apt-get update && apt-get install -y --no-install-recommends gnupg dirmngr cron nano && rm -rf /var/lib/apt/lists/*

Add custom command in docker-entrypoint.sh inside _main() function.

_main() {
        # if command starts with an option, prepend mysqld
        if [ "${1:0:1}" = '-' ]; then
                set -- mysqld "$@"
        fi
        # skip setup if they aren't running mysqld or want an option that stops mysqld
        if [ "$1" = 'mysqld' ] && ! _mysql_want_help "$@"; then
                mysql_note "Entrypoint script for MySQL Server ${MYSQL_VERSION} started."

                mysql_check_config "$@"
                # Load various environment variables
                docker_setup_env "$@"
                docker_create_db_directories

                # If container is started as root user, restart as dedicated mysql user
                if [ "$(id -u)" = "0" ]; then

                        #====================Custom command======================
                        #Start Cron service first as root user
                        service cron start
                        echo "Starting periodic command scheduler: cron started!"
                        chown root /etc/cron.d/* /etc/cron.daily/* /etc/cron.hourly/* /etc/cron.monthly/* /etc/cron.weekly/*
                        chmod 644 /etc/cron.d/* /etc/cron.daily/* /etc/cron.hourly/* /etc/cron.monthly/* /etc/cron.weekly/*
                        echo "Starting periodic command scheduler: Changed ownership of /etc/cron.d/ /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.monthly/ /etc/cron.weekly/ files to root user."
                        #====================Custom command======================

                        mysql_note "Switching to dedicated user 'mysql'"
                        exec gosu mysql "$BASH_SOURCE" "$@"
                fi

                # there's no database, so it needs to be initialized
                if [ -z "$DATABASE_ALREADY_EXISTS" ]; then
                        docker_verify_minimum_env

                        # check dir permissions to reduce likelihood of half-initialized database
                        ls /docker-entrypoint-initdb.d/ > /dev/null

                        docker_init_database_dir "$@"

                        mysql_note "Starting temporary server"
                        docker_temp_server_start "$@"
                        mysql_note "Temporary server started."

                        mysql_socket_fix
                        docker_setup_db
                        docker_process_init_files /docker-entrypoint-initdb.d/*

                        mysql_expire_root_user

                        mysql_note "Stopping temporary server"
                        docker_temp_server_stop
                        mysql_note "Temporary server stopped"

                        echo
                        mysql_note "MySQL init process done. Ready for start up."
                        echo
                else
                        mysql_socket_fix
                fi
        fi
        exec "$@"

}

# If we are sourced from elsewhere, don't perform any further actions
if ! _is_sourced; then
        _main "$@"
fi

Tag summary

Content type

Image

Digest

Size

155.1 MB

Last updated

over 4 years ago

docker pull n0bility6/mysql:5.7