programing

오류: MySQL에서 마스터 슬레이브 복제를 수행하는 동안 "마스터 정보 구조를 초기화할 수 없습니다."

stoneblock 2023. 9. 1. 20:30

오류: MySQL에서 마스터 슬레이브 복제를 수행하는 동안 "마스터 정보 구조를 초기화할 수 없습니다."

MySQL에 대한 마스터 슬레이브 복제를 수행하려고 합니다.다음 명령을 입력할 때:

CHANGE MASTER TO MASTER_HOST='10.1.100.1', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=451228;
mysql> START SLAVE;

다음 오류가 발생합니다.

오류 1201(HY000):마스터 정보 구조를 초기화할 수 없습니다. MySQL 오류 로그에서 더 많은 오류 메시지를 찾을 수 있습니다.

어떤 도움이라도 주시면 대단히 감사하겠습니다.

재설정을 시도합니다. 마법을 부립니다! 슬레이브 MYSQL 명령 유형:

RESET SLAVE;

그런 다음 다시 시도:

CHANGE MASTER TO MASTER_HOST='10.1.100.1', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=451228;
mysql> START SLAVE;

몇 가지 사항을 확인하십시오.

마스터의 /etc/my.cnf에 server_id가 실제로 설정되어 있는지 확인합니다.

그 이유는 다음과 같습니다. 복제는 server_id에 의존합니다.쿼리가 실행되고 마스터의 이진 로그에 기록될 때마다 마스터의 server_id가 쿼리와 함께 기록됩니다.기본적으로 server_id가 /etc/my.cnf에 정의되지 않은 경우 server_id는 기본적으로 1입니다.그러나 MySQL 복제 규칙에서는 server_id를 마스터의 /etc/my.cnf에 명시적으로 정의해야 합니다.또한 주어진 슬레이브에 대해 mysqld는 릴레이 로그에서 SQL 문을 읽을 때 SQL 문의 server_id를 확인하고 슬레이브의 server_id와 다른지 확인합니다.따라서 MySQL 복제는 해당 SQL 문을 실행하는 것이 안전하다는 것을 알게 됩니다.이 규칙은 순환(마스터-마스터, 멀티마스터) 복제가 구현된 경우에 필요합니다.

사용하다select @@server_id;sql 명령줄에서 서버의 구성을 실제로 확인합니다.

슬레이브의 /etc/my.cnf에 server_id가 실제로 설정되어 있는지 확인합니다.

이유: #1과 동일한 이유

마스터의 /etc/my.cnf에 있는 server_id가 슬레이브의 /etc/my.cnf에 있는 server_id와 다른지 확인합니다.

이유: #1과 동일한 이유

참고: 여러 슬레이브를 설정하는 경우 각 슬레이브가 마스터 및 형제 슬레이브와 다른 server_id를 가지고 있는지 확인하십시오.

이유: 예

두 명의 노예가 있는 주인
마스터에 server_id 1이 있습니다.
SLIB1에 server_id 2가 있습니다.
SLIB2에 server_id 2가 있습니다.

형제 슬레이브의 server_id가 동일하기 때문에 SLIB2에서 복제가 매우 느려집니다.사실, 그것은 꾸준히 뒤쳐지고, 휴식을 취하고, 몇 개의 SQL 문을 처리할 것입니다.server_ids가 동일한 슬레이브가 하나 이상 있는 마스터의 오류입니다.이것은 어디에도 기록되어 있지 않은 gotcha입니다.저는 이것을 살면서 수십 번 본 적이 있습니다.

저는 그것과 매우 유사한 것을 가지고 있었고 같은 오류 메시지를 받았습니다.복제가 정상적으로 실행됩니다. mariadb 재시작 -> "릴레이 로그를 열 수 없습니다."

애초에 네오의 솔루션이 도움이 되었습니다.

그러나 근본적인 원인은 파일 제한을 작게 열기 때문인 것 같습니다.

| wc도 시도하고 /etc/systemd/system.conf 및 /etc/systemd/user.conf에서 DefaultLimitNOFILE을 65535로 늘립니다.

다른 방법이 없는데도 모든 것이 올바르게 설정되어 있다고 확신하는 경우 다음 파일을 제거해야 합니다.

    /var/lib/mysql/<relay_logname>-<connection>.info 

그런 다음 위에서 설명한 대로 'CHANGE MASTER' 명령을 수행합니다.

언급URL : https://stackoverflow.com/questions/5029485/error-could-not-initailize-master-info-structure-while-doing-master-slave-rep