Today
-
Yesterday
-
Total
-

ABOUT ME

-

  • MySQL | Ubuntu(우분투), MySQL 8.0↑ Replication 설정
    ▼ DataBase, NoSQL/MySQL 2023. 1. 28. 15:13
    반응형

    🌈 구성 환경 Master / Slave

    Ubuntu 22.04 LTS, MySQL 8.0.31 Community

     

    1. Master 설정

    1-1. Replication용 계정 생성 및 replication 권한 부여

    [mysql]

    특정 아이피를 설정할 경우 % 대신 ip를 입력한다.

    create user 유저명@'%' identified by '비밀번호';
    grant replication slave on *.* to 유저명@'%';

     

    1-2. Mysql Replication 설정 - mysqld.cnf

    [터미널]

    vi 명령어로 mysqld.cnf 수정한다.

    vi /etc/mysql/mysql.conf.d/mysqld.cnf


    [mysqld] 바로 아래 부분에 2줄을 추가한다.

    server-id: 서버 아이디로 고유 값 설정

    log-bin: 바이너리 로그 파일이 생성될 path/이름 설정, path를 지정하지 않을 경우 /var/lib/mysql에 생성된다.

    [mysqld]
    server-id = 1
    log-bin = mysql-bin


    1-3. MySQL 재시작

    [터미널]

    sudo systemctl restart mysql

     

    1-4. Master 상태 확인

    [mysql]

    show master status;

     

    *Slave 설정에서 사용될 File명과 Position 번호

    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |     157  |              |                  | 
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)

     


    2. Slave 설정

    2-1. Master에서 복제 할 데이터베이스 Dump하여 Slave에 복원한다.

    [MySQL] 데이터베이스, 테이블 Dump 하기

    [Linux] SCP 명령어로 서버 간 파일 복사, 가져오기

     

    2-2. Mysql Replication 설정 - mysqld.cnf

    [터미널]

    vi /etc/mysql/mysql.conf.d/mysqld.cnf


    [mysqld] 아래 부분에 2줄을 추가한다.

    server-id: 서버 아이디로 고유 값 설정

    log-bin: 바이너리 로그 파일이 생성 될 path/이름 설정, path를 지정하지 않을 경우 default path(/var/lib/mysql)에 해당 이름으로 로그 파일이 생성된다.

    [mysqld]
    server-id = 2
    log-bin = mysql-bin
    read-only = 1


    2-3. MySQL 재시작

    [터미널]

    sudo systemctl restart mysql

     

    2-4. Slave - Master 연결

    [mysql]

    reset slave;

    Master 서버로 연결하기 위한 설정을 한다.

    change master to
    master_host='Master DB IP',
    master_user='1-1에서 생성한 replication용 계정',
    master_password='계정 비밀번호',
    master_log_file='1-4의 File명', 
    master_log_pos=1-4의 Position 번호;

     

    2-5. Replication 명령어

    시작

    [mysql]

    start replica;

    중지

    [mysql]

    stop replica;

     

    2-6. Slave 상태 확인

    [mysql]

    show slave status\G;


    ❗ 상태에서 필수로 확인

    1. Master 관련 설정들
    2. Slave_IO_Running: Connection or YES
    3. Slave_SQL_Running: YES

     

    [mysql] 프로세스 상태 확인

    show processlist\G;

     

    no query specified

    Slave 서버에 Error 가 발생하면 발생하였던 시점으로부터 Master 서버로부터 갱신된 쿼리를 실행하지 않는다. 이런 경우 Error를 넘겨야 다음 쿼리를 실행하기 때문에 Slave 서버에 다음과 같이 넣고 restart 해준다.

    vi /etc/mysql/mysql.conf.d/mysqld.cnf

     slave-skip-errors=all 추가

    [mysqld]
    ...
    slave-skip-errors=all

     

    Replication 테스트

    문제 없이 Replication 설정이 완료되었다면, 실제 잘 동작하는지 확인해본다.
    master DB에서 데이터를 생성하고, slave DB에 복제되어 데이터가 조회되는지 확인한다.

     

    반응형

    댓글

Designed by Tistory.