Наверняка, каждый программист хоть раз задумывался о сохранности его кода и базы данных. И наверняка, каждый придумывал какие-то изощренные способы резервирования данных. С исходными кодами и файлами дело обстоит довольно-таки просто — достаточно иметь одну резервную копию у себя на компьютере. А вот с бекапами базы данных немного сложней, поскольку отделаться одним бекапом не получится из-за постоянного обновления базы данных. Но и каждый день делать руками копию бд тоже не очень удобно. И в этой статье я и хочу рассказать о том, как можно автоматизировать процесс создания резервной копии базы данных. Все просто, для этого там необходимо написать один скрипт и установить его на выполнение на 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].";nn";
// перебираем все записи в таблице
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);
?>
0 3 0
Без комментариев...