Объединяйте таблицы с двух разных серверов

У меня два разных сервераserver1 а такжеserver2, Теперь у меня естьdb1 вserver1 а такжеdb2 вserver2. I am trying to join these two table in MySQL like this.

Select a.field1,b.field2  
FROM  [server1, 3306].[db1].table1 a  
Inner Join [server2, 3312].[db2].table2 b  
ON a.field1=b.field2  

Но я получаю ошибку. Это возможно в MYSQL.

 Madara Uchiha♦20 июн. 2012 г., 08:55
Я думаю, что вам лучше всего выбрать обе таблицы, получить их результаты в php и применить любую операцию с данными, которая вам может понадобиться.
 vearutop20 июн. 2012 г., 08:50
Ты можешь попробоватьFEDERATED двигатель хранения,dev.mysql.com/doc/refman/5.1/en/federated-storage-engine.html
 odiszapc20 июн. 2012 г., 08:54
Вы можете использовать FEDERATED хранилище
 Starx21 июн. 2012 г., 08:22
возможный дубликатMySQL Cross Server Select Query

Ответы на вопрос(3)

Yes, it is possible in MySQL.

предварительно тоже. Вы должны использоватьФЕДЕРАЛЬНЫЙ ДВИГАТЕЛЬ сделать это. Идея звучит так:

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

CREATE TABLE federated_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://[email protected]_host:9306/federated/test_table';

[Источник ответа]

 25 апр. 2018 г., 14:44
Хотя это не одно и то же, репликация может быть хорошим решением в зависимости от вашего варианта использования.
 08 сент. 2017 г., 07:33
Привет, ты нашел лучшее решение для этого?
 17 сент. 2014 г., 17:15
Это очень медленно с большими таблицами базы данных. Я все еще ищу лучший метод, но FEDERATED таблицы не достаточно хорошо масштабируются, чтобы быть вариантом во многих случаях.
 08 сент. 2017 г., 14:35
@ NomanDilawar, Привет, мне еще не пришлось искать лучший метод. Если вы найдете один, я хотел бы увидеть его, хотя.
 02 мая 2018 г., 10:37
@JohnHunt, я бы поспорил с этим, поскольку вы упомянули, что это не то же самое. Репликация не объединяет таблицы с другого сервера.

сервер1 - db1 - & gt; реплицировать на сервер2. (теперь db1 и db2 будут находиться на одном сервере server2. Присоединение будет простым).

ПРИМЕЧАНИЕ. Если server2 достаточно способен принять нагрузку db1 с точки зрения хранилища / процесса и т. Д., То мы можем выполнить репликацию. Как сказал @brilliand, да, Federated сделает большую ручную работу и будет медленной в процессе.

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

Явная версия:

tb2lst(){
    echo -n "("
    tail -n +2 - | paste -sd, | tr -d "\n"
    echo ")"
}

id_list=$(mysql -h'db_a.hostname' -ume -p'ass' -e "SELECT id FROM foo;" | tb2lst)
mysql -h'db_b.hostname' -ume -p'ass' -e "SELECT * FROM bar WHERE foo_id IN $id_list"

+--------|-----+
| foo_id | val |
+--------|-----+
| 1      | 3   |
| 2      | 4   |
+--------|-----+

Я написал несколько функций-оболочек, которые я храню в своем bashrc, так что, на мой взгляд, это всего лишь одна команда:

db_b "SELECT * FROM bar WHERE foo_id IN $(db_a "SELECT id FROM foo;" | tb2lst);"

+--------|-----+
| foo_id | val |
+--------|-----+
| 1      | 3   |
| 2      | 4   |
+--------|-----+

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

Ваш ответ на вопрос