부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

왜 빌드 도커 기반?

  • 한정된 자원
  • 가상 머신은 필요한 시스템 구성에 설정하고, 복잡한 단계는 MySQL을 설치하는
  • 용기의 복수의 단일 시스템 도커에서 실행할 수 있습니다
  • 도커 용기, 충돌 독립적 인 별도의 IP하지 않는있다
  • 고정 표시기 컨테이너에서 두 번째 단계를 시작하는 간단한 단계를 사용하여

부두 노동자를 사용하여 마스터 서버에서 구조

먼저 풀 고정 표시기 거울, 우리는 여기의 MySQL 5.7 버전을 사용 :

고정 표시기의 풀 MySQL은 : 5.7

이 이미지는 필요 두 개의 별도의 용기 마스터에서 시작하는 컨테이너를 시작하는 데 사용되는

마스터 (메인) :

3339 -p 고정 표시기 실행 : 3306 --name MySQL의 마스터 -e MYSQL_ROOT_PASSWORD = 123456 -d mysql을 : 5.7

슬레이브 (에서)

3340 -p 고정 표시기 실행 : 3306 --name MySQL의 노예 -e MYSQL_ROOT_PASSWORD = 123456 -d mysql을 : 5.7

외국 포트 마스터의지도는 3339이며, 외부 포트 슬레이브 매핑은 3340입니다. 고정 표시기 용기는 서로 독립적이기 때문에, 각 컨테이너는 다른 컨테이너가 동일한 포트를 사용하여 충돌하지 않도록, 자신의 독립적 인 IP가 있습니다. 여기에 우리가 사용하는 MySQL의 기본 포트 3306에 시도해야한다, 또는 IP 연결 고정 표시기 컨테이너 MySQL이 문제에 나타나지 않을 수 있습니다.

사용 고정 표시기의 ps 명령은 실행 컨테이너를 볼 수 있습니다 :

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

이 때, 다른 도구는 연결 MySQL을 Navicat는을 테스트 할 수 있습니다

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

구성 마스터 (메인)

마스터를 통해 용기의 내부에 고정 표시기 간부 - 그것은 5ddad8c2f368 / 빈 / bash는 명령은 또한 고정 표시기 간부 - 그것은 MySQL의 마스터 / 빈 / bash는 명령으로 입력 할 수 있습니다. 5ddad8c2f368 컨테이너의 ID이고, MySQL의 마스터는 선박의 이름이다.

CD 디렉토리에 /etc/mysql/mysql.conf.d 스위치를 /etc/mysql/mysql.conf.d하고 정력 mysqld.cnf의 my.cnf 편집 할 수 있습니다. 이 시점에서 떠들썩한 파티를보고됩니다 VIM : 명령은 우리가 고정 표시기 컨테이너 내 자신을 정력 설치해야 찾을 수 없습니다. 정력 설치 정력 명령을 설치 apt-get을 사용하여

그것은 다음과 같은 질문을 나타납니다 :

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

실행 후, apt-get을 업데이트를 실행 성공적으로 정력 설치에 다시 정력 설치 apt-get을. 그런 다음 우리는 my.cnf 파일에 다음과 같은 구성을 추가, 편집의 my.cnf에 정력 사용할 수 있습니다 :

[mysqld를]

## 만 동일한 LAN의 관심에서

서버 ID = 100

바이너리 로깅이 켜져 ##, 쉽게 얻을 수 있습니다 (키)

로그인 빈 = mysql을 - 빈

구성이 완료되면, 적용 할 수있는 MySQL의 서비스 구성을 다시 시작해야합니다. 사용 서비스 mysql을 다시 시작 재부팅. 다시 시작 MySQL의 서비스를 중지 할 수있는 고정 표시기 컨테이너를 만들 것, 우리는 또한 고정 표시기 시작 MySQL의 마스터 컨테이너를 시작해야합니다.

다음 단계는 마스터 데이터베이스 데이터 동기화 사용자에 생성되고, 사용자는 데이터베이스의 데이터 사이의 차 동기에 대한 권한 슬레이브 리플리케이션 슬레이브 및 복제 클라이언트 권한을 부여합니다.

첫 번째 연결 MySQL 데이터베이스

루트 @ 5ddad8c2f368 : / # MySQL의 -uroot -p123456

USER '노예'@ '%' '123456'로 식별을 만들;

. GRANT REPLICATION SLAVE, * ON 복제 CLIENT * TO '노예'@ '%';

사본에 부여 된 계정 복제 CLIENT 권한은 사용자가 복제 상태를 확인하려면 SHOW 마스터 STATUS, SHOW 노예 상태와 SHOW BINARY LOGS를 사용하여 복사합니다.

REPLICATION SLAVE 권한은 작업을 정말 할 수있는 복사, 계정을 복사 수여했다.

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

(에서) 슬레이브 구성

그리고 구성 파일에 추가로 마스터 (주)을 구성하면 my.cnf의 슬레이브를 다음과 같습니다 :

[mysqld를]

## 배치 SERVER_ID, 유일한 서버 ID에주의를 기울이 101 =

이진 로깅 개구 ##을 사용하면, 다른 슬레이브에서 마스터 슬레이브 제조

로그인 빈 = mysql을 - 노예 빈

## relay_log 구성 릴레이 로그

relay_log = 듀-MySQL을 중계 함

구성 및 (주) 일관 컨테이너 고정 표시기 마스터의 MySQL의 서비스 운영 및 구성을 다시 할 필요가 후.

바이너리 로그 거의에게 관련된 여러 측면을 로그인 릴레이. 차이점은 : 서버 I / O 쓰레드가 로컬 파일 서버에서 제공하는 마스터의 바이너리 로그 기록을 읽어에서, 다음 SQL 스레드가 너무 서버에 릴레이 로그 로그 컨텐츠 및 응용 프로그램을 읽 서버와 주 서버 데이터가 일치한다.

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

링크 마스터 (주)와 슬레이브 (에서)

MySQL의에 마스터에서, 쇼 마스터 상태를 실행;

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

파일 및 위치 필드의 값이 사용됩니다 뒤에 후자의 작업이 완료되기 전에, 필요가, 그렇지 않으면 상태 변경의 원인이됩니다, 아무것도 할 수없는 마스터 라이브러리를 확인 파일 및 위치 필드의 값을 변경한다.

슬레이브에서 MySQL의를 입력, 실행

CHANGE MASTER TO의 MASTER_HOST = '172.17.0.2'

master_user = '노예',

master_password = '123456',

master_port에는 = 3306,

MASTER_LOG_FILE = 'MySQL의-bin.000001 위'

MASTER_LOG_POS = 617

master_connect_retry = 30;

명령 설명 :

master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

master_port:Master的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status \G;。

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。

主从复制排错:

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。

  • 网络不通
  • 检查ip,端口
  • 密码不对
  • 检查是否创建用于同步的用户和用户密码是否正确
  • pos不对
  • 检查Master的 Position

测试主从复制

测试主从复制方式就十分多了,最简单的是在Master创建一个数据库,然后检查Slave是否存在此数据库。

Master:

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

Slave:

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

完整的主备流程图

마지막으로, 우리가 완전한 계획 B 노드에 다음 동기화, 노드 A의 수행에 UPDATE 문을 살펴 보자.

부두 노동자의 MySQL을 기반 본관에서 복제 및 원리

 

그것은 볼 수 있습니다 : 바이너리 로그를 기록하는 동안 마스터 데이터베이스 업데이트 요청은 클라이언트가 수행하는 업데이트 논리 내정 이후에 접수됩니다.

A.와 라이브러리 B하여 마스터 라이브러리 사이의 긴 연결을 유지 라이브러리는 긴 라이브러리 기기 B가 접속 전용 주 내부 나사를 갖는다.

동기화 과정이있는 트랜잭션 로그를 완료

  • 1 변화 마스터 저장소 B 명령에 의해 준비 IP 호스트 포트, 사용자 이름, 패스워드, 어느 위치로부터 바이너리 로그 개시 요구의 집합 라이브러리 파일명 및 오프셋을 포함하는 로그의 위치.
  • 2, 슬레이브 허우 두 스레드와 io_thread SQL_THREAD 시작됩니다 라이브러리 제조 대기 데이터베이스 B에 명령을 실행 시작. 주요 라이브러리와의 연결을 설정하는 io_thread 책임을 어느.
  • (3), 사용자 이름, 패스워드, 패스 위에 메인 완전한 라이브러리 유효성 시작 위치 B B. 발행 로컬 바이너리 로그로부터 판독 라이브러리에 따라 제조 된
  • 도 4를 참조하면, 바이너리 로그는 로그 전송 (중계 로그)으로 알려진 로컬 파일에 기록 백업 저장소 B를 얻는다.
  • 5 SQL_THREAD 읽기 교통 로그, 명령을 구문 분석, 로그 및 실행합니다.

이들은 도커 구조와 원리에서 MySQL의 마스터 복사본 정보를 기반으로, 제발주의를 기울 다른 많은 관련 기사에!

추천

출처www.cnblogs.com/WIU1905/p/11802860.html