Menu

Cron Job

Help
Pilgrims
2010-07-09
2013-05-29
  • Pilgrims

    Pilgrims - 2010-07-09

    Is there a php file that I can 'hit' using a cron job that will perform complete back-ups of the config, sql, media etc (ie on a regular basis without me having to think about it!) ?

     
  • Stephen Arnold

    Stephen Arnold - 2010-07-10

    To make it a short answer - no, as PGV does not have all the information in one format/location. It uses mixed elements of text support files and database support as well as folders, remote and local, for media.

    Hopefully, you are making routine backups of ALL your data onto remote HD's or tape or DVD. This would include all your files, media and your DBs.
    Stephen

     
  • ggpauly

    ggpauly - 2010-07-17

    Howdy Pilgrim (couldn't resist),

    You are absolutely on track with finding a way to do automated backups.  We are not on this earth to do what a computer can do more reliably.  Below is one way to accomplish this that I've implemented.

    I've recently started using rsnapshot  (http://rsnapshot.org/) and cron, with a custom mysql dump script.  This meets my requirements:  several snapshots from different periods in the past, minimal disk space, remote operation and backup storage (runs from the backup server), encrypted communication while transferring the backup.  If you also require encrypted backup you might look into Duplicity, which I also use.

    To help out those interested in running their own secure backups there are three files listed out below:  rsnapshot.conf which configures rsnapshot; crontab which run rsnapshot at scheduled intervals; and antreedbbackup.sh which which remotely dumps the PGV database so that it can be backed up.  (you can remove the database dumps after rsnapshot runs for security - this is not shown in the simplified file).  With the crontab this runs 4 times daily.

    These files have been simplified and scrubbed of identifying info to protect the innocent.  They are  run from Ubuntu Linux and the PGV webserver runs MySQL and Debian Linux.  Also required is passwordless ssl (see http://www.cyberciti.biz/faq/linux-rsnapshot-backup-howto/)

    For this to be secure your backup server must be secure.  Perhaps it's obvious, but I feel the need to preach that any computer logged into a PGV site must be secure or the PGV site is rendered insecure.   Here are some suggestions:

    rsnapshot.conf:

    #################################################
    # rsnapshot.conf - rsnapshot configuration file #
    #################################################
    #                                               #
    # PLEASE BE AWARE OF THE FOLLOWING RULES:       #
    #                                               #
    # This file requires tabs between elements      #
    #                                               #
    # Directories require a trailing slash:         #
    #   right: /home/                               #
    #   wrong: /home                                #
    #                                               #
    #################################################
    #######################
    # CONFIG FILE VERSION #
    #######################
    config_version  1.2
    ###########################
    # SNAPSHOT ROOT DIRECTORY #
    ###########################
    # All snapshots will be stored under this root directory.
    #
    snapshot_root   /.snapshots/
    # If no_create_root is enabled, rsnapshot will not automatically create the
    # snapshot_root directory. This is particularly useful if you are backing
    # up to removable media, such as a FireWire or USB drive.
    #
    #no_create_root 1
    #################################
    # EXTERNAL PROGRAM DEPENDENCIES #
    #################################
    # LINUX USERS:   Be sure to uncomment "cmd_cp". This gives you extra features.
    # EVERYONE ELSE: Leave "cmd_cp" commented out for compatibility.
    #
    # See the README file or the man page for more details.
    #
    cmd_cp      /bin/cp
    # uncomment this to use the rm program instead of the built-in perl routine.
    #
    #cmd_rm     /bin/rm
    # rsync must be enabled for anything to work. This is the only command that
    # must be enabled.
    #
    cmd_rsync   /usr/bin/rsync
    # Uncomment this to enable remote ssh backups over rsync.
    #
    cmd_ssh /usr/bin/ssh
    # Comment this out to disable syslog support.
    #
    cmd_logger  /usr/bin/logger
    # Uncomment this to specify the path to "du" for disk usage checks.
    # If you have an older version of "du", you may also want to check the
    # "du_args" parameter below.
    #
    #cmd_du     /usr/bin/du
    # Uncomment this to specify the path to rsnapshot-diff.
    #
    #cmd_rsnapshot_diff /usr/local/bin/rsnapshot-diff
    # Specify the path to a script (and any optional arguments) to run right
    # before rsnapshot syncs files
    #
    #cmd_preexec    /path/to/preexec/script
    # Specify the path to a script (and any optional arguments) to run right
    # after rsnapshot syncs files
    #
    #cmd_postexec   /path/to/postexec/script
    #########################################
    #           BACKUP INTERVALS            #
    # Must be unique and in ascending order #
    # i.e. hourly, daily, weekly, etc.      #
    #########################################
    interval    hourly  4
    interval    daily   6
    interval    weekly  3
    interval    monthly 12
    ############################################
    #              GLOBAL OPTIONS              #
    # All are optional, with sensible defaults #
    ############################################
    # Verbose level, 1 through 5.
    # 1     Quiet           Print fatal errors only
    # 2     Default         Print errors and warnings only
    # 3     Verbose         Show equivalent shell commands being executed
    # 4     Extra Verbose   Show extra verbose information
    # 5     Debug mode      Everything
    #
    verbose     2
    # Same as "verbose" above, but controls the amount of data sent to the
    # logfile, if one is being used. The default is 3.
    #
    loglevel    2
    # If you enable this, data will be written to the file you specify. The
    # amount of data written is controlled by the "loglevel" parameter.
    #
    logfile /var/log/rsnapshot
    # If enabled, rsnapshot will write a lockfile to prevent two instances
    # from running simultaneously (and messing up the snapshot_root).
    # If you enable this, make sure the lockfile directory is not world
    # writable. Otherwise anyone can prevent the program from running.
    #
    lockfile    /var/run/rsnapshot.pid
    # Default rsync args. All rsync commands have at least these options set.
    #
    #rsync_short_args   -a
    #rsync_long_args    --delete --numeric-ids --relative --delete-excluded
    # ssh has no args passed by default, but you can specify some here.
    #
    #ssh_args   -p 22
    # Default arguments for the "du" program (for disk space reporting).
    # The GNU version of "du" is preferred. See the man page for more details.
    # If your version of "du" doesn't support the -h flag, try -k flag instead.
    #
    #du_args    -csh
    # If this is enabled, rsync won't span filesystem partitions within a
    # backup point. This essentially passes the -x option to rsync.
    # The default is 0 (off).
    #
    #one_fs     0
    # The include and exclude parameters, if enabled, simply get passed directly
    # to rsync. If you have multiple include/exclude patterns, put each one on a
    # separate line. Please look up the --include and --exclude options in the
    # rsync man page for more details on how to specify file name patterns. 
    # 
    #include    ???
    #include    ???
    #exclude    ???
    #exclude    ???
    # The include_file and exclude_file parameters, if enabled, simply get
    # passed directly to rsync. Please look up the --include-from and
    # --exclude-from options in the rsync man page for more details.
    #
    #include_file   /path/to/include/file
    #exclude_file   /path/to/exclude/file
    # If your version of rsync supports --link-dest, consider enable this.
    # This is the best way to support special files (FIFOs, etc) cross-platform.
    # The default is 0 (off).
    #
    #link_dest  0
    # When sync_first is enabled, it changes the default behaviour of rsnapshot.
    # Normally, when rsnapshot is called with its lowest interval
    # (i.e.: "rsnapshot hourly"), it will sync files AND rotate the lowest
    # intervals. With sync_first enabled, "rsnapshot sync" handles the file sync,
    # and all interval calls simply rotate files. See the man page for more
    # details. The default is 0 (off).
    #
    #sync_first 0
    # If enabled, rsnapshot will move the oldest directory for each interval
    # to [interval_name].delete, then it will remove the lockfile and delete
    # that directory just before it exits. The default is 0 (off).
    #
    #use_lazy_deletes   0
    ###############################
    ### BACKUP POINTS / SCRIPTS ###
    ###############################
    # LOCALHOST
    #backup /etc/       localhost/
    #backup /usr/local/ localhost/
    #backup /var/log/rsnapshot      localhost/
    #backup /etc/passwd localhost/
    #backup /home/foo/My Documents/     localhost/
    #backup /foo/bar/   localhost/  one_fs=1, rsync_short_args=-urltvpog
    #backup_script      /usr/local/bin/backup_pgsql.sh  localhost/postgres/
    # EXAMPLE.COM
    backup_script   /home/username/ancestortree/antreedbbackup.sh   mysql/
    backup  username@ancestortree.net:/home/username/pgv423/colbert.ancestortree.net/index/ ancestortree/
    backup  username@ancestortree.net:/home/username/pgv423/colbert.ancestortree.net/media/ ancestortree/
    backup  username@ancestortree.net:/home/username/pgv423/colbert.ancestortree.net/config.php ancestortree/
    #backup root@example.com:/home/ example.com/    +rsync_long_args=--bwlimit=16,exclude=core
    #backup root@example.com:/etc/  example.com/    exclude=mtab,exclude=core
    #backup_script  ssh root@example.com "mysqldump -A > /var/db/dump/mysql.sql"
    #backup root@example.com:/var/db/dump/  example.com/
    #backup_script  /bin/date "+ backup of example.com ended at %c" unused2
    # CVS.SOURCEFORGE.NET
    #backup_script  /usr/local/bin/backup_rsnapshot_cvsroot.sh  rsnapshot.cvs.sourceforge.net/
    # RSYNC.SAMBA.ORG
    #backup rsync://rsync.samba.org/rsyncftp/   rsync.samba.org/rsyncftp/
    

    crontab (note that for Ubuntu (only?) this is the sudo crontab - but strangely root crontab format is different):

    # m h  dom mon dow   command
    33 */6 * * * /usr/bin/rsnapshot hourly >> /dev/null
    44 03  * * * /usr/bin/rsnapshot daily >> /dev/null
    22 03  * * 1 /usr/bin/rsnapshot weekly >> /dev/null
    33 02  8 * * /usr/bin/rsnapshot monthly >> /dev/null

    antreedbbackup.sh:

    #!/bin/bash

    ssh username@ancestortree.net "mysqldump -opt -user=username -password=********** -host=myhostat.ancestortree.net colbert_pgv | gzip -9 > backup/colbert_pgv.sql.gz"

    Watch out for long lines that have been broken.

    George

     
  • Pilgrims

    Pilgrims - 2010-07-18

    Thanks George :)

    It will take me a while to process all that, but I appreciate having something positive to focus on.

    As an interim measure, this weekend, I implemented mysqldumper to take a weekly off-site backup of the db (there is a daily server-side backup too).

     

Log in to post a comment.