build-sql.sh 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #!/bin/bash
  2. . mailcow.conf
  3. NAME="mariadb-mailcow"
  4. reconf() {
  5. echo "Installing database schema (this will not overwrite existing data)"
  6. echo "It may take a while for MariaDB to warm up, please wait..."
  7. until docker exec ${NAME} /bin/bash -c "mysql -u'${DBUSER}' -p'${DBPASS}' ${DBNAME} < /assets/init.sql"; do
  8. echo "Trying again in 2 seconds..."
  9. sleep 2
  10. done
  11. echo "Done."
  12. }
  13. dump() {
  14. DATE=$(date +"%Y%m%d_%H%M%S")
  15. echo "Creating dump file ./backup_${DBNAME}_${DATE}.sql"
  16. docker exec -it ${NAME} /bin/bash mysqldump --default-character-set=utf8mb4 -u${DBUSER} -p${DBPASS} ${DBNAME} > backup_${DBNAME}_${DATE}.sql
  17. }
  18. restore() {
  19. echo "Restoring dump file ${2}..."
  20. docker exec -i ${NAME} mysql -u${DBUSER} -p${DBPASS} ${DBNAME} < ${1}
  21. }
  22. insert_admin() {
  23. echo 'Setting mailcow UI admin login to "admin:moohoo"...'
  24. echo "It may take a while for MariaDB to warm up, please wait..."
  25. until docker exec ${NAME} /bin/bash -c "mysql -u'${DBUSER}' -p'${DBPASS}' ${DBNAME} < /assets/pw.sql"; do
  26. echo "Trying again in 2 seconds..."
  27. sleep 2
  28. done
  29. echo "Done."
  30. }
  31. client() {
  32. echo "==============================="
  33. echo "DB: ${DBNAME} - USER: ${DBUSER}"
  34. echo "==============================="
  35. docker exec -it ${NAME} mysql -u${DBUSER} -p${DBPASS} ${DBNAME}
  36. }
  37. if [[ ${1} == "--init-schema" ]]; then
  38. reconf
  39. exit 0
  40. elif [[ ${1} == "--dump" ]]; then
  41. dump
  42. exit 0
  43. elif [[ ${1} == "--restore" ]]; then
  44. if [[ -z ${2} || ! -f ${2} ]]; then
  45. echo "Invalid input file"
  46. exit 1
  47. fi
  48. restore ${2}
  49. exit 0
  50. elif [[ ${1} == "--client" ]]; then
  51. client
  52. exit 0
  53. elif [[ ${1} == "--reset-admin" ]]; then
  54. insert_admin
  55. exit 0
  56. elif [[ ! -z ${1} ]]; then
  57. echo "Unknown parameter"
  58. exit 1
  59. fi
  60. echo "Stopping and removing containers with name tag ${NAME}..."
  61. if [[ ! -z $(docker ps -af "name=${NAME}" -q) ]]; then
  62. docker stop $(docker ps -af "name=${NAME}" -q)
  63. docker rm $(docker ps -af "name=${NAME}" -q)
  64. fi
  65. if [[ ! -z "$(docker images -q mariadb:${DBVERS})" ]]; then
  66. read -r -p "Found image locally. Delete local image and repull? [y/N] " response
  67. response=${response,,}
  68. if [[ $response =~ ^(yes|y)$ ]]; then
  69. docker rmi mariadb:${DBVERS}
  70. fi
  71. fi
  72. docker run \
  73. -v ${PWD}/data/db/mysql/:/var/lib/mysql/ \
  74. -v ${PWD}/data/conf/mysql/:/etc/mysql/conf.d/ \
  75. -v ${PWD}/data/assets/mysql:/assets \
  76. --name=${NAME} \
  77. --network=${DOCKER_NETWORK} \
  78. -h mysql \
  79. --network-alias mysql \
  80. -e MYSQL_ROOT_PASSWORD=${DBROOT} \
  81. -e MYSQL_DATABASE=${DBNAME} \
  82. -e MYSQL_USER=${DBUSER} \
  83. -e MYSQL_PASSWORD=${DBPASS} \
  84. -d mariadb:${DBVERS}
  85. reconf
  86. read -r -p "Do you want to reset mailcow admin to admin:moohoo? [y/N] " response
  87. response=${response,,}
  88. if [[ $response =~ ^(yes|y)$ ]]; then
  89. insert_admin
  90. fi