두 개의 서버 A와 BI가 고정 데이터베이스 DBA와 DBB에 대해 두 서버 간에 복제를 설정하려고 시도하고 있지만 작동하지 않습니다. 구성 테이블이 업데이트되지 않습니다. 이유는 무엇입니까?
Master:(/etc/my.cnf)
server-id=4233865
log-bin=mysqld-bin
log-error=mysql-bin.err
relay-log=mysqld-relay-bin
Slave:(/etc/my.cnf)
symbolic-links=0
server-id=1359390567
relay-log-index = slave-relay-bin.index
relay-log = slave-relay-bin
replicate-do-db=DBA,DBB
슬레이브 상태 표시
Slave_IO_State Waiting for master to send event
Master_Host 10.0.0.163
Master_User repl
Master_Port 3306
Connect_Retry 60
Master_Log_File mysqld-bin.000007
Read_Master_Log_Pos 770800
Relay_Log_File slave-relay-bin.000017
Relay_Log_Pos 770947
Relay_Master_Log_File mysqld-bin.000007
Slave_IO_Running Yes
Slave_SQL_Running Yes
Replicate_Do_DB DBA,DBB
Replicate_Ignore_DB
Replicate_Do_Table
Replicate_Ignore_Table
Replicate_Wild_Do_Table
Replicate_Wild_Ignore_Table
Last_Errno 0
Last_Error
Skip_Counter 0
Exec_Master_Log_Pos 770800
Relay_Log_Space 1134838
Until_Condition None
Until_Log_File
Until_Log_Pos 0
Master_SSL_Allowed No
Master_SSL_CA_File
Master_SSL_CA_Path
Master_SSL_Cert
Master_SSL_Cipher
Master_SSL_Key
Seconds_Behind_Master 0
마스터 상태
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000007 | 608837 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
마스터에서 생성한 복제 사용자를 이용하여 슬레이브에서 로그인할 수 있습니다. 내가 준 사용자를 위해 REPLICATION_SLAVE on % PERMISSIONS
.
내가 뭐 놓친 거 없니?No Error in Logs
고쳐 쓰다
프로세스 ID 사용자 호스트 데이터베이스 명령 시간 상태 SQL 쿼리
(Kill) (2) (시스템 사용자) (없음) (연결) (149410) (호스트가 이벤트를 보내기를 기다리는 중) (---)
Kill 1 System User None Connect -38185 슬레이브가 모든 릴레이 로그를 읽었으며 슬레이브 I/O 스레드가 업데이트되기를 기다리고 있습니다. ---
보시다시피 SQL 쿼리는 항상 --- 왜죠?
답변1
디버깅 목적으로 슬레이브에 대한 모든 권한을 가진 사용자를 사용하겠습니다. 복사가 성공한 후 복사 사용자 권한을 재설정하려고 합니다.
내가 보는 주요 문제는 슬레이브가 마스터가 될 것으로 예상하는 로그 위치이지만 770800
마스터의 실제 위치는 입니다 608837
. 노예는해야한다안 돼요주인보다 앞서.
슬레이브를 중지하고, 마스터를 잠그고, 마스터를 덤프하고, 슬레이브에서 마스터를 복원하고, 둘 다에서 복제를 설정한 다음 슬레이브를 잠금 해제하여 복제 구성 프로세스를 "다시 시작"해야 합니다. 난 이걸 해야 해매번복제가 중단되었습니다. :(
업데이트 1:
다음은 제가 얼마 전에 MySQL 복제에 관해 작성한 몇 가지 메모입니다.
복제 활성화:
안타깝게도 SLAVE를 시작할 바이너리 로그의 정적 위치를 얻기 위해 MASTER 데이터베이스를 완전히 잠그지 않으면 MySQL 복제 구성을 완료할 수 없습니다.
이 구성 연습의 범위는 /etc/my.cnf 파일을 올바르게 구성하고 MASTER 및 SLAVE 서버에서 적절한 계정을 설정한 후 MASTER 및 SLAVE를 구성하는 것입니다.
MySQL 복제를 구성하려면 MASTER에서 두 개의 터미널 세션과 SLAVE에서 하나를 열어야 합니다. 터미널 1과 2는 MASTER에서 열리는 두 세션을 의미합니다. 터미널 3은 SLAVE 세션을 참조합니다.
제1터미널:
- MySQL에 연결주인명령줄 클라이언트를 사용하세요.
- 쿼리 실행
FLUSH TABLES WITH READ LOCK;
- 이렇게 하면 완전히 잠깁니다.주인.
- MYSQL 클라이언트를 종료하지 마십시오.
제2터미널:
mysqldump
복사할 데이터베이스에서 a를 수행합니다.- 데이터베이스 덤프가 공유 스토리지에 있거나 슬레이브 서버에 복사되었는지 확인하세요.
- MySQL에 연결주인명령줄 클라이언트를 사용하세요.
- 쿼리 실행
SHOW MASTER STATUS;
- 써 내려 가다문서그리고위치목록.
제3터미널:
- 방금 MASTER에서 얻은 데이터베이스 덤프를 복원합니다.
- MySQL에 연결노예명령줄 클라이언트를 사용하세요.
- 쿼리 실행
CHANGE MASTER TO MASTER_HOST='<master host>', MASTER_USER='<replication user>', MASTER_PASSWORD='<replication password>', MASTER_LOG_FILE='<Filename obtained from Terminal 2>', MASTER_LOG_POS=<Position obtained from Terminal 2>;
- 이제 복제가 활성화되어야 하지만 로그 위치는 증가되어서는 안 됩니다.
- 복제가 제대로 시작되지 않으면 반드시 mysqld 로그 파일을 확인하세요.
- 구현하다
SHOW SLAVE STATUS;
- 열이 일치
Master_Log_File
하는지 확인Read_Master_Log_Pos
문서그리고위치제2터미널에 대한 컬럼입니다.
제1터미널:
- 쿼리가 들어오면 쿼리를 실행
SHOW MASTER STATUS;
하고 메모하세요.문서그리고위치목록.
- 쿼리가 들어오면 쿼리를 실행
제3터미널:
HOW MASTER STATUS;
터미널 1에서 실행 직후 합계 열을SHOW SLAVE STATUS;
비교합니다.Master_Log_File
Read_Master_Log_Pos
문서그리고위치각각 제1터미널에 위치해 있습니다.
4단계와 5단계를 여러 번 반복합니다. 파일과 위치가 잘 일치하면 복제가 성공적으로 활성화된 것입니다. 축하해요.
복제 비활성화:
복제 비활성화주인/etc/my.cnf
, 해당 줄을 편집하고 주석 처리해야 합니다 (해당 줄에 대한 자세한 내용은 참고자료 참조).
SLAVE에서 복제를 비활성화하려면 쿼리를 실행해야 합니다 STOP SLAVE;
.
슬레이브 복제를 다시 활성화하려면 쿼리를 실행해야 합니다 START SLAVE;
.
복제 문제 해결:
복제가 중단되는 경우가 있습니다. 이는 일반적으로 UPDATE 쿼리의 급증으로 인해 발생합니다. 복제가 중단되면 마스터 및 슬레이브 서버의 바이너리 로그가 기하급수적으로 증가하기 시작합니다. 쿼리 급증의 근본 원인을 즉시 식별하고 제거하지 않으면 일반적으로 MySQL 서버의 디스크 공간은 10시간 이내에 완전히 소진됩니다.
스토리지가 고갈되지 않도록 하는 가장 빠른 방법은 MASTER에서 MySQL 복제를 완전히 비활성화하고 SLAVE에서 MySQL을 종료하는 것입니다.
스토리지가 가득 차기 시작하면 마스터와 슬레이브에서 복제를 비활성화한 후 마스터와 슬레이브에서 모든 mysql-bin 및 mysqld-relay-bin 파일을 삭제하세요. RPM 기반 MySQL 배포판을 사용할 때 이러한 파일은 일반적으로 /var/lib/mysql에 있습니다. 바이너리 로그 파일의 이름은 글로벌 my.cnf에서 설정 가능하므로 해당 파일이 존재하지 않는 경우 설정 파일을 확인한다.
손상이 발생하고 복제가 비활성화된 후 복제를 다시 활성화하려면 이 문서 앞부분의 모든 세부 정보를 완료해야 합니다.
인용하다: