at 17.09-beta 1.9 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 inherit (pkgs) mysql gzip; 8 9 cfg = config.services.mysqlBackup ; 10 location = cfg.location ; 11 mysqlBackupCron = db : '' 12 ${cfg.period} ${cfg.user} ${mysql}/bin/mysqldump ${if cfg.singleTransaction then "--single-transaction" else ""} ${db} | ${gzip}/bin/gzip -c > ${location}/${db}.gz 13 ''; 14 15in 16 17{ 18 options = { 19 20 services.mysqlBackup = { 21 22 enable = mkOption { 23 default = false; 24 description = '' 25 Whether to enable MySQL backups. 26 ''; 27 }; 28 29 period = mkOption { 30 default = "15 01 * * *"; 31 description = '' 32 This option defines (in the format used by cron) when the 33 databases should be dumped. 34 The default is to update at 01:15 (at night) every day. 35 ''; 36 }; 37 38 user = mkOption { 39 default = "mysql"; 40 description = '' 41 User to be used to perform backup. 42 ''; 43 }; 44 45 databases = mkOption { 46 default = []; 47 description = '' 48 List of database names to dump. 49 ''; 50 }; 51 52 location = mkOption { 53 default = "/var/backup/mysql"; 54 description = '' 55 Location to put the gzipped MySQL database dumps. 56 ''; 57 }; 58 59 singleTransaction = mkOption { 60 default = false; 61 description = '' 62 Whether to create database dump in a single transaction 63 ''; 64 }; 65 }; 66 67 }; 68 69 config = mkIf config.services.mysqlBackup.enable { 70 71 services.cron.systemCronJobs = map mysqlBackupCron config.services.mysqlBackup.databases; 72 73 system.activationScripts.mysqlBackup = stringAfter [ "stdio" "users" ] 74 '' 75 mkdir -m 0700 -p ${config.services.mysqlBackup.location} 76 chown ${config.services.mysqlBackup.user} ${config.services.mysqlBackup.location} 77 ''; 78 79 }; 80 81}