Как написать BACKUP
Если нет, то получаем список таблиц про помощи
потом при помощи
получаем все поля, и формируем CREATE. (Аналогично с индексами)
Потом уже выбираем все данные из таблиц и форумируем INSERT'ы.
Получается большой файл с SQL запросами, выполнив которые ты получишь исходную базу данных.
Если есть возможность, то не мучайся, и используй mysqldump
Засунутая в system
Формат файлак - какой душе угодно, можно CSV, а можно и SQL инструкции в стиле mysqldump
Этож просто. Делаешь SELECT * из этих трех таблиц и пишешь в файл.
Формат файлак - какой душе угодно, можно CSV, а можно и SQL инструкции в стиле mysqldump
Неакадемичный способ предложен ;)=
Допустим в таблицах содержиться очень много данных, и машина - дохлая. Следовательно имеем очень большое время исполнения скрипта. И здесь возникают траблы с корректным завершением работы программы.
Короче я к тому, что не корректно указаны условия задачи. А самое простое решение - не всегда идеальное ;)=
Неакадемичный способ предложен ;)=
Допустим в таблицах содержиться очень много данных, и машина - дохлая. Следовательно имеем очень большое время исполнения скрипта. И здесь возникают траблы с корректным завершением работы программы.
В то же время может не быть прав на запуск mysqldump
Этож просто. Делаешь SELECT * из этих трех таблиц и пишешь в файл.
Формат файлак - какой душе угодно, можно CSV, а можно и SQL инструкции в стиле mysqldump
Зная PHP на уровне Hello World, я позволил себе написать прям в вебе - вот такой код:
<?php
$host = 'localhost';
$user = 'user';
$pass = 'pass';
$data = 'test';
$db = mysql_connect($host, $user, $pass);
mysql_select_db($data, $db);
mysql_query("SELECT FROM * site_documents");
mysql_query("SELECT FROM * site_news");
mysql_query("SELECT FROM * site_users");
Вопрос: что делать дальше:???:
$host = 'localhost';
$user = 'user';
$pass = 'pass';
$data = 'test';
system("mysqldump --user=$user --password=$pass --host=$host $data >file.sql");
?>
Если не поможет, тогда примерно правильно написал. Осталось только все данные записать в файлы.
Вообще-то это ни к чему. Все SQL-запросы сохраняются в логе MySQL. Я в свое время перепахал толстенный томик по MySQL, так там писали, что там все настолько адаптировано под юзера, что этот файл можно слазу использовать как SQL-файл. Вопрос в другом - как часто его чистит админ-хостер, дает ли доступ?
Нифига, не пойдет. Этот файл есть только в дебаг режиме. А mysql обычно в нем не работает.
У меня, например до 40 запросов в секунду. Прикинь что в логе будет :)
Сначала попробуй так:
$host = 'localhost';
$user = 'user';
$pass = 'pass';
$data = 'test';
system("mysqldump --user=$user --password=$pass --host=$host $data >file.sql");
?>
Если не поможет, тогда примерно правильно написал. Осталось только все данные записать в файлы.
Так вот я и говорю - что делать дальше как выбранные таблицы записать в файл на сервере, всё что мне нужно так это сам код. Да и ввидемо нужно ввести ещё одну переменную типа $path = "$DOCUMENT_ROOT.'/reserve/'";
C созданным мной кодом помогите связать всё это воедино ;)
Так вот я и говорю - что делать дальше как выбранные таблицы записать в файл на сервере, всё что мне нужно так это сам код. Да и ввидемо нужно ввести ещё одну переменную типа $path = "$DOCUMENT_ROOT.'/reserve/'";
C созданным мной кодом помогите связать всё это воедино ;)
RTFM.
http://www.codenet.ru/db/mysql/intro.php
http://www.codenet.ru/db/mysql/commands.php#Mysqldump
Нифига, не пойдет. Этот файл есть только в дебаг режиме. А mysql обычно в нем не работает.
У меня, например до 40 запросов в секунду. Прикинь что в логе будет :)
... М-да... это верно.
А что мешает физический BackUp БД делать? Практически у всех хостеров можно попросить это сделать, если уже нет доступа через FTP. Тем блоее структура БД MySQL - это папка, в которой хранятся файлы-таблицы. ВСЕ!
Если BackUp делать раз-два в месяц, то этот вариант оптимальный, по моему мнению.
Так вот я и говорю - что делать дальше как выбранные таблицы записать в файл на сервере, всё что мне нужно так это сам код. Да и ввидемо нужно ввести ещё одну переменную типа $path = "$DOCUMENT_ROOT.'/reserve/'";
C созданным мной кодом помогите связать всё это воедино ;)
Вобщем не обязательно вводить.
Ты же перенаправляешь поток в файл, в данном случае file.sql м.б. задан как /absolute/path2file/some_timestamp.ext
А что мешает физический BackUp БД делать?
Гы :) тут не я вопрос задал :) У меня все бекапится как надо :)
Гы :) тут не я вопрос задал :) У меня все бекапится как надо :)
:D :D :D
Да, ребята! Зачем же, действительно, в той же системе делать бэкап в соседнюю БД, если, скорее всего, если что-то рухнет, то рухнет и все остальное (я про тот случай, когда БД не подлежит восстановлению)! причем на это тратить уйму времени и нервов, возможно даже не пускать юзверей юзать эту базу при самом бэкапе!
В общем, мне кажется, все варианты здесь рассмотрены были (ну разве что создания стороннего сервака на независимом от данного сервере), и в итоге было решено, что бэкап либо надо делать физически (быстрее всего, надежнее всего, быстрее всего при восстановлении) либо дать об этом позоботиться владельцу сервера.
Уважаемый SystemRoot, вопрос решен %)
:D :D :D
Да, ребята! Зачем же, действительно, в той же системе делать бэкап в соседнюю БД, если, скорее всего, если что-то рухнет, то рухнет и все остальное (я про тот случай, когда БД не подлежит восстановлению)! причем на это тратить уйму времени и нервов, возможно даже не пускать юзверей юзать эту базу при самом бэкапе!
В общем, мне кажется, все варианты здесь рассмотрены были (ну разве что создания стороннего сервака на независимом от данного сервере), и в итоге было решено, что бэкап либо надо делать физически (быстрее всего, надежнее всего, быстрее всего при восстановлении) либо дать об этом позоботиться владельцу сервера.
Уважаемый SystemRoot, вопрос решен %)
Не решён:x Эт же форум веб программеров, а я ответа не получил, тут все такие крутые, а толком нифига не сказали mysqldump - не канает он создаёт файл на сервере и там пустота X)-
Всё это делается для усовершенствования движка сайта кто ни хочет помогать пусть не заходит вообще в пост Dolonet - вопрос закрыть могу только "Я"!!! Вот основной код:. Мне нужен только PHP который и выполнит сбор всех ячеек и контента в базе
<?php
include($_SERVER["DOCUMENT_ROOT"]."/engine/config.php");
include($core_path."include/db.php");
/*Основные переменные*/
$path = $server_root."reserve/";
$date = date('d.m.Y');
$fname = "Backup";
$tables = "site_documents, site_news, site_users";
/*Соединение с базой*/
ConnectDB();
/*Операция создания резерва базы*/
$data = mysql_query("SELECT * FROM $tables");
/*Вот сюда помощь!!!*/
/*Сохранение файла*/
$fw = fopen("$path$data$fname-$date.sql","w+");
fputs($fw,$data,strlen($data));
mysql_close();
?>
Не решён:x Эт же форум веб программеров, а я ответа не получил, тут все такие крутые, а толком нифига не сказали mysqldump - не канает он создаёт файл на сервере и там пустота X)-
Всё это делается для усовершенствования движка сайта кто ни хочет помогать пусть не заходит вообще в пост Dolonet - вопрос закрыть могу только "Я"!!! Вот основной код:. Мне нужен только PHP который и выполнит сбор всех ячеек и контента в базе
Во-первых, я себя не считаю "крутым" - этот термин не для меня и не здесь. Я лишь торчу все выходные и вечера будней, чтобы помочь таким как ты и как я.
Теперь по проблеме. Ваианта 2:
1. Берешь и просишь хостера дать доступ на чтение и путь к папке MySQL. Полдела сделано. Если тебе надо взять несколько таблиц, берешь эти файлы (весь путь известен - путь к MySQL папке, название БД (тоже папка) и названия таблиц (название файла. По-моему, без расширения). Нельзя забывать про регистры!!. Копируешь файлы туда, где есть доступ на запись. Этот вариант может не прокатить, если админ не согласится давать прав.
2. В твой код на пустое место ставишь цикл. Я бы если таблицы не большие сделал бы преобразование одного символа в 2, тогда читал бы посторчно и располагал значения полей через знак табуляции, а записи через знак возврат каретки. Тогда увеличивается объем в 2 раза, функция выполняется куда дольше, чем копирование одного файла, приходится создавать еще один файл, надо делать функцию обратной обработки, которая тоже не быстрая.
Все....
Во-первых, я себя не считаю "крутым" - этот термин не для меня и не здесь. Я лишь торчу все выходные и вечера будней, чтобы помочь таким как ты и как я.
Теперь по проблеме. Ваианта 2:
1. Берешь и просишь хостера дать доступ на чтение и путь к папке MySQL. Полдела сделано. Если тебе надо взять несколько таблиц, берешь эти файлы (весь путь известен - путь к MySQL папке, название БД (тоже папка) и названия таблиц (название файла. По-моему, без расширения). Нельзя забывать про регистры!!. Копируешь файлы туда, где есть доступ на запись. Этот вариант может не прокатить, если админ не согласится давать прав.
2. В твой код на пустое место ставишь цикл. Я бы если таблицы не большие сделал бы преобразование одного символа в 2, тогда читал бы посторчно и располагал значения полей через знак табуляции, а записи через знак возврат каретки. Тогда увеличивается объем в 2 раза, функция выполняется куда дольше, чем копирование одного файла, приходится создавать еще один файл, надо делать функцию обратной обработки, которая тоже не быстрая.
Все....
Блин, мы как на разных языках говорим :devil: Понятия класс и ещё всякие заморочки мне ничего ни говорят, если бы я знал как эт зделать, то ни писал ламерские вопросы в форуме, я же на протяжение всего времени прошу дать мне сам код, а ни советы и всё такое. Мне нужно это:
mysql_query("SELECT * FROM $tables");
и пошло поехало...
напишите кто нить хороший человек что писать реально дальше :angel:
Блин, мы как на разных языках говорим :devil: Понятия класс и ещё всякие заморочки мне ничего ни говорят, если бы я знал как эт зделать, то ни писал ламерские вопросы в форуме, я же на протяжение всего времени прошу дать мне сам код, а ни советы и всё такое. Мне нужно это:
mysql_query("SELECT * FROM $tables");
и пошло поехало...
напишите кто нить хороший человек что писать реально дальше :angel:
если по шагам, то сейчас пиши письмо своему хостеру:
"Драсти, не могли бы Вы мне подсказать, доступны ли мне для чтения файлы БД MySQL? Если нет, то могли бы Вы открыть этот доступ? Общаю быть милым мальчиком, понимаете ли, я же для вас беспокоюсь, чтобы бэкап был у меня, чтобы не доставал Вас и все такое.
И последнее - подскажите плз путь к папке, где содержатся папки Баз Данных, чтобы я их оккуратно юзал из PHP."
Кто тебе такой умный сказал, что тут можно обойтись только одним случаем, который ты написал? Это программирование, и тут есть масса вариантов. Рекомендую делать через физические файлы. Надежнее, проще и быстрее ничего не придумать!
Ты вообще представляешь что ты выберешь запросом
SELECT * FROM site_documents, site_news, site_users ??? Читай для начала доки по SQL.
Все что написано ниже, писалось прямо тут и может не работать.
include($_SERVER["DOCUMENT_ROOT"]."/engine/config.php");
include($core_path."include/db.php");
/*Основные переменные*/
$path = $server_root."reserve/";
$date = date('d.m.Y');
$fname = "Backup";
$tables = "site_documents, site_news, site_users";
/*Соединение с базой*/
ConnectDB();
/*Сохранение файла*/
$fw = fopen($path.$data.$fname."-".$date.".sql","w+");
$a_tables=explode(",",$tables);
while (list ($key, $tname) = each ($a_tables)) {
$r=mysql_query("SELECT * FROM ".trim($tname));
while ($a=mysql_fetch_array($r)) {
fputs($fw,"INSERT INTO ".trim($tname)." SET ");
while (list ($key, $val) = each ($a)) {
fputs($fw,$key."='".AddSlashes($val)."'");
}
fputs($fw,"\n");
}
}
mysql_close();
?>
P.S. Никогда не пиши переменные внутри строк. Это сильно замедляет выполнение PHP скриптов. Не print "$a+$b=$c"; а print $a."+".$b."=".$c;
А вот это зря.
mysqldump не так просто придуман. Я сам пробовал бекапится разными способами.
Вот смотри. Во время инкрементального бекапа все измененые файлы сохраняются и придется при малейшем измении сохранять всю таблицу.
А тут делам mysqldump, потом прогоняем полученные файл с помощью утилиты diff - и получаемь лишь отличие текущего от предыдущего. Немерянная экономия места (для бекапов это актуально)
А еще лучше прикручиываем базы к cvs и делаем просто "cvs commit". Потом просто говорим дату, до которой надо откатиться и получаемь нужный файл.
Если mysqldump создает пустой файл, то это уже неплохо. Поразбирайся, он создаст и непустой.
Ты вообще представляешь что ты выберешь запросом
SELECT * FROM site_documents, site_news, site_users ??? Читай для начала доки по SQL.
Все что написано ниже, писалось прямо тут и может не работать.
include($_SERVER["DOCUMENT_ROOT"]."/engine/config.php");
include($core_path."include/db.php");
/*Основные переменные*/
$path = $server_root."reserve/";
$date = date('d.m.Y');
$fname = "Backup";
$tables = "site_documents, site_news, site_users";
/*Соединение с базой*/
ConnectDB();
/*Сохранение файла*/
$fw = fopen($path.$data.$fname."-".$date.".sql","w+");
$a_tables=explode(",",$tables);
while (list ($key, $tname) = each ($a_tables)) {
$r=mysql_query("SELECT * FROM ".trim($tname));
while ($a=mysql_fetch_array($r)) {
fputs($fw,"INSERT INTO ".trim($tname)." SET ");
while (list ($key, $val) = each ($a)) {
fputs($fw,$key."='".AddSlashes($val)."'");
}
fputs($fw,"\n");
}
}
mysql_close();
?>
P.S. Никогда не пиши переменные внутри строк. Это сильно замедляет выполнение PHP скриптов. Не print "$a+$b=$c"; а print $a."+".$b."=".$c;
mike - спасиб тебе огромное, он теперь бэкапит, только одно, но, систаксис для SQL ни тот при восстановление базы пишет error systax и всё такое, ну с этой траблой думаю справлюсь, ещё раз всех благодарю, за ваше терпение и нервы...
Вот код без всяких ошибок :D
include($_SERVER["DOCUMENT_ROOT"]."/engine/config.php");
include($core_path."include/db.php");
/*Основные переменные*/
$path = $server_root."reserve/";
$date = date('d.m.Y');
$fname = "Backup";
$tables = "site_users";
/*Соединение с базой*/
ConnectDB();
/*Сохранение файла*/
$fw = fopen($path.$fname."-".$date.".sql","w+");
$a_tables=explode(",",$tables);
while (list ($key, $tname) = each ($a_tables)) {
$r=mysql_query("SELECT * FROM ".trim($tname));
while ($a=mysql_fetch_array($r)) {
fputs($fw,"INSERT INTO ".trim($tname)." SET ");
while (list ($key, $val) = each ($a)) {
fputs($fw,$key."=".AddSlashes($val)."'");
}
fputs($fw,"\n");
}
}
mysql_close();
?>
Он сохраняет файл с таким синтексисом -
INSERT INTO site_users SET 0=Root'login=Root'1=055686da60eab4d8f8edc76d1b837ab6'password=055686da60eab4d8f8edc76d1b837ab6'2=admin'access=admin'
, а нужно:
INSERT INTO `site_users` (`login`, `password`, `access`) VALUES ('Root', 'b14d8f8edc76d1b837ab690bf60eabda', 'admin'),
вопрос :???: как привести к токому виду ,помогите закончить :angel:
нужно:
INSERT INTO `site_users` (`login`, `password`, `access`) VALUES ('Root', 'b14d8f8edc76d1b837ab690bf60eabda', 'admin'),
вопрос :???: как привести к токому виду ,помогите закончить :angel:
Руки то у тебя есть?? Уже все разжевали, в ротик положили, осталось только проглотить !!!!
А чем тебе не нравится вариант:
INSERT INTO site_users SET login='Root', password='055686da60eab4d8f8edc76d1b837ab6', access='admin'; ???
вот исправленный код:
include($_SERVER["DOCUMENT_ROOT"]."/engine/config.php");
include($core_path."include/db.php");
/*Основные переменные*/
$path = $server_root."reserve/";
$date = date('d.m.Y');
$fname = "Backup";
$tables = "site_users";
/*Соединение с базой*/
ConnectDB();
/*Сохранение файла*/
$fw = fopen($path.$fname."-".$date.".sql","w+");
$a_tables=explode(",",$tables);
while (list ($key, $tname) = each ($a_tables)) {
$r=mysql_query("SELECT * FROM ".trim($tname));
while ($a=mysql_fetch_array($r)) {
fputs($fw,"INSERT INTO ".trim($tname)." SET ");
$str="";
while (list ($key, $val) = each ($a)) {
if (!is_numeric($key)) {
$str.=$key."='".AddSlashes($val)."', ");
}
}
fputs($fw,substr($str,0,-2)."\n");
}
}
mysql_close();
?>
Руки то у тебя есть?? Уже все разжевали, в ротик положили, осталось только проглотить !!!!
А чем тебе не нравится вариант:
INSERT INTO site_users SET login='Root', password='055686da60eab4d8f8edc76d1b837ab6', access='admin'; ???
вот исправленный код:
include($_SERVER["DOCUMENT_ROOT"]."/engine/config.php");
include($core_path."include/db.php");
/*Основные переменные*/
$path = $server_root."reserve/";
$date = date('d.m.Y');
$fname = "Backup";
$tables = "site_users";
/*Соединение с базой*/
ConnectDB();
/*Сохранение файла*/
$fw = fopen($path.$fname."-".$date.".sql","w+");
$a_tables=explode(",",$tables);
while (list ($key, $tname) = each ($a_tables)) {
$r=mysql_query("SELECT * FROM ".trim($tname));
while ($a=mysql_fetch_array($r)) {
fputs($fw,"INSERT INTO ".trim($tname)." SET ");
$str="";
while (list ($key, $val) = each ($a)) {
if (!is_numeric($key)) {
$str.=$key."='".AddSlashes($val)."', ");
}
}
fputs($fw,substr($str,0,-2)."\n");
}
}
mysql_close();
?>
Руки то есть :D , а знаний в PHP пока не хватает :( Я щас занимаюсь как раз его изучением, погодите... через пол годика, мож раньше будем вместе советы довать :D Код проверю чуть позже, о результате сообщю...