Задавайте вопросы, мы ответим
Вы не зашли.
Есть задача скопировать таблицу из БД1 в БД2. БД находятся на разных хостах.
Для начала копирую стуктуру.
Написал PHP скрипт:
$link = mysql_connect("host1.ru", "user1", "pass1") or die ("Невозможно подключиться к MySQL1");
$link2 = mysql_connect("host2.ru", "user2", "pass2") or die ("Невозможно подключиться к MySQL2");
mysql_query('CREATE TABLE base2.table LIKE base1.table') or die(mysql_error());
который выполнил на host2.ru и получил ошибку:
SELECT command denied to user 'user2'@'host2.ru' for table 'table'
Подскажите причем здесь SELECT и в чем вообще ошибка?
Неактивен
Чтобы выполнить команду "CREATE TABLE base2.table LIKE base1.table" нужно прочитать (SELECT) структуру таблицы base1.table, а прав на это у пользователя 'user2'@'host2.ru' нет. О чем и сообщает вам ошибка.
Неактивен
Вообще стоит указывать в mysql_query, какой идентификатор подключения используете, раз уж их тут 2 на разные сервера.
mysql_query('CREATE TABLE base2.table LIKE base1.table')
стоит заменить на
mysql_query('CREATE TABLE base2.table LIKE base1.table',$link1)
Подозреваю, что пользователь user2 не имеет прав на работу с БД1, а права хотя бы на SELECT ему обязательно нужны для этого LIKE-запроса. Чему будет равно $test_link после
$test_link = mysql_connect("host1.ru", "user2", "pass2");
?
Неактивен
deadka написал:
Вообще стоит указывать в mysql_query, какой идентификатор подключения используете, раз уж их тут 2 на разные сервера.
mysql_query('CREATE TABLE base2.table LIKE base1.table')
стоит заменить на
mysql_query('CREATE TABLE base2.table LIKE base1.table',$link1)
А почему именно $link1, а не $link2? Запросом же работаем сразу с 2мя базами.
deadka написал:
Подозреваю, что пользователь user2 не имеет прав на работу с БД1, а права хотя бы на SELECT ему обязательно нужны для этого LIKE-запроса. Чему будет равно $test_link после
$test_link = mysql_connect("host1.ru", "user2", "pass2");
?
Естественно пользователь user2 не имеет прав на работу с БД1
user2 имеет права только для БД2, а user1 для БД1
Т.к. базы на разных хостингах, то и параметры доступа к ним различны.
Разве описанный запрос не может для каждой базы использовать "свои" доступы?
Отредактированно Helix (19.08.2013 13:50:31)
Неактивен
Helix написал:
Естественно пользователь user2 не имеет прав на работу с БД1
user2 имеет права только для БД2, а user1 для БД1
Для выполнения Вашего запроса user2 должен иметь права на чтение на базу БД1, то есть он должен иметь возможность подключиться к обоим серверам.
Неактивен
deadka написал:
Helix написал:
Естественно пользователь user2 не имеет прав на работу с БД1
user2 имеет права только для БД2, а user1 для БД1Для выполнения Вашего запроса user2 должен иметь права на чтение на базу БД1, то есть он должен иметь возможность подключиться к обоим серверам.
А что делать если user2 нельзя установить права доступа на БД1? Создавать структуру вручную, а потом уже не одним запросом типа
INSERT INTO base2.table SELECT * FROM base1.table;
а скриптом полностью парсить таблицу в БД1 и построчно вставлять в БД2? Я надеялся избежать такого гемороя...
Отредактированно Helix (19.08.2013 14:02:05)
Неактивен
Если не можете дать права на БД1 пользователю, который user2, то видимо так.
mysqldump Вам в помощь.
Неактивен
Большое спасибо за ответы
Неактивен