>  기사  >  데이터 베이스  >  MYSQL 듀얼 마스터 전체 데이터베이스 동기 복제의 자세한 예

MYSQL 듀얼 마스터 전체 데이터베이스 동기 복제의 자세한 예

黄舟
黄舟원래의
2018-05-10 15:37:433041검색

환경:

두 서버 A와 B에는 각각 mysql-5.7.18 서버가 설치되어 있으며 서로의 마스터와 슬레이브를 동기화하도록 구성되어 있습니다.

리눅스 시스템 버전은 CentOS7입니다

A 서버 ip: 192.168.1.7 호스트 이름: test1

B 서버 ip: 192.168.1.8 호스트 이름: test2

(동일 LAN 하)

1. 준비

1 . 호스트 이름 수정 命 명령: HostnameCTL SET-Hostname xxx

(호스트 이름 보기 명령: 호스트 이름)

2. 방화벽 끄기

1) 방화벽 상태 보기

  2) 방화벽이 실행 중입니다. 먼저 종료하세요. 방화벽 서비스 다운

  명령: systemctl 마스크 방화벽d

 3) 방화벽 끄기

  명령: systemctl stop Firewalld

  4) 방화벽 상태 확인

  명령: Firewall-cmd --state

  결과: 실행되지 않음

  3. selinux 정책 끄기

  1) selinux 실행 상태 확인

  명령어: getenforce

                                               ductcredlegum selinux 파일vi /etc/sysconfig/selinux 수정 SELINUX=disabled

  

  3) 폐쇄상태로

2. 마스터 서버(master) 슬레이브 서버(slave) 구성

  1. 서버 A vi /etc/my.cnf의 my.cnf 파일을 열고 파일의 [mysqld] 아래에 다음 내용을 추가합니다

 server-id=1    #반드시 다른 서버와 달라야 하며, 1~232 사이의 양의 정수 값이어야 합니다. server-id 값만 변경하세요.

log-bin=mysql-bin
   log-bin-index=mysql-bin

  2. 서버 A의 mysql 설치 경로(rpm 설치 경로는 /var/lib/mysql)에 전체 데이터베이스 백업 파일 all.sql을 생성합니다.

  생성 명령:

server-id=2    
   log-bin=mysql-bin
   log-bin-index=mysql-bin

  백업 명령:

touch  /var/lib/mysql/all.sql

  복구를 위해 all.sql 파일을 서버 B의 특정 경로(예: /var/lib/mysql 경로)에 복사합니다.

 복원 명령:

[root@test1 mysql]# mysqldump -uroot -p123 --all-databases > /var/lib/mysql/all.sql

  3. 서버 A와 B의 mysql에 동기화를 위한 사용자를 생성합니다.

  사용자 생성:

[root@test2 /]# mysql -uroot -p123 < /var/lib/mysql/all.sql

  인증:

mysql> create user &#39;tongbu&#39;@&#39;%&#39; identified by &#39;tongbu&#39;;

  사용자 삭제:

mysql> grant all on *.* to &#39;tongbu&#39;@&#39;%&#39;;

  A 서버와 B 서버 사용자가 생성된 후, 사용자가 서로 원격으로 mysql에 로그인할 수 있는지 테스트합니다.

mysql> drop user &#39;用户名&#39;@&#39;%&#39;;

  테스트에 문제가 없으면 A, B 서버에서 mysql 서비스를 다시 시작합니다. [root@test /]# service mysqld restart

   4. A를 마스터 서버로, B를 슬레이브 서버로 설정합니다.

  1) 서버 A의 mysql

  Command: mysql> show master statusG

        

   2) B 서버에서 연결 서버 구성

[root@test1 /]# mysql -utongbu -ptongbu -h192.168.1.8
   [root@test2 /]# mysql -utongbu -ptongbu -h192.168.1.7

  mysql> showslave statusG 다음 명령을 입력하세요. 아래와 같이 Slave_IO_Running 및 Slave_SQL_Running의 값이 Yes인지 확인합니다

  

  5. B를 마스터 서버로, A를 슬레이브 서버로 설정합니다.

 1) 서버 B의 mysql에서 바이너리 로그 이름 및 오프셋 보기

 명령: mysql> show master statusG

  

  2) 서버 A에 연결 서버를 구성합니다.

mysql> stop slave;
    mysql> change master to
      -> master_host=&#39;192.168.1.7&#39;,
      -> master_user=&#39;tongbu&#39;,
      -> master_password=&#39;tongbu&#39;,
      -> master_log_file=&#39;mysql-bin.000024&#39;,
      -> master_log_pos=154;
    mysql> start slave;

이 시점에서 두 개의 mysql 데이터베이스는 마스터-슬레이브로 구성되어 서로 동기화됩니다.

오류 문제 해결:

1. Slave_IO_Running 상태 오류

MySQL> showslave statusG;를 확인할 때 Slave_IO_Running 상태는 연결 오류입니다. 구성을 확인해야 합니다.

 1) 네트워크 접속 불가

2) 잘못된 비밀번호, 잘못된 계좌번호, 잘못된 주소 등 잘못된 계정 권한 구성

 3) 바이너리 파일의 잘못된 위치

2. 1차 데이터와 2차 데이터의 충돌이나 차이로 인한 이상

 主键冲突、表已存在等错误代码如1062,1032,1060等,可以在mysql配置文件指定略过此类异常并继续下条sql同步,这样可以避免很多主从同步的异常中断。打开/etc/ mysql下的my.cnf文件,在[mysqld]后添加如下代码:

slave-skip-errors = 1062,1032,1060

3. 跳过异常恢复同步

mysql >slave stop;
 mysql >SET GLOBAL sql_slave_skip_counter = 1;
 mysql >slave start;

위 내용은 MYSQL 듀얼 마스터 전체 데이터베이스 동기 복제의 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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