Автоматическое создание копии базы данных

Наверняка, каждый программист хоть раз задумывался о сохранности его кода и базы данных. И наверняка, каждый придумывал какие-то изощренные способы резервирования данных. С исходными кодами и файлами дело обстоит довольно-таки просто — достаточно иметь одну резервную копию у себя на компьютере. А вот с бекапами базы данных немного сложней, поскольку отделаться одним бекапом не получится из-за постоянного обновления базы данных. Но и каждый день делать руками копию бд тоже не очень удобно. И в этой статье я и хочу рассказать о том, как можно автоматизировать процесс создания резервной копии базы данных. Все просто, для этого там необходимо написать один скрипт и установить его на выполнение на cron. Обычно такие скрипты устанавливают на выполнение один раз в сутки — ночью.

Ниже приведет код скрипта, который нужно установить на cron, с подробными комментариями:

<?php
    // задаем побольше времени для выполнения скрипта
    set_time_limit(300);
    
    // ===>>>подключение к БД
	define("HOST", "");
	define("USER", "best_like");
	define("PASSWORD", "best_like");
	define("DB_NAME", "best_like");
	$db_connect = mysql_connect(HOST, USER, PASSWORD, TRUE); 
	mysql_selectdb(DB_NAME, $db_connect);
	mysql_set_charset('utf8');
    // <<<===

    // ===>>>Получаем список всех таблиц
    $tables = array(); 
    $result = mysql_query('SHOW TABLES');
    while($row = mysql_fetch_row($result)){
        $tables[] = $row[0];
    }
    // <<<===
    
    // создаем и открываем файл для записи дампа
    $file = fopen('db_backup_'.date('Y_m_d').'.sql','w+');
    // Перебираем все таблицы
    foreach($tables as $table){
        // все данные из таблицы
        $result = mysql_query('SELECT * FROM '.$table); 
        // количество записей в таблице
        $countFields = mysql_num_fields($result);
        // получаем sql-код для создания таблицы
        $createTable = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
        // записываем в переменную sql-код
        $sql.= "\n".$createTable[1].";\n\n";
        // перебираем все записи в таблице
        for ($i = 0; $i < $countFields; $i++){
            while($row = mysql_fetch_row($result)){
                // ===>>> записываем в переменную sql-код для записи данных
                $sql.= 'INSERT INTO '.$table.' VALUES(';
                // перебираем все поля таблицы
                for($f=0; $f<$countFields; $f++){
                    // экранируем спецсимволы (добавляем слеши)
                    $row[$f] = addslashes($row[$f]);
                    // если есть значение, то записываем его
                    if (isset($row[$f])) {
                        $sql.= '"'.$row[$f].'"' ; 
                    }else{
                        $sql.= '""'; 
                    }
                    // если поле не последнее добавляем запятую
                    if ($f<($countFields-1)) {
                        $sql.= ','; 
                    }
                }
                $sql.= ");\n";
                // <<<===
                // записываем в файл, то что скопилось в переменной
                fwrite($file, $sql);
                // очищаем переменную
                $sql = "";
            }
        }
        // делаем красиво (отступ)
        $sql.="\n";
    } 
    // закрываем и сохраняем файл
    fclose($file); 
?>
Рассказать друзьям:


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*