문제

MySQL 클라이언트를 사용하여 크로스 서버 선택 쿼리를 작성할 수 있습니까? 기본적으로 설정은 다음과 같습니다.

서버 IP 데이터베이스
---------       --------
1.2.3.4 테스트
ABCD 테스트

1.2.3.4의 테스트 데이터베이스 테이블에서 행을 선택하고 ABCD의 테스트 데이터베이스에 테이블에 결과를 삽입하는 쿼리를 작성하고 싶습니다.
내 서버는 몇 마일 떨어져 있으므로 두 개를 연결하기 위해 SSH 터널을 열 것입니다.

어떤 포인터?

도움이 되었습니까?

해결책

mysqldump 이미 언급했듯이 솔루션이 될 수 있거나 사용해 볼 수 있습니다. SELECT ... INTO OUTFILE 그리고 LOAD DATA INFILE ... 명령.

MySQL에는 연합 스토리지 엔진이있어 유용 할 수 있습니다. 다음은 더 많은 문서가 있습니다 http://dev.mysql.com/doc/refman/en/federated-storage-engine.html 나는 그것으로 큰 성공을 거두지 못했다고 고백해야하지만 그것은 당신에게 효과가있을 것입니다.

세 번째 솔루션은 응용 프로그램에서 작업을 수행하는 것입니다. 결과를 읽으십시오 SELECT 라인별로 쿼리 INSERT 다른 서버 라인에 따라. 그래도 데이터 유형 및 NULL 처리와 관련된 몇 가지 문제가 발생할 수 있습니다.

다른 팁

서버 중 하나에서 페더레이션 테이블을 사용하는 것은 어떻습니까? 쿼리에서 사용할 원격 테이블을 기반으로 페더레이션 테이블을 만들고 데이터베이스가 모두 로컬 인 것처럼 쿼리를 실행하십시오. 아래의 예 MySQL 사이트

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 테이블을 사용하지만 테이블은 모든 저장 엔진을 사용할 수 있습니다.

다음으로 원격 테이블에 액세스하기 위해 로컬 서버에서 페더레이션 테이블을 만듭니다.

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://fed_user@remote_host:9306/federated/test_table';

(MySQL 5.0.13 이전에 연결 대신 주석을 사용하십시오.)

MySQL 클라이언트는 한 번에 하나의 서버에만 연결할 수 있으므로 짧은 대답은 아닙니다. 그러나 항상 방법이 있습니다 ...

최근 버전 mysqldump 지원 a --where 덤프 된 데이터를 제한하는 데 사용할 수있는 매개 변수. 이것은 당신이 간단한 것을 실행하는 방법이 있음을 의미합니다. SELECT (즉, 한 테이블의 모든 열) 및 유효한 SQL을 생성합니다. INSERT 그것. 그런 다음 그러한 출력을 파이프 할 수 있습니다 mysqldump 소스 서버에 대한 명령 mysql 대상 서버로 명령하십시오.

당신은 아마도 몇 가지 옵션을 포함하고 싶을 것입니다 --no-create-info 그리고 --no-add-locksmysqldump 명령. 출력이 원하는 것이 될 때까지 테스트하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top