123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #!/bin/bash
- . mailcow.conf
- NAME="mariadb-mailcow"
- reconf() {
- echo "Installing database schema (this will not overwrite existing data)"
- echo "It may take a while for MariaDB to warm up, please wait..."
- echo docker exec ${NAME} mysql -u${DBUSER} -p${DBPASS} ${DBNAME}
- until docker exec ${NAME} /bin/bash -c "mysql -u'${DBUSER}' -p'${DBPASS}' ${DBNAME} < /assets/init.sql"; do
- echo "Trying again in 2 seconds..."
- sleep 2
- done
- echo "Done."
- }
- dump() {
- DATE=$(date +"%Y%m%d_%H%M%S")
- echo "Creating dump file ./backup_${DBNAME}_${DATE}.sql"
- docker exec -it ${NAME} /bin/bash mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} > backup_${DBNAME}_${DATE}.sql
- }
- restore() {
- echo "Restoring dump file ${2}..."
- docker exec -i ${NAME} mysql -u${DBUSER} -p${DBPASS} ${DBNAME} < ${1}
- }
- insert_admin() {
- echo 'Setting mailcow UI admin login to "admin:moohoo"...'
- echo "It may take a while for MariaDB to warm up, please wait..."
- until docker exec ${NAME} /bin/bash -c "mysql -u'${DBUSER}' -p'${DBPASS}' ${DBNAME} < /assets/pw.sql"; do
- echo "Trying again in 2 seconds..."
- sleep 2
- done
- echo "Done."
- }
- client() {
- echo "==============================="
- echo "DB: ${DBNAME} - USER: ${DBUSER}"
- echo "==============================="
- docker exec -it ${NAME} mysql -u${DBUSER} -p${DBPASS} ${DBNAME}
- }
- if [[ ${1} == "--init-schema" ]]; then
- reconf
- exit 0
- elif [[ ${1} == "--dump" ]]; then
- dump
- exit 0
- elif [[ ${1} == "--restore" ]]; then
- if [[ -z ${2} || ! -f ${2} ]]; then
- echo "Invalid input file"
- exit 1
- fi
- restore ${2}
- exit 0
- elif [[ ${1} == "--client" ]]; then
- client
- exit 0
- elif [[ ${1} == "--reset-admin" ]]; then
- insert_admin
- exit 0
- elif [[ ! -z ${1} ]]; then
- echo "Unknown parameter"
- exit 1
- fi
- echo "Stopping and removing containers with name tag ${NAME}..."
- if [[ ! -z $(docker ps -af "name=${NAME}" -q) ]]; then
- docker stop $(docker ps -af "name=${NAME}" -q)
- docker rm $(docker ps -af "name=${NAME}" -q)
- fi
- if [[ ! -z "$(docker images -q mariadb:${DBVERS})" ]]; then
- read -r -p "Found image locally. Delete local image and repull? [y/N] " response
- response=${response,,}
- if [[ $response =~ ^(yes|y)$ ]]; then
- docker rmi mariadb:${DBVERS}
- fi
- fi
- docker run \
- -v ${PWD}/data/db/mysql/:/var/lib/mysql/ \
- -v ${PWD}/data/conf/mysql/:/etc/mysql/conf.d/:ro \
- -v ${PWD}/data/assets/mysql:/assets:ro \
- --name=${NAME} \
- --network=${DOCKER_NETWORK} \
- -h mysql \
- --network-alias=mysql \
- -e MYSQL_ROOT_PASSWORD=${DBROOT} \
- -e MYSQL_DATABASE=${DBNAME} \
- -e MYSQL_USER=${DBUSER} \
- -e MYSQL_PASSWORD=${DBPASS} \
- -d mariadb:${DBVERS}
- reconf
- read -r -p "Do you want to reset mailcow admin to admin:moohoo? [y/N] " response
- response=${response,,}
- if [[ $response =~ ^(yes|y)$ ]]; then
- insert_admin
- fi
|