#!/usr/bin/env bash SCRIPT_PATH=$( cd "$(dirname "$0")" ; pwd -P ) IMAGE_NAME="mariadb" IMAGE_VERSION="10.3" SERVICE_NAME=maria-db source ${SCRIPT_PATH}/../common.shinc # # Project specific variables # DB_VOLUME=mariadb_shared BACKUP_DIR=${SCRIPT_PATH}/backup source ${SCRIPT_PATH}/env.shinc 2> /dev/null init() { __init # Create networks NETWORKS=(${DB_NETWORK}) __createNetworks # Create the database container docker create \ --name ${SERVICE_NAME} \ --restart=unless-stopped \ -v ${DB_VOLUME}:/var/lib/mysql \ -p 127.0.0.1::3306 \ -e MYSQL_ROOT_PASSWORD=${DB_PASSWORD} \ --net ${DB_NETWORK} \ ${IMAGE_NAME}:${IMAGE_VERSION} [[ $? -ne 0 ]] && return 1 __ask_to_start } # Runs a command inside the container, mounting the current context to /current inside cmd() { docker run --rm -it -v $PWD:/current --net ${DB_NETWORK} ${IMAGE_NAME}:${IMAGE_VERSION} $@ } import() { local dbname="$1" shift local filename="$1" shift if [[ "${dbname}" == "" ]] || [[ "${filename}" == "" ]]; then __err "You must provide database name and filename of the file you want to import" __msg "E.g. ./run import my-database-name \"\$PWD/my-file.sql\"" return 137 fi if [[ ! -f "${filename}" ]]; then __err "The filename was not located at ${filename}" return 137 fi echo -e "${C_WARN}This will import the file located at \"${C_WHITE}${filename}${C_WARN}\" to a database named \"${C_WHITE}${dbname}${C_WARN}\"${C_NONE}" echo __warn "Do you want to continue? [y/(n)] " read CONTINUE if [[ "${CONTINUE}" != "y" ]]; then __msg "Quiting..." return 0 fi __msg "Importing, please wait..." local path=$(realpath "${filename}") local name=$(basename "${path}") docker run --rm -it -v "${path}":"/import/${name}" --net ${DB_NETWORK} ${IMAGE_NAME}:${IMAGE_VERSION} mysql -h ${SERVICE_NAME} -u root -p${DB_PASSWORD} "${dbname}" -e "source /import/${name}" } bash() { cmd bash } # Used for exporting the whole database filesystem backup() { stop local user=$(id -u) mkdir -p ${BACKUP_DIR} && \ docker run --rm --volumes-from ${SERVICE_NAME} -v ${BACKUP_DIR}:/backup busybox tar cvf /backup/backup.tar /var/lib/mysql && sudo chown -R ${user}:${user} ./backup if [[ $? -ne 0 ]]; then __err "Could not create the backup" exit 2 fi start return $? } # Used for importing the whole database filesystem restore() { stop docker run --rm --volumes-from ${SERVICE_NAME} -v ${BACKUP_DIR}:/backup busybox sh -c "rm -rf /var/lib/mysql/* && tar xvf /backup/backup.tar --directory /" start return $? } "$@" exit $?