PHP

Создание дампа бд

Дела, дела, дела... Но как обещал, сегодня расскажу Вам, как создать собственный бекап бд.

Есть конечно простой способ, но он не будет работать на обычных хостингах.
#PHP
<?php
// автор: DEATH
$name = date("d.m.Y_H-i-s");
exec("mysqldump --user=имя_пользователя_бд --password=пароль --default-character-set=кодировка_данных имя_базы > dump_$name.sql");


Следющий код будет у Вас работать везде
#PHP
<?php
$user='test'; // имя юзера
$pass='test'; // пароль от юзера
$base='bakler'; // имя базы
$db=mysql_connect('localhost',$user,$pass); // соединяемся с mysql сервером
if(!$db or !mysql_select_db($base,$db)){exit('Нет соединения с БД!');} // устанавливаем соединение с базой
mysql_query('SET NAMES utf8'); // устанавливаем кодировку соеднения

$dump=$optimize=array(); // создаем массывы, в которые будем вносить дамп и имена таблиц для оптимизации(дефрагментации)
$res=mysql_list_tables($base); // получаем список таблиц
while($table=mysql_fetch_row($res)){ // выводим их в цикле
$optimize[]=$table[0]; // дописываем имя таблицы для ее оптимизации
$columns=mysql_fetch_row(mysql_query('SHOW CREATE TABLE `'.$table[0].'`')); // получаем структуру таблицы
$dump[]=$columns[1].";\r\n-- -------------------------------\r\n"; // заносим структуру в наш дамп

// Дальше будем вытаскивать сами записи таблицы
$resz=mysql_query('SELECT * FROM `'.$table[0].'`'); // вытаскиваем данные из таблицы
for($i=0;$m=mysql_fetch_assoc($resz);$i++, $name=array(), $value=array()){ // выводим их в цикле, + создаем 2 массива, в которые будем заносить имена столбцов и их содержание

foreach($m as $k=>$v){ // выводим список список столбцов
$name[]=$k; // заносим в массив списк имен столбцов
$value[]=mysql_real_escape_string($v); // заносим в массив список значений массива(их содержание)
}

$dump[]="INSERT INTO `".$table[0]."` (`".implode('`, `',$name)."`) VALUES ('".implode("', '",$value)."');\r\n\r\n"; // составляем дамп записей и записываем его в наш существующий дамп


}
$dump[]="\r\n-- -------------------------------\r\n\r\n\r\n\r\n"; // добавляем строчку для красоты
}
############
mysql_query('OPTIMIZE TABLE `'.implode('`, `',$optimize).'`'); // оптимизируем таблицы
$name=date('d.m.Y_H-i-s').'.sql'; // задаем имя для файла с дампом
$dump=implode('',$dump); // соединяем все элементы массива
file_put_contents($name,$dump); // записываем дамп в файл

Вот таким вот несложным образом можно делать бекапы своей бд. Лично у меня каждый дамп залился обратно абсолютной копией.

ЗЫ. используйте всегда кодировку utf-8:

при соединении с бд
в кодировке самой бд
в кодировке таблицы
в кодировке каждого столбца

utf8_general_ci - регистроНЕзависимая кодировка
utf8_unicode - регистрозависимая кодировка

При выполнении этих пунктов, у Вас никогда не возникнут проблемы с "корявостью" букв при переносе бд.
Добавлено: 23 Августа 2013 12:09:14 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...