К тому же все вышесказанное нужно автоматизировать с периодичностью раз в сутки. Как быть, если подручными средствами являются лишь возможности PHP?
Для реализации данных задач необходимы:
начальные знания PHP;
одна элементарная команда MySQL (show databases;);
системные команды архивации(/bin/tar -cjf ...) и создания дампа MySQL (mysqldump -u...)
и… все!
Код реализации данной задачи ниже:
<?php
$servername = 'localhost'; // сервер базы данных
$username = 'username'; // пользователь
$password = 'password'; // пароль
$projects_path = '/home/username/public_html/projects'; // Путь к файлам, которые НУЖНО заархивировать
$backup_path = '/home/username/public_html/backup'; // Путь к директории, где мы будем хранить архивы
//--------------------------
// каждый созданный архив будет иметь имя, состоящее из текущей даты
$date = date("d-m-Y");
// получение массива баз данных (сама функция - ниже)
$db_names_array = get_db_names($servername,$username,$password);
// в этом цикле мы создаем бекапы всех баз данных, и переносим их в $projects_path
foreach ($db_names_array as &$db_name) {
exec("mysqldump -u ".$username." -p".$password." -h ".$servername." ".$db_name." > ".$projects_path."/dump-".$db_name."-".$date.".sql");
}
// создаем основной архив с файлам и бекапами баз данных
exec("/bin/tar -cjf ".escapeshellarg($backup_path."/backup-".$date.".tar.bz2")." ".escapeshellarg($projects_path));
// Это последнее действие. В этом цикле мы удаляем из $projects_path все бекапы баз данных (они ведь нам уже не нужны).
foreach ($db_names_array as &$db_name) {
exec("rm ".$projects_path."/dump-".$db_name."-".$date.".sql");
}
// --------------- Функция получения имен всех баз данных -----------------------
function get_db_names($servername,$username,$password){
$db = mysql_connect($servername,$username,$password) or die("Can't establish the db connection!");
$query = "show databases;";
$result = mysql_query($query);
mysql_close();