Compare commits
	
		
			3 Commits
		
	
	
		
			gitea-vask
			...
			backup-dat
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 4521d404ae | |||
| f498b82b07 | |||
| 9034a71927 | 
| @@ -1,4 +1,7 @@ | |||||||
| { pkgs, lib, config, values, ... }: | { pkgs, lib, config, values, ... }: | ||||||
|  | let | ||||||
|  |   backupDir = "/var/lib/mysql/backups"; | ||||||
|  | in | ||||||
| { | { | ||||||
|   sops.secrets."mysql/password" = { |   sops.secrets."mysql/password" = { | ||||||
|     owner = "mysql"; |     owner = "mysql"; | ||||||
| @@ -36,11 +39,6 @@ | |||||||
|     }]; |     }]; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|   services.mysqlBackup = { |  | ||||||
|     enable = true; |  | ||||||
|     location = "/var/lib/mysql/backups"; |  | ||||||
|   }; |  | ||||||
|  |  | ||||||
|   networking.firewall.allowedTCPPorts = [ 3306 ]; |   networking.firewall.allowedTCPPorts = [ 3306 ]; | ||||||
|  |  | ||||||
|   systemd.services.mysql.serviceConfig = { |   systemd.services.mysql.serviceConfig = { | ||||||
| @@ -50,4 +48,58 @@ | |||||||
|       values.ipv6-space |       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 = { |   services.postgresql = { | ||||||
|     enable = true; |     enable = true; | ||||||
| @@ -90,9 +93,57 @@ | |||||||
|   networking.firewall.allowedTCPPorts = [ 5432 ]; |   networking.firewall.allowedTCPPorts = [ 5432 ]; | ||||||
|   networking.firewall.allowedUDPPorts = [ 5432 ]; |   networking.firewall.allowedUDPPorts = [ 5432 ]; | ||||||
|  |  | ||||||
|   services.postgresqlBackup = { |   # NOTE: instead of having the upstream nixpkgs postgres backup unit trigger | ||||||
|     enable = true; |   #       another unit, it was easier to just make one ourselves | ||||||
|     location = "/var/lib/postgres/backups"; |   systemd.services."backup-postgresql" = { | ||||||
|     backupAll = true; |     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