2014-02-19 3 views
0

마스터에서 슬레이브로 작업하는 mysql 복제가 필요합니다. (한번 시도해보십시오.)새로운 MYSQL 복제 만들기

데이터베이스가 상당히 크기 때문에 (100GB 이상) 새 슬레이브를 준비하는 데 몇 시간이 걸립니다.

데이터베이스에 MyIsam과 innoDB 엔진이 있고 둘 다 쓰여지고 있습니다. 내 유일한 선택은 마스터에서 새로운 슬레이브로 데이터 파일을 복사하는 것입니다. (또는 ROUND 2의 주제에서 나중에 참조 할 데이터베이스 덤프를 만드십시오)

전에 데이터베이스를 사용하는 모든 서비스를 실행하고 테이블에 대해 writelock을 만들거나 전체 데이터베이스를 종료해야합니까?

새 복제 서버에 데이터 디렉토리를 동기화 한 후 데이터베이스를 시작하고 테이블이있는 데이터베이스가있었습니다. 내가 0

오류 1에 007,324 위치에 bin.log 변경하여 없애있어 첫 번째 오류 :

140213 4시 52분 7초 [ERROR]는 치명적인 오류 1236있어 '첫 번째 로그를 찾을 수 없습니다 바이너리 로그에서 데이터를 읽을 때 마스터의 바이너리 로그 인덱스 파일에있는 파일 이름 140213 4:52:07 [주의] 슬레이브 I/O 스레드가 종료되고 'bin-log.007323'로그에 읽음, ​​위치 46774422

그 후 데이터베이스에서 새로운 문제가 발생했으며이 오류는 모든 테이블에서 나왔습니다.

오류 2 :

오류 '파일에 잘못된 정보 :'쿼리에 ./database/table.frm ''. 기본 데이터베이스 : '데이터베이스'.

뭔가 잘못 된 것 같습니다.

ROUND 2!

이 장면이 나면 오랜 서비스 중단없이이 작업을 수행 할 수 있다고 생각하기 시작했습니다.

마스터 데이터베이스가 이미 구성되었으며 다른 슬레이브에서도 정상적으로 작동합니다.

그래서 나는 인터넷 검색을했고 이것은 내가 생각해 낸 것입니다. MASTER_LOG_FILE을 찾는 GZIP (pigz)하여 DBDUMP을 한 후 서버를 노예로 이동 :

mysqldump --skip-lock-tables --single-transaction --flush-logs --master-data=2 -A > dbdump.sql 

포장 및 이동 :

FLUSH TABLES WITH READ LOCK; 

하는 덤프를 촬영 :

만들기 테이블에 잠금을 읽어 덤프의 MASTER_LOG_POS.

그 후 100GB가 넘고 시간이 걸리기 때문에 dbdump.sql을 가져오고 싶지 않습니다. 그래서 나는 SOURCE가 그것을위한 ok 옵션이 될 것이라고 생각한다. SLAVE 서버에서

: 나는 아직 테스트하지 않은

CREATE DATABASE dbdump; 
    USE dbdump; 
    SOURCE dbdump.db; 

    CHANGE MASTER TO MASTER_HOST='x.x.x.x',MASTER_USER='replication',MASTER_PASSWORD='slavepass', 
    MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=X; 

    start slave; 

SHOW SLAVE STATUS \G 

, 내가 뭔가에 무엇입니까?--BP

답변

1

는 SOURCE 명령을 실행하는 쉘에서 덤프 SQL의 가져 오기를 실행하는 것과 동일하다는 것을 알고 있습니다. 어느 쪽이든, 그것은 오랜 시간이 걸릴 것입니다. 그 외에는 올바른 단계가 있습니다 - 마스터에서 읽기 잠금으로 테이블을 플러시하고 마스터의 데이터베이스 덤프를 만들고 마스터 바이너리 좌표를 기록하고 슬레이브로 덤프를 가져오고 binlog 좌표를 설정하고 복제를 시작하십시오. 자신이하는 일을 정말로 알지 못한다면 원시 바이너리로 작업하지 마십시오 (특히 INNODB 테이블의 경우).

하나의 큰 테이블이 아닌 많은 수의 큰 테이블이있는 경우, 덤프/가져 오기를 테이블 (또는 테이블 그룹)별로 병렬 처리하여 처리 속도를 향상시킬 수 있습니다. 실제로이 작업을 수행하는 데 도움이되는 도구가 실제로 있습니다.

원시 바이너리로 작업 할 수 있지만 마음이 희미하지는 않습니다. 과거에는 rsync를 사용하여 마스터와 슬레이브 사이의 원시 바이너리를 차등 적으로 업데이트했습니다 (이 작업을 수행하기 전에 읽기 잠금과 플러시 테이블을 사용하고 마스터 binlog 좌표를 수집해야합니다). MyISAM 테이블의 경우 실제로는 꽤 잘 작동한다. InnoDB의 경우 더욱 까다로울 수 있습니다. 필자는 InnoDB가 테이블 당 인덱스와 데이터 파일을 작성하도록 옵션을 사용하는 것을 선호한다. ibdata * 파일을 rsync해야합니다. 슬레이브에서 ib_logfile * 파일을 삭제합니다.

이 모든 것은 높은 와이어 동작이므로 다른 가능한 옵션이 없으면이 작업을 수행하지 않을 것입니다. 바이너리 파일 동기화 시도에 대해 생각하기 전에 기존 SQL 덤프를 절대적으로 받아 들여야하며 매번 자신이하는 일을 실제로 알고 있다는 사실이 편안 할 때까지 매번 SQL 덤프를 수행하십시오.