문제

MySQL 서버에 대한 복제를 설정했습니다. 복제 사용자/비밀번호를 사용하여 슬레이브 머신에서 마스터 서버에 연결할 수 있습니다. 슬레이브 SQL 스레드가 실행되었지만 슬레이브 I/O 스레드가 실행되지 않고 슬레이브 I/O 상태가 '슬레이브 상태 표시'를 사용하여 확인하면 비어 있습니다. 문제가 무엇 일 수 있습니까?

이것을 어떻게 해결합니까? 노예를 다시 시작하는 것은 도움이되지 않습니다.

이것은 나의 나쁜 일이었다 : '복제 노예'특권을주는 대신 *.*, 나는 단지 그것을 위해주고 있었다 my_db.*.

도움이 되었습니까?

해결책

'복제 슬레이브'특권을주는 대신.

복제 슬레이브는 글로벌 특권 일뿐입니다 (즉, 사용자 당만 해당), 이는 다음과 같은 명령을 의미합니다.

GRANT REPLICATION SLAVE on mydb.* TO 'someuser'@'%';

다타베이스/열/테이블을 부여 할 수 없으므로 영향을 미치지 않습니다.

실행 해야하는 명령은 다음과 같습니다.

GRANT REPLICATION SLAVE on *.* TO 'someuser'@'%';

그런 다음 a START SLAVE. MySQL 오류 로그를 보는 것이 유용 할 수도 있습니다.

나는 잘 읽을 것을 제안한다 복제 설정 문서,이 모든 것을 자세히 설명 하듯이.

다른 팁

나는 같은 문제에 직면하고 다음 단계를 사용하여 수정했습니다. 완전한 스레드 링크입니다 http://www.percona.com/forums/questions-discussions/percona-xtrabackup/11842-backup-stopped-working-slave-sql-running-no

단계 2를 제외한 @luxknight007에서 언급 한 단계와 동일합니다. 그러나이 스레드에는 더 자세한 내용이 포함되어있어 매우 유용합니다. 다음은 내가 사용했던 솔루션이며 작동했습니다.

"첫 번째 문제는 오류를 수정하는 대신 복제 위치를 변경하고 잘못된 Binlog 파일 이름 형식을 사용했다는 것입니다 (링크 한 게시물에서 방금 사용했을 것입니다). , 슬레이브 SQL_THREAD가 중지 한 Binlog 파일과 위치를 찾아야합니다. 슬레이브 상태 출력을 기준으로, 슬레이브가 새 binlog 파일에서 읽는 것처럼 보입니다 (read_master_log_pos 값이 exec_mas , 이는 슬레이브 SQL_THREAD가 중단 된 곳보다 최신 BINLOG 파일을 읽어야한다는 것을 의미하므로 슬레이브 SQL_THREAD가 실제로 실패한 BINLOG 파일을 찾아야합니다. 따라서 아래와 같은 오류 로그를 찾으십시오.

암호:

2013-10-08 12:48:51 37545 [ERROR] Slave SQL: Error 'Table 'testdb.test2' doesn't exist' on query. Default database: 'testdb'. Query: 'insert into test1 select * from test2', Error_code: 1146
2013-10-08 12:48:51 37545 [Warning] Slave: Table 'testdb.test2' doesn't exist Error_code: 1146
2013-10-08 12:48:51 37545 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000001' position 3427

이것은 내가 다시 만들어 낸 샘플이므로 약간 다를 것입니다. 참고 오류는 노예 상태에서 보이는 것과 유사합니다. 따라서 오류 로그 파일에서 특정 오류 메시지를 찾은 다음 파일 이름과 위치를 제공하는 끝 부분을 찾습니다 ( "내 예에서 로그 'mysql-bin.000001'위치 3427"에서 중지). 위치는 쇼 슬레이브 상태를 기준으로 315098143이어야합니다. 이는 슬레이브 SQL_THREAD가 이벤트 실행을 중지했을 때와 마찬가지로 IO_THREAD는 새로운 것 (read_master_log_pos)에서 계속 읽었습니다.

올바른 Binlog 파일 이름 및 위치를 찾으면 오류 로그에있는 정보를 사용하여 슬레이브에서 변경 마스터 명령문을 다시 실행하십시오. 파일 이름은 mysql-bin.xxxxxx가 아닌 "newcrmdb1-bin.xxxxx"와 같은 것이어야합니다 (위 의이 명명 컨벤션을 볼 수 있습니다).

암호:

mysql> change master to MASTER_LOG_FILE='newcrmdb1-bin.XXXXXX', Master_Log_Pos=315098143;

change master to MASTER_LOG_FILE='mysql-bin.000082' , Master_Log_Pos=47914844;

슬레이브 SQL_THREAD가 실패한 원래 복제 위치로 돌아 오면 시작하겠다고 불평하는 오류를 수정해야합니다.

초기 복제 오류는 테이블이 asteriskcdr.bpleadcf 슬레이브에는 존재하지 않으므로 해당 테이블에서 데이터를 선택하려고 할 때 삽입 문이 실패합니다. 따라서 문제는 당신의 노예가 이미 마스터와 동기화되지 않은 것처럼 보입니다. 마스터의 해당 테이블이 정적이거나 대부분 정적 인 경우 MySQLDump를 사용하여 마스터의 해당 테이블에서 데이터를 내보내고 슬레이브에로드하여이를 해결할 수 있습니다. 그것이 가능하지 않거나 해당 데이터에 신경 쓰지 않으면 항상 SQL_SLAVE_SKIP_COUNTER로 복제 문을 건너 뛸 수 있지만 슬레이브는 마스터와 동기화되지 않습니다.

그리고 다른 모든 것이 실패하면, 당신은 항상 마스터에서 노예를 최후의 수단으로 재건 할 수 있습니다. =) "

나는 같은 문제를 겪었고이 단계를 시도합니다.

먼저이 코드를 my.cnf 또는 my.ini에서 [mysqld] 아래 어딘가에 추가하십시오. slave-skip-errors=1046복제가 중지 된 전체 바이너리 로그 파일을 실행하므로 모든 중복 항목을 건너 뛸 수 있습니다. 성공적인 복제 후이 코드를 주석 할 수 있습니다.

1. 노예 스토프;

2. 레이 슬레이브;

3. master_log_file = 'mysql-bin.000049';

Note: MASTER_LOG_FILE must be the last file where it stop from replicating

4. Master_Log_pos = 98로 마스터를 변경합니다.

5. 노예를 시작하십시오.

성공했는지 확인하십시오

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