003-build-sql.sh 2.7 KB

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