Compare commits
	
		
			3 Commits
		
	
	
		
			fix-import
			...
			backup-dat
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 4521d404ae | |||
| f498b82b07 | |||
| 9034a71927 | 
| @@ -1,4 +1,7 @@ | ||||
| { pkgs, lib, config, values, ... }: | ||||
| let | ||||
|   backupDir = "/var/lib/mysql/backups"; | ||||
| in | ||||
| { | ||||
|   sops.secrets."mysql/password" = { | ||||
|     owner = "mysql"; | ||||
| @@ -36,11 +39,6 @@ | ||||
|     }]; | ||||
|   }; | ||||
|  | ||||
|   services.mysqlBackup = { | ||||
|     enable = true; | ||||
|     location = "/var/lib/mysql/backups"; | ||||
|   }; | ||||
|  | ||||
|   networking.firewall.allowedTCPPorts = [ 3306 ]; | ||||
|  | ||||
|   systemd.services.mysql.serviceConfig = { | ||||
| @@ -50,4 +48,58 @@ | ||||
|       values.ipv6-space | ||||
|     ]; | ||||
|   }; | ||||
|  | ||||
|   # NOTE: instead of having the upstream nixpkgs postgres backup unit trigger | ||||
|   #       another unit, it was easier to just make one ourselves | ||||
|   systemd.services."backup-mysql" = { | ||||
|     description = "Backup MySQL data"; | ||||
|     requires = [ "mysql.service" ]; | ||||
|  | ||||
|     path = [ | ||||
|       pkgs.coreutils | ||||
|       pkgs.rsync | ||||
|       pkgs.gzip | ||||
|       config.services.mysql.package | ||||
|     ]; | ||||
|  | ||||
|     script = let | ||||
|       rotations = 10; | ||||
|       # rsyncTarget = "root@isvegg.pvv.ntnu.no:/mnt/backup1/bicep/mysql"; | ||||
|       rsyncTarget = "/data/backup/mysql"; | ||||
|     in '' | ||||
|       set -eo pipefail | ||||
|  | ||||
|       mysqldump --all-databases | gzip -c -9 --rsyncable > "${backupDir}/$(date --iso-8601)-dump.sql.gz" | ||||
|  | ||||
|       while [ $(ls -1 "${backupDir}" | wc -l) -gt ${toString rotations} ]; do | ||||
|         rm $(find "${backupDir}" -type f -printf '%T+ %p\n' | sort | head -n 1 | cut -d' ' -f2) | ||||
|       done | ||||
|  | ||||
|       rsync -avz --delete "${backupDir}" '${rsyncTarget}' | ||||
|     ''; | ||||
|  | ||||
|     serviceConfig = { | ||||
|       Type = "oneshot"; | ||||
|       User = "mysql"; | ||||
|       Group = "mysql"; | ||||
|       UMask = "0077"; | ||||
|  | ||||
|       Nice = 19; | ||||
|       IOSchedulingClass = "best-effort"; | ||||
|       IOSchedulingPriority = 7; | ||||
|  | ||||
|       ReadWritePaths = [ | ||||
|         backupDir | ||||
|         "/data/backup/mysql" # NOTE: should not be part of this option once rsyncTarget is remote | ||||
|       ]; | ||||
|     }; | ||||
|  | ||||
|     startAt = "*-*-* 02:15:00"; | ||||
|   }; | ||||
|  | ||||
|   systemd.tmpfiles.settings."10-mysql-backup".${backupDir}.d = { | ||||
|     user = "mysql"; | ||||
|     group = "mysql"; | ||||
|     mode = "700"; | ||||
|   }; | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,7 @@ | ||||
| { config, pkgs, ... }: | ||||
| { config, pkgs, lib, ... }: | ||||
| let | ||||
|   backupDir = "/var/lib/postgresql/backups"; | ||||
| in | ||||
| { | ||||
|   services.postgresql = { | ||||
|     enable = true; | ||||
| @@ -90,9 +93,57 @@ | ||||
|   networking.firewall.allowedTCPPorts = [ 5432 ]; | ||||
|   networking.firewall.allowedUDPPorts = [ 5432 ]; | ||||
|  | ||||
|   services.postgresqlBackup = { | ||||
|     enable = true; | ||||
|     location = "/var/lib/postgres/backups"; | ||||
|     backupAll = true; | ||||
|   # NOTE: instead of having the upstream nixpkgs postgres backup unit trigger | ||||
|   #       another unit, it was easier to just make one ourselves | ||||
|   systemd.services."backup-postgresql" = { | ||||
|     description = "Backup PostgreSQL data"; | ||||
|     requires = [ "postgresql.service" ]; | ||||
|  | ||||
|     path = [ | ||||
|       pkgs.coreutils | ||||
|       pkgs.rsync | ||||
|       pkgs.gzip | ||||
|       config.services.postgresql.package | ||||
|     ]; | ||||
|  | ||||
|     script = let | ||||
|       rotations = 10; | ||||
|       # rsyncTarget = "root@isvegg.pvv.ntnu.no:/mnt/backup1/bicep/postgresql"; | ||||
|       rsyncTarget = "/data/backup/postgresql"; | ||||
|     in '' | ||||
|       set -eo pipefail | ||||
|  | ||||
|       pg_dumpall -U postgres | gzip -c -9 --rsyncable > "${backupDir}/$(date --iso-8601)-dump.sql.gz" | ||||
|  | ||||
|       while [ $(ls -1 "${backupDir}" | wc -l) -gt ${toString rotations} ]; do | ||||
|         rm $(find "${backupDir}" -type f -printf '%T+ %p\n' | sort | head -n 1 | cut -d' ' -f2) | ||||
|       done | ||||
|  | ||||
|       rsync -avz --delete "${backupDir}" '${rsyncTarget}' | ||||
|     ''; | ||||
|  | ||||
|     serviceConfig = { | ||||
|       Type = "oneshot"; | ||||
|       User = "postgres"; | ||||
|       Group = "postgres"; | ||||
|       UMask = "0077"; | ||||
|  | ||||
|       Nice = 19; | ||||
|       IOSchedulingClass = "best-effort"; | ||||
|       IOSchedulingPriority = 7; | ||||
|  | ||||
|       ReadWritePaths = [ | ||||
|         backupDir | ||||
|         "/data/backup/postgresql" # NOTE: should not be part of this option once rsyncTarget is remote | ||||
|       ]; | ||||
|     }; | ||||
|  | ||||
|     startAt = "*-*-* 01:15:00"; | ||||
|   }; | ||||
|  | ||||
|   systemd.tmpfiles.settings."10-postgresql-backup".${backupDir}.d = { | ||||
|     user = "postgres"; | ||||
|     group = "postgres"; | ||||
|     mode = "700"; | ||||
|   }; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user