>  기사  >  데이터 베이스  >  MySQL 마스터-슬레이브 데이터베이스 동기화

MySQL 마스터-슬레이브 데이터베이스 동기화

高洛峰
高洛峰원래의
2016-12-02 14:13:491173검색

환경:
마스터 서버: centos 5.2 mysql 5.1.35 소스 IP: 192.168.1.22
슬레이브 서버: centos 5.2 mysql 5.1.35 소스 IP: 192.168.1.33
구성:
一, 메인 서버
1.1. 복제 슬레이브 권한을 가진 복제 사용자를 생성합니다.
mysql>'repl'로 식별되는 'repl'@'192.168.1.22'에 *.*의 복제 슬레이브 부여;
1.2 my.cnf 파일 편집
vi /etc/my.cnf

server-id=1
을 추가하고 log-bin 바이너리 로그 파일을 활성화합니다.
log-bin=mysql-bin
참고: 기본 server-id=1을 제거해야 합니다
1.3, mysql 데이터베이스 시작
mysqld_safe –user=mysql &
1.4, 읽기 잠금 설정
mysql> 읽기 잠금으로 테이블 플러시
1.5, binlog 로그 파일 이름 및 오프셋 가져오기 🎜>mysql> 마스터 상태 표시;
+———-+————+—————+
| 파일 | Binlog_Ignore_DB |
+— —————+————-+—————+
| mysql-bin.0000010 | —————+—— ——-+————–+——————+
1.6. 동기화할 데이터베이스를 백업합니다
mysqldump test > 1.7. 잠금 해제
mysql>테이블 잠금 해제 ;

2. 서버에서
2.1 my.cnf 파일 편집

vi /etc/my.cnf

추가 server-id=2
참고: 기본 server-id=1을 제거해야 합니다
2.2. 슬레이브 데이터베이스를 시작합니다
mysqld_safe –user=mysql &
2.3 그에 따라 슬레이브 데이터베이스를 설정합니다. >mysql> 마스터를
-> master_host='192.168.1.22′
-> master_user='repl'
-> mysql-bin.0000010′
-> master_log_pos=106;
2.4. 슬레이브 서버 스레드 시작
mysql>startslave;
show processlist 명령을 실행하여 다음 프로세스를 표시합니다.
mysql>show processlistG
********* ********************** 2. 행 *********** ****************
ID: 2
사용자: 시스템 사용자
호스트:
db: NULL
명령: 연결
시간 : 2579
상태: 모든 릴레이 로그를 읽었으며 슬레이브 I/O 스레드가 업데이트하기를 기다리고 있습니다.
정보: NULL은 슬레이브가 마스터에 연결되어 로그를 수락하고 실행하기 시작했음을 의미합니다.
2.5 , 슬레이브 스레드 상태 확인
mysql>show 슬레이브 상태;
*** ************************ 1. 행 ** ******************** ****
Slave_IO_State: 마스터가 이벤트를 보낼 때까지 기다리는 중
Master_Host: 192.168.1.22
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.0000010
Read_Master_Log_Pos: 106
Relay_Log_File: centos-relay-bin.000002
Relay_Log_Pos: 529
릴레이_마스터_로그_파일: mysql-bin.0000010
Slave_IO_Running: 예
Slave_SQL_Running: 예
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
S kip_Counter: 0
Exec_Master_Log_Pos: 106
Relay_Log_Space: 830
Until_Condition: 없음
Until_Log_File:
Until_Log_Pos: 0
Master_SSL _허용 여부: 아니요
Master_SSL_CA_파일:
Master_SSL_CA_경로:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: 아니요
Last_IO_ 오류 번호: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
세트 내 1개 행(0.00초)

구성이 올바른지 확인
슬레이브 서버에서 실행
show 슬레이브 상태G;
마스터가 이벤트를 보내기를 기다리는 중
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

위와 같이 두 줄이 동시에 Yes이면 구성이 성공한 것입니다


Test
1. 메인 서버 테스트 데이터베이스에 user 테이블을 생성합니다
mysql>use test;
mysql>create table user(id int)
2. 슬레이브 서버
mysql>에 있는 user 테이블을 봅니다. ;테스트 사용;

mysql> 'user'와 같은 테이블 표시;

+———————-+
| Tables_in_test (사용자) |
+—————— —-+
| user |
+————————-+
1행(0.00초)
마스터-슬레이브 데이터 동기화가 성공했음을 의미합니다.

문제?
1. 데이터베이스에서 슬레이브 상태를 확인할 때 발생합니다.
마스터와 슬레이브의 MySQL 서버 ID가 동일하기 때문에 슬레이브 I/O 스레드가 중지됩니다. 복제가 작동하려면 이러한 ID가 달라야 합니다. (또는 –replicate-same-server-id 옵션을 슬레이브에서 사용해야 하지만 이것이 항상 의미가 있는 것은 아닙니다. 사용하기 전에 매뉴얼을 확인하십시오.)
서버의 my.cnf에 server-id를 설명하십시오. 동일합니다.
해결책:
my.cnf에서 서버 ID를 수정하고 데이터베이스 서비스를 다시 시작하세요. my.cnf 파일에는 기본적으로 server-id=1

이 있습니다.

기타 안내
메인 서버 my.cnf
#binlog-do-db=백업해야 할 데이터베이스 이름, 여러 줄로 작성 가능
#binlog-ignore-db= 백업할 필요가 없는 데이터베이스 이름, 여러 줄 쓰기 가능
슬레이브 서버 my.cnf
# 복제-do-db=백업할 테스트 데이터베이스 이름
# 복제-무시 -db=mysql은 데이터베이스를 무시했습니다
# master-connect- retry=60 슬레이브 서버가 마스터 서버의 연결이 끊어진 것을 발견한 경우 재접속 시간 차이(초)
다음 설정으로도 my.cnf를 직접 수정할 수 있습니다. 구성 파일
log-bin=mysql-bin
master-host= 192.168.1.22
master-user=repl
master-password=repl
master-port=3306

마스터-슬레이브 서버 동기화 유지 관리
여러 가지 이유로 마스터-슬레이브 데이터 불일치로 인해 로드가 낮을 때 수동으로 동기화를 수행합니다.
메인 서버에서 실행

mysql>flush 테이블을 사용하여 읽기 잠금;
쿼리 확인, 영향을 받은 행(0.01초)
mysql> ;마스터 상태 표시;
+——————+————-+————–+——— ———+
| 파일 | 위치 Binlog_Do_DB |
+ ——————+————-+—————+
| mysql-bin.0000011 | 260|
+——————+ ————-+————–+—————+
슬레이브 서버에서 실행
먼저 현재 마스터 서버의 바이너리 파일명과 오프셋을 구하고, 슬레이브 서버와 마스터 서버를 동기화하는 명령을 실행합니다
mysql>select master_pos_wait('mysql-bin.0000011′,'260′);
+—————————————–+
| master_pos_wait( 'mysql-bin.0000011′,'260′) |
+——————— —————————–+
| 0 |
+—————— ————————————+
1행 세트(0.01 초)
동기화 완료 후 메인 서버에서 잠금 해제 수행
mysql>unlock tables;

마스터-슬레이브 서버 전환

마스터 서버에 장애가 발생하면 슬레이브 서버를 마스터 서버로 사용할 수 있습니다.
1. 모든 슬레이브 데이터베이스가 릴레이 로그에서 모든 업데이트를 수행했는지 확인합니다.
서버에서 stopslave io_thread를 실행하여 show processlist를 확인합니다. 상태가 업데이트가 완료되었음을 나타내는 Has read all Relay log인지 확인하세요.
mysql>stopslave io_thread;
Query OK,0 영향을 받음(0.00초)
mysql>show processlistG;
****************************** 2. 행 ************ ***** **************
ID: 2
사용자: 시스템 사용자
호스트:
db: NULL
명령: 연결
시간: 4757
상태: 모든 릴레이 로그를 읽었습니다. 슬레이브 I/O 스레드가 업데이트하기를 기다리고 있습니다.
정보: NULL
2. 슬레이브 서버에서 슬레이브 중지 및 마스터 재설정 명령을 실행합니다.
mysql>stop 슬레이브;
쿼리 OK,0 영향 받음(0.00초)
mysql>reset master;
쿼리 OK,0 영향 받음(0.00초)
master.info 삭제 및 Relay-log.info 파일을 새 마스터 서버 데이터베이스 디렉터리에 저장합니다. 그렇지 않으면 슬레이브 서버가 다음에 다시 시작될 때 시작됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.