#!/bin/sh # Deploy mysqld_exporter as Docker container on artc0 # Run once as root / sudo after creating the MariaDB monitoring user below. # # PREREQUISITE — run in mysql: # CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'ExporterPass2026!' WITH MAX_USER_CONNECTIONS 3; # GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost'; # FLUSH PRIVILEGES; # # Then run this script. set -e CONTAINER_NAME="mysqld_exporter" CNF_FILE="/etc/mysqld-exporter.cnf" # Write config file if not present if [ ! -f "$CNF_FILE" ]; then cat > "$CNF_FILE" << 'EOF' [client] user=exporter password=ExporterPass2026! socket=/run/mysqld/mysqld.sock EOF chmod 644 "$CNF_FILE" fi # Get socket GID to allow container user to access it SOCK_GID=$(stat -c '%g' /run/mysqld/mysqld.sock) # Stop existing container if running docker stop "$CONTAINER_NAME" 2>/dev/null || true docker rm "$CONTAINER_NAME" 2>/dev/null || true # Run with Unix socket mount — MariaDB uses skip-networking (no TCP) docker run -d \ --name "$CONTAINER_NAME" \ --restart unless-stopped \ --user "65534:${SOCK_GID}" \ -v "${CNF_FILE}:/etc/.my.cnf:ro" \ -v "/run/mysqld/mysqld.sock:/run/mysqld/mysqld.sock:ro" \ -p 9104:9104 \ prom/mysqld-exporter:latest \ --config.my-cnf=/etc/.my.cnf \ --collect.info_schema.innodb_metrics \ --collect.global_status \ --collect.global_variables \ --web.listen-address=":9104" echo "mysqld_exporter started, listening on :9104" sleep 3 docker logs "$CONTAINER_NAME" 2>&1 | tail -5 curl -s http://localhost:9104/metrics | grep 'mysql_up'