Подтвердить что ты не робот

Выбор кросс-сервера MySQL

Можно ли написать запрос выбора кросс-сервера с помощью MySQL Client. В основном настройка выглядит следующим образом.

Сервер IP    
базы данных ---------     --------
1.2.3.4     Тест
  Тест

Я хочу написать запрос, который будет выбирать строки из таблицы в тестовой базе данных в 1.2.3.4 и вставить результат в таблицу в тестовую базу данных на a.b.c.d
Мои серверы расположены на расстоянии друг от друга, поэтому я открою туннель SSH для подключения двух.

Любые указатели?

4b9b3361

Ответ 1

mysqldump может быть решением, как уже упоминалось, или вы можете попробовать использовать команды SELECT ... INTO OUTFILE, а затем LOAD DATA INFILE ....

У MySQL есть механизм объединения, который может быть вам полезен. Вот еще несколько документов на нем http://dev.mysql.com/doc/refman/5.0/en/federated-storage-engine.html Должен признаться, что у меня не было большого успеха, но это может сработать для вас.

Третьим решением будет выполнение работы в вашем приложении. Прочитайте в результатах запроса SELECT строку за строкой и INSERT на другой сервер по очереди. Однако вы можете столкнуться с некоторыми проблемами с типами данных и нулевой обработкой.

Ответ 2

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

Процедура использования таблиц FEDERATED очень проста. Обычно у вас есть два сервера, работающих как на одном хосте, так и на разных хостах. (В таблице FEDERATED можно использовать другую таблицу, управляемую одним и тем же сервером, хотя при этом мало смысла.)

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

CREATE TABLE test_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=MyISAM 
CHARSET=latin1;

В примере используется таблица MyISAM, но в таблице может использоваться любой механизм хранения.

Затем создайте таблицу FEDERATED на локальном сервере для доступа к удаленной таблице:

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';

(Перед MySQL 5.0.13 используйте COMMENT, а не ПОДКЛЮЧЕНИЕ.)

Ответ 3

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

Последние версии mysqldump поддерживают параметр --where, который можно использовать для ограничения сбрасываемых данных. Это означает, что у вас есть способ запустить простой SELECT (т.е. Все столбцы в одной таблице) и создать действующий SQL для INSERT. Затем вы можете передать вывод такой команды mysqldump для исходного сервера на команду mysql на целевой сервер.

Вероятно, вы хотите включить несколько параметров, например --no-create-info и --no-add-locks в команду mysqldump. Протестируйте его до тех пор, пока вы не получите именно то, что вы хотите.