126 lines
2.6 KiB
Bash
Executable File
126 lines
2.6 KiB
Bash
Executable File
#!/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 "YES, OH YES!. I am on ... IT"
|
|
__msg "waaaaait..."
|
|
__msg "waaaaaaaaaait..."
|
|
__msg "waaaaaaaaaaaaaaait..."
|
|
|
|
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 $?
|