Проблема с переносом кода на сервер...

runner

Новичок
Проблема с переносом кода на сервер...

Доброго времени суток...

Возникла такая проблема:
Вот Это код


PHP:
echo 'Сделаны копии таблиц:<br><br>';
$dir1=getCWD().'\\';
$dir=str_replace('\\','/',$dir1);


$k=0;
$q="SHOW TABLES IN `sg`";
$res=mysql_query($q);
while($row=mysql_fetch_row($res))
{
$d=$dir."back/".$row['0'].".txt";
//$d="./".$row['0'].".txt";

$q2="SELECT * FROM `".$row['0']."` INTO OUTFILE '".$d."' FIELDS TERMINATED BY ';' ENCLOSED BY '' LINES TERMINATED BY '\r\n'";
echo $row['0'].'<br>';
$res2=mysql_query($q2) or die(mysql_error());
$k++;

}
echo '<br>Всего скопировано '.$k.' таблиц.';
возвращает вот такой ответ

Сделаны копии таблиц:

carts
Access denied for user '************'@'***********' (using password: YES)

В чем может быть дело? Куда мне закрыт доступ?

На папке в которую пишу права 777.

На локальном компе работает, а на серваке нет...

Заранее спасибо всем ответившим...
 

dimagolov

Новичок
runner,
права должны быть у пользователя, от которого запускается MySQL, так как вылетает не на первом запросе (SHOW TABLES, который кстати корректно отрабатывается), а на втором, который пишет в файл
 

runner

Новичок
$q="SHOW TABLES IN `sg`";
$res=mysql_query($q);

Вот в это кусочке кода доступ к базе разрешен
подтверждение этому

carts

перед

Access denied for user '************'@'***********' (using password: YES)


Может ли быть так, что в одном запрсе к базе все хорошо, а в следующем - запрещен доступ.(Входные данные одни и те же)

-~{}~ 18.12.07 00:38:

Автор оригинала: dimagolov
runner,
права должны быть у пользователя, от которого запускается MySQL, так как вылетает не на первом запросе (SHOW TABLES, который кстати корректно отрабатывается), а на втором, который пишет в файл
Права на запись в файл? или в папку(права 777)? Должны ли быть созданы эти файлы в папке или они должны быть созданы в процессе выполнения кода? Или права на выполнение запросы к базе(они есть)?
 

dimagolov

Новичок
runner
Вы понимаете, что делет Ваш второй запрос? он пишет в файл то, что выбирается из таблицы. кто пишет? mysqld. mysqld запущен от какого-то пользователя, скорее всего mysql, которому для записи куда бы то ни было в файлуху нужны права. Выходит, что права нужны на папку, в которой создаются текстовики бекапа для юзара mysql.

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

runner

Новичок
Автор оригинала: dimagolov
runner
Вы понимаете, что делет Ваш второй запрос? он пишет в файл то, что выбирается из таблицы. кто пишет? mysqld. mysqld запущен от какого-то пользователя, скорее всего mysql, которому для записи куда бы то ни было в файлуху нужны права. Выходит, что права нужны на папку, в которой создаются текстовики бекапа для юзара mysql.

идея писать бекап относительно рабочей директории скрипта это дурацкая идея, так как из апача и из крона это будет разная директория, прописывайте абсолютный путь. потому что я не уверен, что мускл пытается писать туда, куда Вы ожидаете кроме всего
PHP:
$dir=realpath("./");

echo $dir;


$k=0;
$q="SHOW TABLES IN `saitofn_univermag`";
$res=mysql_query($q);
while($row=mysql_fetch_row($res))
{
$d=$dir."/back/".$row['0'].".txt";
//$d="./".$row['0'].".txt";

$q2="SELECT * FROM `".$row['0']."` INTO OUTFILE '".$d."' FIELDS TERMINATED BY ';' ENCLOSED BY '' LINES TERMINATED BY '\r\n'";
echo $row['0'].'<br>';
$res2=mysql_query($q2) or die(mysql_error());
$k++;

}
echo '<br>Всего скопировано '.$k.' таблиц.';

Насколько я не ошибаюсь $dir=realpath("./"); покажет абсолютный путь.
И все равно не работает...

Если я не прав, подскажите функцию...

Спасибо...
 

Gas

может по одной?
runner
наверное нет прав на FILE_priv, что показывает
SHOW GRANTS FOR CURRENT_USER; есть там FILE или нет?
 

runner

Новичок
Всем спасибо...

Оказывается на хосте у меня нет прав выполнять запросы типа
SELECT * INTO OUTFILE

-~{}~ 18.12.07 22:34:

В ответ на мой запрс включить эту возможность админ хостера выслал следующее:

если включить эту возможность, то каждый пользователь сможет как прочитать настройки сервера, так и стереть все базы на сервере простым переписанием файлов содержащие таблицы данных. Поэтому, в целях безопасности, функцию включить не можем.


Как Вы думаете на сколько правомерны эти действия и есть ли действительно такая возможность...


p.s.
Господа модераторы.
Понимаю что пост на уровне флуда, но хотельсь бы принять аргументированные меры либо не принимать их...

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

runner

Новичок
Автор оригинала: *****
а нафига тебе вообще селект аутфайл-то?
1. Неумею кроном
2. Нужно сделать опред. формат файла
3. Чтобы скачать на локальный комп(таблицу в несколько тысяч записей не просмотришь оперативно в нете)
4. Чтобы одинаково работало на любом компе, системе.

Я как то задавал вопрос пробекап средствами РНР на этом форуме...
 

FractalizeR

Новичок
А что такого сложного в бекапе баз данных средствами PHP? Вот PHPMyAdmin прекрасно все бекапит. Почему бы не пойти этим путем? Делаем на таблице SELECT, а потом скриптом выводим в файл INSERT запрос, который бы сформировал нам данные этой таблицы. Метаданные базы получить несложно.
 
Сверху