![](https://secure.gravatar.com/avatar/85f86af6c706009c67c3aa7ccfb92d93.jpg?s=120&d=mm&r=g)
For what its worth I have written a small php script to provide a 7 day rolling backup of my observium server to an external server and to send a confirmation email when backup is complete:
#!/usr/bin/env php
<?php
// Script to backup Observium data created by Terry Stone on 3rd. May 2021
include "config.php";
// Collect database credentials $sql_username = $config['db_user']; $sql_userpass = $config['db_pass'];
// FTP server credentials $ftp_server = '[ftp server name]'; $ftp_username = '[ftp server username]'; $ftp_userpass = '[ftp server password]';
// Email credentials $mail_to = $config['email']['default']; $mail_header = 'From: '.$config['email']['from'] . "\r\n" . 'X-Mailer: PHP/' . phpversion(); $mail_subject = "Observium Server Backup"; $mail_message = "Observium server backups sent to ".$ftp_server." on ".date("l jS F Y").":\n\n";
// Files to backup $file[0]= "observium-rrd.tar.gz"; $file[1]= "observium-dump.sql"; $file[2]= "config.php";
// Prefix filename to be sent to FTP server with day of the week $counter=0; while ($counter < count($file)) { $backupfile[$counter]=date("N").$file[$counter]; $counter++; }
// Assemble observium backup fils exec('tar zcvf backup/'.$file[0].' rrd'); exec('/usr/bin/mysqldump -u observium --user='.$sql_username.' --password='.$sql_userpass.' --databases observium --add-drop-table --extended-insert > backup/'.$file[1]); exec('cp config.php backup/'.$file[2]);
// Connect and login to FTP server $ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server"); $login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);
// Change to passive mode ftp_pasv($ftp_conn,true);
// Upload files to FTP server $counter=0; while ($counter < count($file)) { if (ftp_put($ftp_conn, $backupfile[$counter], "backup/".$file[$counter],FTP_BINARY)) { exec('cp backup/'.$file[$counter].' backup/'.$backupfile[$counter]); $status = date("H:i:s")." Successfully backed up ".$file[$counter]." to ".$backupfile[$counter]."\n"; } else { $status = date("H:i:s")." Error backing up ".$file[$counter]." to ".$backupfile[$counter]."\n"; } $mail_message = $mail_message.$status; $counter++; } // Close FTP connection ftp_close($ftp_conn);
// Add final line to message body $mail_message=$mail_message."\nPlease do not reply to this message, mail account is send only.\n";
// Send Completion message mail($mail_to,$mail_subject,$mail_message,$mail_header);
?>
It is set to run nightly with this Cron Job:
# Run nightly backup and send files to offshore FTP server 0 02 * * * root cd /opt/observium && php observiumbackup.php
The backups are also held on the Observium Server in /opt/observium/backups. You need to make sure the backup files have the correct permissions.
Hope this will help someone. An observium server that has run for years holds a very large amount of valuable historical data and servers can fail so its good to have that data in a safe place!
Terry Stone.