0. 선행작업
저는 윈도우, puTTY를 사용합니다
맥 유저 분들은 puTTY가 아닌 터미널로 진행하셔야합니다
DB Replication을 하기 전에, 선행 작업은 다음과 같습니다
* ACG 준비와 Master DB와 Slave DB를 위한 서버 생성
* 각 서버에 Mysql 설치
* Mysql에 Replication을 위한 계정 생성
ACG준비와 서버를 생성하는 과정은 다음 링크를 참고합시다
NCP 서버 전개 및 배포1
다음과 같은 환경 및 개발도구 사용하여 팀프로젝트를 NCP에 서버를 전개 및 배포했습니다 NAVER CLOUD PLATFORM(이하 NCP)에 가입하고 콘솔 -> Services -> Server에서 서버를 생성 저는 centos-7.2.-64를 선택했
develop-log-book.tistory.com
MySQL을 설치하는 과정은 다음 링크를 참고합시다
NCP 서버 Mysql 설치
0. 환경 윈도우와 puTTY로 진행됩니다 맥인 경우 puTTY가 아닌 터미널로 진행하셔야 합니다 puTTY와 터미널에서의 명령어는 조금 상이합니다 1. DBMS와 OS 제가 사용했던 MySQL은 8.0버전입니다 서버 생성
develop-log-book.tistory.com
Replication을 위한 서버와 ACG는 다음과 같습니다
공인 IP를 메모해둡시다
masterDB 서버의 공인 IP : 101.101.216.67
slaveDB 서버의 공인 IP : 101.101.218.188
주의할 점은
1. master와 slave의 Mysql 버전 통일하는게 좋다는 것(버전이 다르다면, slave의 버전이 더 높아야 합니다)
2. Replication을 진행할 때, master -> slave순을 지킬 것
1. master 서버에서의 준비
1.1 puTTY로 master서버에 접속
1.2 root계정으로 Mysql에 접속
[root@testing-master-db ~]# mysql -u root -p
1.3 Replication을 위한 DB를 생성
mysql> CREATE DATABASE replica_db DEFAULT CHARACTER SET utf8;
1.4 user01 계정을 생성, DB에 대한 권한을 부여, Replication에 대한 권한 부여
mysql> CREATE USER user01@'%' IDENTIFIED BY 'Qwe123!!';
mysql> GRANT ALL PRIVILEGES ON replica_db.* TO user01@'%';
1.5 Replication을 위한 계정 생성 및 권한 부여
mysql> create user replica_user@'%' identified by 'Qwe456!!';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'
1.6 Replication을 위한 my.cnf 수정
(i를 누르면 insert모드로 바뀝니다)
[root@testing-master-db ~]# vi /etc/my.cnf
파일의 마지막에 다음 내용을 추가합니다
(관습적으로 master DB의 server-id는 1로 합니다)
log-bin=mysql-bin
server-id=1
esc로 수정을 종료하고
:wq!를 입력하면 저장하고 나가게됩니다
1.7 Mysql을 재시작
[root@testing-master-db ~]# systemctl restart mysqld
1.8 mysql 접속, master 서버 정보 확인
File 명과 Position 번호를 메모해둡니다
File -> mysql-bin.000001
Position -> 962
1.9 DB를 dump파일(sql파일)로 추출
[root@testing-master-db ~]# mysqldump -p replica_db > replica_db.sql
2. slave 서버에서의 준비
2.1 puTTY로 slave서버 접속
2.2 root계정의 초기 비밀번호를 확인
[root@testing-slave-db ~]# grep 'temporary password' /var/log/mysqld.log
2023-02-17T05:50:01.218006Z 6 [Note]
[MY-10454] [Server] A temporary password is generated for root@localhost: b6f;h?0qbg(N
2.3 Mysql에 root 계정으로 접속합니다
[root@testing-slave-db ~]# mysql -u root -p
Enter password:
2.4 master서버에서 생성했던 replica_db와 동일한 이름으로 slave서버에 DB를 생성
mysql> CREATE DATABASE replica_db DEFAULT CHARACTER SET utf8;
ERROR 1820(HY000): You must reset your password using ALTER USER statement before executing this statement
2.5 (Mysql에 처음 접속하는 경우) 비밀번호 재설정
(Mysql에 처음 접속하는 경우, root계정의 비밀번호를 재설정하지 않으면 2.4와 같은 에러가 발생)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Qwe123!!';
Query OK, 0 rows affected (0.01 sec)
2.5 비밀번호가 재설정 됐으니 DB 생성을 다시 시도
mysql> CREATE DATABASE replica_db DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected, 1 warning (0.00 sec)
2.6 user01 계정 생성
root 계정은 되도록 쓰지 않는것이 좋습니다. 따라서 계정을 하나 만들어줍니다
(계정명이 masterDB와 동일할 필요는 없습니다)
mysql> CREATE USER user01@'%' IDENTIFIED BY 'Qwe123!!';
Query OK, 0 rows affected (0.01 sec)
2.7 user01 계정 권한 부여
master서버에서 slave서버로 dump파일을 전송하기 위해선
slave서버의 user01계정에 권한이 부여되어 있어야 합니다
mysql> GRANT ALL PRIVILEGES ON replica_db.* TO user01@'%';
Query OK, 0 rows affected (0.01 sec)
2.8 slave서버의 my.cnf 수정
[root@testing-slave-db ~]# vi /etc/my.cnf
다음 내용을 추가합니다
server-id=2
replicate-do-db='replica_db'
3. master 서버에서 slave 서버로의 dump 파일 전송
3.1 puTTY로 master서버로 접속
3.2 다음과 같이 dump파일을 slave서버에 전송
(22는 단일포트의 번호입니다)
(비밀번호는 NCP slave 서버의 관리자 비밀번호입니다)
[root@testing-master-db ~]# scp -P 22 replica_db.sql root@101.101.218.188:/root
root@101.101.218.188's password:
replica_db.sql 100% 1924 1.9KB/s 00:00
마참내, 전송이 완료됐습니다
4. slave 서버에서의 dump파일 실행
4.1 puTTY로 slave서버로 접속
4.2 전송받은 dump파일을 DB에 복원
[root@testing-slave-db ~]# mysql -u user01 -p replica_db < replica_db.sql
Enter password:
4.3 slave서버의 user01 계정 접속
[root@testing-slave-db ~]# mysql -u user01 -p
Enter password:
4.5 DATABASE 정보를 확인
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| performance_schema |
| replica_db |
+--------------------+
3 rows in set (0.01 sec)
생성이 잘 됐습니다!
5. Replication을 위한 연결 설정
이제 master 서버로부터 Replication이 알아서 될 수 있게 설정해봅시다
5.1 puTTY로 slave서버 접속
5.2 mysql 접속 및 설정
(메모해두었던 부분이 여기서 필요합니다)
mysql> change master to
-> master_host='101.101.216.67',
-> master_user='replica_user',
-> master_password='Qwe456!!',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=962;
5.3 Mysql을 나가고 재시작
mysql> quit;
Bye
[root@testing-slave-db ~]# systemctl restart mysqld
5.3 연결이 잘 됐는지 확인
아래 내용 중 Slave_IO_Running 또는 Slave_SQL_Running이
No이거나 Connecting이 뜬다면 오류가 발생한것입니다
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 101.101.216.67
Master_User: replica_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 385
Relay_Log_File: testing-slave-db-relay-bin.000003
Relay_Log_Pos: 554
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: replica_db
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: 385
Relay_Log_Space: 955
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
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 6830dc53-ae74-11ed-ac51-f220cd58c28b
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set, 1 warning (0.00 sec)
여기까지 NCP에 DB Replication 해보기였습니다
감사합니다
'Network > NCP' 카테고리의 다른 글
NCP 서버에 Mysql 설치하기 (0) | 2023.02.19 |
---|---|
NCP 로드 밸런서 생성 및 서버 연결 (0) | 2023.02.15 |
NCP 서버 전개 및 배포3 (0) | 2023.02.15 |
NCP 서버 전개 및 배포2 (0) | 2023.02.15 |
NCP 서버 전개 및 배포1 (0) | 2023.02.15 |