SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.03.2011 15:21:17

MaxNev
Участник
Зарегистрирован: 24.03.2011
Сообщений: 7

Посоветуйте как скопировать таблицу из одной базы в другую.

Здравствуйте. Не могу понять как лучше, есть два сайта на одном хостинге, разные базы данных, но на одном сервере и один MySQL пользователь. Иногда один сайт передает другому таблицу (на одном актуальная информация, а другой с ним сверяется).
Если сделать select из одной, а потом циклом insert into ... хостинг говорит что скрипт слишком долго работает. Запрос типа "Insert into $DB1.$tableName select * from $DB2.$tableName" не работает, потому что сервер не дает (не пойму почему) обратится к таблице имя_базы.имя_таблицы (написал обращение в тех. поддержку, уже сутки молчат).
  Посоветуйте как лучше это сделать. Может есть другие нормальные способы или только эти заставить работать???.

Неактивен

 

#2 24.03.2011 15:32:40

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Посоветуйте как скопировать таблицу из одной базы в другую.

Здравствуйте.

MaxNev написал:

Если сделать select из одной, а потом циклом insert into ... хостинг говорит что скрипт слишком долго работает.

Попробуйте в файле .htaccess в той директории, где находится ваш php-скрипт (я так понял, у Вас на хостинге есть php?) добавить (или модифицировать ) строку
php_flag max_execution_time 30 (или сколько там указано).
Попробуйте побольше значение поставить.

MaxNev написал:

Запрос типа "Insert into $DB1.$tableName select * from $DB2.$tableName" не работает, потому что сервер не дает (не пойму почему) обратится к таблице имя_базы.имя_таблицы

А что значит "сервер не даёт"? Что сервер при этом пишет?

MaxNev написал:

Посоветуйте как лучше это сделать. Может есть другие нормальные способы или только эти заставить работать???.

Если у Вас есть ssh-доступ к Вашему акканту, по я бы посоветовал попробовать через mysqldump/mysqlimport.

Отредактированно deadka (24.03.2011 15:45:50)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 24.03.2011 15:52:26

MaxNev
Участник
Зарегистрирован: 24.03.2011
Сообщений: 7

Re: Посоветуйте как скопировать таблицу из одной базы в другую.

По поводу дампа, довольно часто надо делать такую операцию, поэтому в ручную сложновато (сейчас так и делаем). По поводу время выполнения скрипта: да конечно полноценный хостинг с php, ssh, ... (ru-center), попробую время увеличить (сразу как то не подумал), я пробовал делать в несколько шагов, еще одна проблема:

select * ... //выбираем все

$query="insert into ... values ("; // начинаем собирать запрос

while {
$query.=...  // Добавляю значения
}
...
// Выполняю запрос

Проблема ,как мне показалось, в том что в некоторых полях таблицы хранится html - код.

По поводу Insert into $DB1.$tableName select * from $DB2.$tableName, щас пособираю ошибки.

Неактивен

 

#4 24.03.2011 16:12:10

MaxNev
Участник
Зарегистрирован: 24.03.2011
Сообщений: 7

Re: Посоветуйте как скопировать таблицу из одной базы в другую.

Я уже пытался как можно упростить скрипт, что бы найти ошибку.
Сократил до такого срипта:
<?
  $WorkDB="название_первой_базы";
  $SaveDB="название_второй_базы";
  mysql_select_db($SaveDB); //соединение установленно выше.
  $res = mysql_query('select * from $SaveDB.Cities') or die(mysql_error());
    //Если вместо $SaveDB.Cities написать просто название таблицы (Cities) то все работает.
while ($row = mysql_fetch_assoc($res)) {
    echo $row['CityName']."<br />";
}
получаю mysql_error()=SELECT command denied to user 'имя_пользователя'@'ip_сервера' for table 'Cities'
Права у пользователя на обе базы чтение, изменение и создание.

Отредактированно MaxNev (24.03.2011 16:15:34)

Неактивен

 

#5 24.03.2011 16:31:51

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Посоветуйте как скопировать таблицу из одной базы в другую.

MaxNev написал:

Проблема ,как мне показалось, в том что в некоторых полях таблицы хранится html - код.

Трудно судить в чем ошибка, поскольку Вы не привели сам текст запроса, который сервер не хочет выполнять. Ну и show create table приведите за компанию smile.

Касательно переноса - можно воспользоваться таким читерством - перенести таблицу в цикле по кусочкам. То есть выбирать и вставлять данные порциями - по 100, по 1000 записей. Или выбирать по какому-то одному полю, которое имеет разные значения - просто, чтобы разбить большой запрос на подкусочки. Правда считаю, что лучше бы Вы это сделали через mysqldump/mysqlimport, честное слово smile.

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


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#6 24.03.2011 16:44:16

MaxNev
Участник
Зарегистрирован: 24.03.2011
Сообщений: 7

Re: Посоветуйте как скопировать таблицу из одной базы в другую.

Спасибо за помощь. Сейчас буду пробовать (скорее всего начну с того, что попробую добавить mysql_real_escape_string). Я что то не до конца понимаю mysqldump/mysqlimport можно использовать из скрипта (как то автоматически что нибудь копировать)?

Неактивен

 

#7 24.03.2011 16:53:18

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Посоветуйте как скопировать таблицу из одной базы в другую.

Не уверен, что rucenter разрешает своим пользователям запускать команды ОС через php smile.
Поэтому mysqldump/mysqlimport нужно запускать, войдя по ssh на сервер.
Попробуйте еще посмотреть в phpMyAdmin - там есть возможность снять дамп со всей базы или определенных таблиц.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#8 24.03.2011 16:58:19

MaxNev
Участник
Зарегистрирован: 24.03.2011
Сообщений: 7

Re: Посоветуйте как скопировать таблицу из одной базы в другую.

Я немного выше писал "По поводу дампа, довольно часто надо делать такую операцию, поэтому в ручную сложновато (сейчас так и делаем)." smile

Неактивен

 

#9 25.03.2011 12:09:01

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: Посоветуйте как скопировать таблицу из одной базы в другую.

MaxNev написал:

$res = mysql_query('select * from $SaveDB.Cities') or die(mysql_error());

В данном случае надо испол'зоват' двойные кавычки, чтобы ПХП подставил переменную. А еше лучше обернут' ее в фигурные скобки, чтобы он не истал поля "Cites" в об'екте "$SaveDB".

$res = mysql_query("select * from {$SaveDB}.Cities") or die(mysql_error());

Покажите запрос: INSERT SaveDB SELECT FromDB  и ошибку на него.
Все таки он правил'нее, чем верхний вариант.

Как пример соберите запрос в переменную и ее выводите на экран/консоль/файл.
В готовом результате будет видно ошибку.

Отредактированно vaspet (25.03.2011 12:16:07)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson