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" + ]; + }; + }; + }; + }; +}