From 8ed0a7f8c6215bf81ce0f512333a25d1102f1818 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Tue, 21 Jul 2026 21:52:48 +0900 Subject: [PATCH] bicep/mysql: add timed jobs for analyze and optimize --- hosts/bicep/services/mysql/default.nix | 5 ++- hosts/bicep/services/mysql/timed-jobs.nix | 48 +++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 hosts/bicep/services/mysql/timed-jobs.nix diff --git a/hosts/bicep/services/mysql/default.nix b/hosts/bicep/services/mysql/default.nix index a162053..8fb73f0 100644 --- a/hosts/bicep/services/mysql/default.nix +++ b/hosts/bicep/services/mysql/default.nix @@ -4,7 +4,10 @@ let dataDir = "/data/mysql"; in { - imports = [ ./backup.nix ]; + imports = [ + ./backup.nix + ./timed-jobs.nix + ]; sops.secrets."mysql/password" = { owner = "mysql"; diff --git a/hosts/bicep/services/mysql/timed-jobs.nix b/hosts/bicep/services/mysql/timed-jobs.nix new file mode 100644 index 0000000..51c2835 --- /dev/null +++ b/hosts/bicep/services/mysql/timed-jobs.nix @@ -0,0 +1,48 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.services.mysql; +in +{ + config = lib.mkIf cfg.enable { + systemd.services = { + mysql-analyze = { + requires = [ "mysql.service" ]; + after = [ "mysql.service" ]; + description = "Refresh MariaDB optimizer statistics for all databases"; + startAt = "Mon 05:00:00"; + serviceConfig = { + Type = "oneshot"; + User = cfg.user; + Group = cfg.group; + + Nice = 19; + IOSchedulingClass = "best-effort"; + IOSchedulingPriority = 7; + + ExecStart = "${lib.getExe' cfg.package "mariadb-check"} --all-databases --analyze"; + }; + }; + + mysql-optimize = { + requires = [ "mysql.service" ]; + after = [ "mysql.service" ]; + description = "Check, repair and optimize all MariaDB databases"; + startAt = "*-*-01 04:00:00"; + serviceConfig = { + Type = "oneshot"; + User = cfg.user; + Group = cfg.group; + + Nice = 19; + IOSchedulingClass = "best-effort"; + IOSchedulingPriority = 7; + + ExecStart = [ + "${lib.getExe' cfg.package "mariadb-check"} --all-databases --auto-repair" + "${lib.getExe' cfg.package "mariadb-check"} --all-databases --optimize" + ]; + }; + }; + }; + }; +}