diff --git a/jobs/services/members-mysql-backup.hcl b/jobs/services/members-mysql-backup.hcl
new file mode 100644
index 0000000..c07b00f
--- /dev/null
+++ b/jobs/services/members-mysql-backup.hcl
@@ -0,0 +1,50 @@
+job "members-mysql-backup" {
+  datacenters = ["aperture"]
+  type        = "batch"
+
+  periodic {
+    crons            = ["0 */3 * * * *"]
+    prohibit_overlap = true
+  }
+
+  group "db-backup" {
+    task "mysql-backup" {
+      driver = "raw_exec"
+
+      config {
+        command = "/bin/bash"
+        args    = ["local/script.sh"]
+      }
+
+      template {
+        data = <<EOH
+#!/bin/bash
+
+file=/storage/backups/nomad/mysql/members/members-mysql-$(date +%Y-%m-%d_%H-%M-%S).sql
+
+mkdir -p /storage/backups/nomad/mysql/members
+
+alloc_id=$(nomad job status members-mysql | grep running | tail -n 1 | cut -d " " -f 1)
+
+job_name=$(echo ${NOMAD_JOB_NAME} | cut -d "/" -f 1)
+
+nomad alloc exec $alloc_id mariadb-dump -u root -p'{{ key "members-mysql/root/password"}}' --all-databases > "${file}"
+
+find /storage/backups/nomad/mysql/members/members-mysql* -ctime +3 -exec rm {} \; || true
+
+if [ -s "$file" ]; then # check if file exists and is not empty
+  echo "Backup successful"
+  exit 0
+else
+  rm $file
+  curl -H "Content-Type: application/json" -d \
+  '{"content": "<@&585512338728419341> `MySQL` backup for **'"${job_name}"'** has just **FAILED**\nFile name: `'"$file"'`\nDate: `'"$(TZ=Europe/Dublin date)"'`\nTurn off this script with `nomad job stop '"${job_name}"'` \n\n## Remember to restart this backup job when fixed!!!"}' \
+  {{ key "mysql/webhook/discord" }}
+fi
+EOH
+        destination = "local/script.sh"
+      }
+    }
+  }
+}
+
diff --git a/jobs/services/members-mysql.hcl b/jobs/services/members-mysql.hcl
new file mode 100644
index 0000000..6587da7
--- /dev/null
+++ b/jobs/services/members-mysql.hcl
@@ -0,0 +1,78 @@
+job "members-mysql" {
+  datacenters = ["aperture"]
+
+  constraint {
+    attribute = "${attr.unique.hostname}"
+    value     = "wheatley"
+  }
+
+  group "db" {
+    network {
+      port "db" {
+        static = 3306
+      }
+    }
+
+    task "mariadb" {
+      driver = "docker"
+
+      template {
+        data = <<EOH
+MYSQL_ROOT_PASSWORD="{{ key "members-mysql/root/password" }}"
+MYSQL_USER="{{ key "members-mysql/user/username" }}"
+MYSQL_PASSWORD="{{ key "members-mysql/user/password" }}"
+EOH
+
+        destination = "local/file.env"
+        env         = true
+      }
+
+      config {
+        image = "mariadb:latest"
+        ports = ["db"]
+
+        volumes = [
+          "/opt/members-mysql:/var/lib/mysql",
+          "local/server.cnf:/etc/mysql/mariadb.conf.d/50-server.cnf",
+        ]
+      }
+
+      template {
+        data = <<EOH
+[server]
+
+[mariadbd]
+
+pid-file                = /run/mysqld/mysqld.pid
+basedir                 = /usr
+
+bind-address            = 0.0.0.0
+
+expire_logs_days        = 10
+
+character-set-server     = utf8mb4
+character-set-collations = utf8mb4=uca1400_ai_ci
+
+[mariadbd]
+        EOH
+        destination = "local/server.cnf"
+      }
+
+      resources {
+        cpu    = 400
+        memory = 800
+      }
+
+      service {
+        name = "members-mysql"
+        port = "db"
+
+        check {
+          type     = "tcp"
+          interval = "2s"
+          timeout  = "2s"
+        }
+      }
+    }
+  }
+}