This set of scripts provide a framework for making backups using the PHP language.
It was developed and tested in Ubuntu using PHP 5.5.9 but it might work with lower versions. Because it uses pcntl_fork
, it does not run on Windows platforms.
It supports out of the box 6 kind of backups: ftp using wget
, mysql using mysqldump
, filesystem and individual directories using tar
, scp and postgresql.
- PHP 5.5.9 on *nix platform (it might work with lower PHP versions)
- the tar and bzip2 commands used by the directory and filesystem observers;
- the wget command used by the ftp observer;
- the mysqldump command used by the mysqldump observer;
- the scp and sshpass commands used by the ssh observer;
- the pg_dump command used by the psql observer;
- make the script executable:
chmod +x php-backup
- prepare the ini and the csv file
cp ftp_and_mysql.ini.dist ftp_and_mysql.ini
touch ftp_and_mysql
- add the ftp and mysql login information in your ftp_and_mysql file
- run the command:
./php-backup -i ftp_and_mysql.ini
This method iterates through a list of paths defined in a CSV file and it creates archives of each children directories (useful when you have all projects in the same directory).
cp filesystem.ini.dist filesystem.ini
and edit it to suit your needscp filesystem.dist filesystem
- edit
filesystem
and add the parent directories, each on a new line - run the script:
./php-backup -i filesystem.ini
This method reads a CSV file with records made out of a path to a project and the mysql info for that project.
cp directories_and_mysql.ini.dist directories_and_mysql.ini
and edit it to suit your needscp directories_and_mysql.dist directories_and_mysql
- edit
directories_and_mysql
and add the project directory and the mysql info on the same line - run the script:
./php-backup -i directories_and_mysql.ini
This method reads a CSV file with records made out of a path to a project and the postgresql info for that project.
cp directories_and_postgresql.ini.dist directories_and_postgresql.ini
and edit it to suit your needscp directories_and_postgresql.dist directories_and_postgresql
- edit
directories_and_postgresql
and add the project directory and the postgresql info on the same line - run the script:
./php-backup -i directories_and_postgresql.ini
This method reads a CSV file with records made out of ssh login info and the project path on the server together with the mysql info for that project.
cp ssh_and_mysql.ini.dist ssh_and_mysql.ini
and edit it to suit your needscp ssh_and_mysql.dist ssh_and_mysql
- edit
ssh_and_mysql
and add the ssh info and the mysql info on the same line - run the script:
./php-backup -i ssh_and_mysql.ini
Note: You can combine the observers in the ini file as you see fit.
-
create your namespace:
mkdir -p com/example/backup/observers
-
cd com/example/backup/observers
-
vi custom.class.php
-
paste this code:
<?php namespace Com\Example\Backup\Observers; class Custom implements \SplObserver { protected $name = 'Custom Observer'; public function update(\SplSubject $subject) { //do your thing here } }
You might want to extend the
Common
class which already has implemented anexecute
method:<?php namespace Com\Example\Backup\Observers; use Org\Impavidly\Backup\Observers\Common; class Custom extends Common { protected $name = 'Custom Observer'; public function update(\SplSubject $subject) { $command = "<some command>"; $status = $this->execute($subject, $command); return $status; } }
-
add the observer class to the "observers" section of the ini file:
custom = Com\Example\Backup\Observers\Custom
-
add your configuration in a new ini section, something like
[custom] name = value
accessible in the observer as
$subject->config['custom']['name']
-
run the command:
./php-backup -i <some_ini_file>.ini