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

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

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

Вы не зашли.

#1 05.09.2011 17:11:50

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Быстрый способ переброса данных между таблицами

Есть две идентичные по структуре таблицы, находятся на разных серверах, можно как-нибудь без парсинга, результат запроса одной таблицы передать второй?
Ну как-то так:

<?
mysql_query("INSERT INTO ttt VALUES(".mysql_query("SELECT * FROM aaa WHERE a='b'").")");
?>

roll


Скажи миру - НЯ!

Неактивен

 

#2 05.09.2011 17:19:57

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Быстрый способ переброса данных между таблицами

Можно подключить одну таблицу к другому серверу через FEDERATED, например.

Неактивен

 

#3 05.09.2011 17:36:10

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Быстрый способ переброса данных между таблицами

Если я правильно поняла, то там подключается ВСЯ таблица, а мне нужно сделать выборку, с скажем 10-тью результатами, которые надо перекинуть в таблицу близнеца. Вообще вопрос крепко завязан с другими моими темами. Смысл в том, что есть сервер Б, там скрипт, он получает указание, сделать выборку по шаблону, от сервера А, сервер А не знает где лежат данные и ему наплевать на это. На сервере Б есть локальная база, где по меткам записано, на каких серверах лежат запрашиваемые данные. Сервер Б находит, что данные разнесены по 3 серверам (1-3), посылает 3 запроса, получает в ответ 30 результатов, но нужно нам только 10, на локальной базе создаем MEMORY таблицу, туда скидываем все результаты, и выбираем 10 первых по заданной очерёдности, результат, выдаём серверу А. Знаю выглядит с перебором, но данная модель заложена в проекте, и надо её реализовать по плану


Скажи миру - НЯ!

Неактивен

 

#4 05.09.2011 18:17:31

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Быстрый способ переброса данных между таблицами

А кто мешает Вам выбрать 10 строк из таблицы FEDERATED на сервере Б
(при том, что таблица смотрит на А)?

Неактивен

 

#5 05.09.2011 18:19:17

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Быстрый способ переброса данных между таблицами

не совсем понимаю реализацию


Скажи миру - НЯ!

Неактивен

 

#6 05.09.2011 19:56:02

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Быстрый способ переброса данных между таблицами

SERVER B:
CREATE TABLE feddie1 FEDERATED CONNECTION = ... SERVER A1 ...;
CREATE TABLE feddie2 FEDERATED CONNECTION = ... SERVER A2 ...;
CREATE TABLE feddie3 FEDERATED CONNECTION = ... SERVER A3 ...;

INSERT INTO tmptable SELECT * FROM feddie1 WHERE ... LIMIT 10;
INSERT INTO tmptable SELECT * FROM feddie2 WHERE ... LIMIT 10;
INSERT INTO tmptable SELECT * FROM feddie3 WHERE ... LIMIT 10;

SELECT * FROM tmptable ... LIMIT 10;

Неактивен

 

#7 05.09.2011 23:11:29

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Быстрый способ переброса данных между таблицами

Ну так ведь тут:

CREATE TABLE feddie1 FEDERATED CONNECTION = ... SERVER A1 ...;
CREATE TABLE feddie2 FEDERATED CONNECTION = ... SERVER A2 ...;
CREATE TABLE feddie3 FEDERATED CONNECTION = ... SERVER A3 ...;

ДБ будет тянуть все таблицы целиком, или как?


Скажи миру - НЯ!

Неактивен

 

#8 05.09.2011 23:14:04

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Быстрый способ переброса данных между таблицами

animegirl написал:

Ну так ведь тут:

CREATE TABLE feddie1 FEDERATED CONNECTION = ... SERVER A1 ...;
CREATE TABLE feddie2 FEDERATED CONNECTION = ... SERVER A2 ...;
CREATE TABLE feddie3 FEDERATED CONNECTION = ... SERVER A3 ...;

ДБ будет тянуть все таблицы целиком, или как?

Нет, это просто виртуальные связные таблицы.

Неактивен

 

#9 05.09.2011 23:26:39

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Быстрый способ переброса данных между таблицами

То есть другими словами, это тоже самое, что я хотела писать на ПХП только на уровне MySQL?

Можно полноценный пример от "CREATE TABLE feddie1 FEDERATED CONNECTION = ... SERVER A1 ...;"? С полной подстановкой правой части?


Скажи миру - НЯ!

Неактивен

 

#10 05.09.2011 23:47:20

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Быстрый способ переброса данных между таблицами

Мне в практике не приходилось использовать
Но в интернете не мало примеров http://www.google.ru/#hl=ru&cp=6&am … mp;bih=821

Неактивен

 

#11 05.09.2011 23:51:12

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Быстрый способ переброса данных между таблицами

paulus написал:

SERVER B:
CREATE TABLE feddie1 FEDERATED CONNECTION = ... SERVER A1 ...;
CREATE TABLE feddie2 FEDERATED CONNECTION = ... SERVER A2 ...;
CREATE TABLE feddie3 FEDERATED CONNECTION = ... SERVER A3 ...;

INSERT INTO tmptable SELECT * FROM feddie1 WHERE ... LIMIT 10;
INSERT INTO tmptable SELECT * FROM feddie2 WHERE ... LIMIT 10;
INSERT INTO tmptable SELECT * FROM feddie3 WHERE ... LIMIT 10;

SELECT * FROM tmptable ... LIMIT 10;

Я вот задумалась, а очень сильно загрузит ДБ движок запрос такого плана:


SELECT * FROM feddie1,feddie3,feddie3 WHERE ... LIMIT 10;
 

?


Скажи миру - НЯ!

Неактивен

 

#12 06.09.2011 00:23:04

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Быстрый способ переброса данных между таблицами

Я как-то умудрилась обвалить базу (не сервер) одной командой:

CREATE TABLE IF NOT EXISTS `2b` (
  `lg` varchar(255) collate utf8_unicode_ci NOT NULL,
  `uid` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`lg`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci CONNECTION='mysql://root:pswd@127.0.0.151:12355/lg_id/2b';


После этой команды в базе, где я пыталась создать federated показывает 4 таблицы, их там до этого 3 было, но когда туда захожу там написано "No tables found in database."
Как это я так умудрилась?
Кстати, пыталась глянуть в "Database: information_schema - Table: TABLES", получила такое:
SQL query:

SELECT *
FROM `TABLES`
LIMIT 0 , 30

MySQL said:
#1431 - The foreign data source you are trying to reference does not exist. Data source error:  error: 1146  'Table 'lg_id.2b' doesn't exist'


Скажи миру - НЯ!

Неактивен

 

#13 06.09.2011 15:13:46

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Быстрый способ переброса данных между таблицами

Сегодня после перезапуска компа, выяснилось, что я обвалила не одну базу, а целых два ДБ сервера, тот куда цепляла таблицу, и тот откуда цепляла таблицу (((
Судя по всему, там обвалились таблицы доступа ((


Скажи миру - НЯ!

Неактивен

 

#14 06.09.2011 22:10:57

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Быстрый способ переброса данных между таблицами

Методом проб и ошибок, смогла восстановить базу, но таблицу пришлось убрать из списка, убрав файл "2b.frm" из папки, прописала в привилегиях доступность ИП адрессов между ними, но при новой попытки - теже грабли. В чём может быть дело?


Скажи миру - НЯ!

Неактивен

 

#15 06.09.2011 22:22:54

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Быстрый способ переброса данных между таблицами

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

Неактивен

 

#16 07.09.2011 14:13:16

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Быстрый способ переброса данных между таблицами

Ну сервера не рухнули, просто при перезапуске не пускали, но отменила права, и эту проблему решила, причина по видимому была не совсем в этом даже. Но проблема с тем, что в базе "lg_id" пропадает список таблиц, после выполнения данной команды, и появляется обратно, только после физической расправы над файлом таблицы в папке. Вот выписка из "Database: mysql - Table: user":

INSERT INTO `user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`) VALUES
('localhost', 'root', '*882EAEFBBF5773A705C20883E60AC1EDAC6F30A1', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0),
('zzz-tower', 'root', '*882EAEFBBF5773A705C20883E60AC1EDAC6F30A1', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0),
('127.0.0.1', 'root', '*882EAEFBBF5773A705C20883E60AC1EDAC6F30A1', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0),
('localhost', '', '', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0, 0),
('zzz-tower', '', '', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0, 0),
('localhost', 'debian-sys-maint', '*4D6071717A9D7D29F2F4D0C918F89DDEFCA18074', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0, 0),
('127.0.0.7', 'root', '*882EAEFBBF5773A705C20883E60AC1EDAC6F30A1', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0),
('127.0.0.201', 'root', '*882EAEFBBF5773A705C20883E60AC1EDAC6F30A1', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0);


ИП _куда_ добавляю 127.0.0.7, ИП _откуда_ добавляю 127.0.0.251, вот выписка из "Database: mysql - Table: user" второго сервера:
INSERT INTO `user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`) VALUES
('localhost', 'root', '*882EAEFBBF5773A705C20883E60AC1EDAC6F30A1', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0),
('zzz-tower', 'root', '*882EAEFBBF5773A705C20883E60AC1EDAC6F30A1', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0),
('127.0.0.1', 'root', '*882EAEFBBF5773A705C20883E60AC1EDAC6F30A1', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0),
('localhost', '', '', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0, 0),
('zzz-tower', '', '', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0, 0),
('localhost', 'debian-sys-maint', '*4D6071717A9D7D29F2F4D0C918F89DDEFCA18074', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0, 0),
('127.0.0.201', 'root', '*882EAEFBBF5773A705C20883E60AC1EDAC6F30A1', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0),
('127.0.0.7', 'root', '*882EAEFBBF5773A705C20883E60AC1EDAC6F30A1', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '', 0, 0, 0, 0);


Скажи миру - НЯ!

Неактивен

 

#17 07.09.2011 14:14:21

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Быстрый способ переброса данных между таблицами

Жеееесть, написала ответ, и сама увидела ошибку cool


Скажи миру - НЯ!

Неактивен

 

#18 07.09.2011 16:56:19

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Быстрый способ переброса данных между таблицами

Отлично smile А если выдавать права командой GRANT, то и ошибиться сложнее —
она всё-таки для людей сделана. В отличие от того, что Вы написали smile

Неактивен

 

#19 07.09.2011 17:07:47

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Re: Быстрый способ переброса данных между таблицами

Так я же не в правах ошиблась, а в ИП tongue


Скажи миру - НЯ!

Неактивен

 

Board footer

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