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

  • Автор темы Автор темы runner
  • Дата начала Дата начала

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.

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

Заранее спасибо всем ответившим...
 
runner,
права должны быть у пользователя, от которого запускается MySQL, так как вылетает не на первом запросе (SHOW TABLES, который кстати корректно отрабатывается), а на втором, который пишет в файл
 
$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)? Должны ли быть созданы эти файлы в папке или они должны быть созданы в процессе выполнения кода? Или права на выполнение запросы к базе(они есть)?
 
runner
Вы понимаете, что делет Ваш второй запрос? он пишет в файл то, что выбирается из таблицы. кто пишет? mysqld. mysqld запущен от какого-то пользователя, скорее всего mysql, которому для записи куда бы то ни было в файлуху нужны права. Выходит, что права нужны на папку, в которой создаются текстовики бекапа для юзара mysql.

идея писать бекап относительно рабочей директории скрипта это дурацкая идея, так как из апача и из крона это будет разная директория, прописывайте абсолютный путь. потому что я не уверен, что мускл пытается писать туда, куда Вы ожидаете кроме всего
 
Автор оригинала: 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("./"); покажет абсолютный путь.
И все равно не работает...

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

Спасибо...
 
runner
наверное нет прав на FILE_priv, что показывает
SHOW GRANTS FOR CURRENT_USER; есть там FILE или нет?
 
Всем спасибо...

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

-~{}~ 18.12.07 22:34:

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

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


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


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

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

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