...
Codeblock | ||
---|---|---|
| ||
mariadb: image: mariadb:10.11 volumes: - db_data:/var/lib/mysql - ./config/mariadb:/etc/mysql/conf.d env_file: - brandbox.docker.env environment: MYSQL_HOST: database.${COMPOSE_PROJECT_NAME} MARIADB_AUTO_UPGRADE: 1 MARIADB_INITDB_SKIP_TZINFO: 1 labels: traefik.enable: "false" healthcheck: test: ["CMD", "mysql", "-u", "root", "-proot", "-e", "SELECT version();"] interval: 1m timeout: 10s retries: 3 ports: - "3306" cpus: 0.75 mem_limit: 1000M networks: internal: aliases: - database.${COMPOSE_PROJECT_NAME} volumes: db_data: |
Zusätzliche Konfiguration über Bind-Mount
Konfigurationsdateien müssen per Bind-Mount in den Container gemountet werden. Dazu muss der Ordner mariadb/conf parallel ./config/mariadbparallel zu docker-compose.yml vor dem Ausführen von "up" angelegt werden.
Der Ordner muss folgende Dateien enthalten:
MariaDB-Konfiguration my.cnf
SSL-Zertifikate im PEM-Format:
ca.crt.pem
ca.key.pem
server.crt.pem
server.key.pem
entrypoint.sh, um MariaDB-Logs in die Docker-Logs umzuleiten (siehe unten unter “Logging”)
my.cnf
Codeblock | ||
---|---|---|
| ||
[mysqld] character-set-server=utf8 collation-server=utf8_general_ci sort_buffer_size=1M innodb_buffer_pool_size=512M innodb_lru_scan_depth=128 innodb_ft_max_token_size=84 innodb_ft_result_cache_limit=2000000000 innodb_ft_total_cache_size=640000000 innodb_io_capacity=150000 innodb_io_capacity_max=150000 innodb_open_files=40M 40960 open_files_limit=40M40960 tmpmax_tableallowed_sizepacket=256M1073741824 maxtmp_allowedtable_packetsize=1024M128M max_heap_table_size=256M128M query_cache_limit=16M16777216 query_cache_size=128M134217728 ssl=1 ssl-ca=/etc/mysql/conf.d/ca.crt.pem ssl-cert=/etc/mysql/conf.d/server.crt.pem ssl-key=/etc/mysql/conf.d/server.key.pem |
In der brandbox.docker.env müssen die Pfade zu den Zertifikaten für die Verwendung in der Anwendung korrekt gesetzt werden:
Codeblock | ||
---|---|---|
| ||
MYSQL_SSL_KEY=/etc/mysql/conf.d/server.key.pem MYSQL_SSL_CRT=/etc/mysql/conf.d/server.crt.pem MYSQL_SSL_CA_CRT=/etc/mysql/conf.d/ca.crt.pem general_log=0 general_log_file=/var/log/mysql/query.log |
Logging
Es ist möglich, über Einträge in der my.cnf das Query-Log und das Slow-Log zu aktivieren:
my.cnf
Codeblock | ||
---|---|---|
| ||
general_log=1 general_log_file=/var/log/mysql/query.log slow_query_log=1 slow_query_log_file=/var/log/mysql/slow.log long_query_time=0.1 log_queries_not_using_indexes |
Über einen Custom-Entrypoint können diese Logdateien in die Standardausgabe (stdout) geschrieben werden, damit sie über docker logs bzw. Graylog ausgewertet werden können:
docker-compose.yml (Auszug)
Codeblock | ||
---|---|---|
| ||
database: image: mariadb:10.11 volumes: - db_data:/var/lib/mysql - ./config/mariadb:/etc/mysql/conf.d env_file: - brandbox.docker.env environment: MYSQL_HOST: database.${COMPOSE_PROJECT_NAME} entrypoint: /etc/mysql/conf.d/entrypoint.sh # >> Custom-Entrypoint definieren labels: traefik.enable: "false" healthcheck: test: ["CMD", "mysql", "-u", "root", "-proot", "-e", "SELECT version();"] interval: 1m timeout: 10s retries: 3 ports: - "3306" cpus: 0.75 mem_limit: 1000M networks: internal: aliases: - database.${COMPOSE_PROJECT_NAME} |
Die Datei entrypoint.sh muss dazu im definierten Bind-Mount-Ordner abgelegt werden (./config/mariadb/conf) und wie folgt aussehen:
...
Codeblock |
---|
chmod o+x ./entrypoint.sh |
Cluster-Konfiguration (Kubernetes)