-
Notifications
You must be signed in to change notification settings - Fork 8
DB Replication을 위한 데이터베이스 환경 설정 (Master, Slave)
+추가
- Real MySQL 2 - 복제
- Replication with JPA
- Replication 관련 정합성 문제
- Replication 적용기
Master 데이터베이스인 main-db의 maria db 버전 이 버전과 같거나 높은 버전의 maria db를 SLAVE 데이터베이스를 설치해야한다.
$ mysql --version
mysql Ver 15.1 Distrib 10.4.21-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
1. main-db-slave1 이라는 이름으로 ec2 인스턴스를 생성하였다. 2. DB 설치 전 timezone을 KST로 설정하였다.
$ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
$ date
Fri Sep 10 00:20:18 KST 2021
3. apt 업데이트, 업그레이드한다.
$ sudo apt update && sudo apt-get -y upgrade
4. marai db 설치
$ sudo apt-get install -y mariadb-server
5. maria db 버전 확인
$ mysql --version;
mysql Ver 15.1 Distrib 10.1.48-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
6. root 패스워드 변경
$ sudo mysql -u root
[mysql]> use mysql;
[mysql]> update user set password=password('원하는 비밀번호') where user='root';
[mysql]> update user set plugin='mysql_native_password' where user='root';
[mysql]> flush privileges;
7. 새로운 유저를 만들고 싶다면
[mysql]> grant all privileges on *.* to '유저명'@'%' identified by '비밀번호';
[mysql]> flush privileges;
*.* (디비.테이블)
'%' 외부에서도 접근가능, 내부에서만 접근하려면 localhost
1. my.cnf 에 아래 설정을 추가한다.
$ sudo vi /etc/mysql/my.cnf
[mysqld]
log-bin = mysql-bin
server-id = 1
binlog_format = row
expire_logs_days = 30
mysql-bin: binary log의 파일명
server-id: master와 slave의 값만 다르면 됨, 아무 숫자나 사용 가능
binlog_format: 유형을 선택한다(STATEMENT, ROW, MIXED 중 선택)
expire_logs_days: 보관기간 설정
2. maria db 재시작
$ sudo service mysqld restart
3. mysql 접속 4. Slave에서 접속할 계정 생성
[mysql] grant replication slave on *.* to 'slave_db'@'%' identified by '비밀번호!';
5. binary log 파일명과 위치를 기억해두기 (주의. DB 재시작시 File과 Position 변경 가능성 있음)
[mysql] show master status;
이 때 나오는 file 명과 Position을 기억해두자.
Master 데이터베이스에 이미 데이터들이 있는 상태이기 때문에 mysqldump를 이용해서 Slave로 옮겨줘야한다.
1. Master 인스턴스 - 덤프 파일 만들기
$ sudo mysqldump -u root -p --databases botobo > dumpbotobo.sql
botobo: 데이터베이스명
dumpbotobo.sql: 파일 이름
2. Master -> Slave 로 dump 파일 전송
만약, scp가 안 먹히면 접속할 권한이 없는 거니까 뚤어주기
$ scp /home/ubuntu/dumpbotobo.sql ubuntu@[slave-ip]:/home/ubuntu/.
3. Slave 로 접속 -> mysql 접속 -> 데이터베이스 생성
[mysql] CREATE DATABASE botobo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
4. Slave 에 dump 파일 실행하고 확인하면 데이터가 옮겨져 있을거임
$ sudo mysql -u root -p botobo < dumpbotobo.sql
1. my.cnf 에 아래 설정을 추가한다.
$ sudo vi /etc/mysql/my.cnf
[mysqld]
server_id = 2
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1
2. maria db 재시작
$ sudo service mysqld restart
3. mysql 접속 4. Master와 연동 설정
[mysql] change master to
master_host='[masster 아이피]',
master_user='이전에 만든 Slave 접속용 유저',
master_password='비밀번호',
master_log_file='[binary log 파일명]',
master_log_pos=[binary log 위치];
5. 실행
[mysql] start slave;
6. Slave 상태 확인
[mysql] show slave status;
netstat -nap | grep 3306
vi /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address: 0.0.0.0
stop slave; reset slave all;
Code Convention
- AWS 배포 및 Jenkins CI/CD 🐳
- Nginx로 로드 밸런싱하기
- How to Git Rebase?
- 잘못된 깃 브랜치에서 탈출하기
- 서브모듈 도입기
- 소나큐브 도입기
- Flyway 도입기
- DB Replication을 위한 데이터베이스 환경 설정
- 무중단 배포 도입기
- nginx 설정파일 변경하는 방법
- 로그인, 로그아웃 흐름정리
- About Redis
- Criteria -> QueryDSL로 변경
- S3 파일 업로드 구조
2차 ~ 4차 회의 및 데일리 미팅은 디스코드에서 진행되어 이슈로 반영되었습니다.
이후 회의 및 데일리 미팅은 디스코드에서 진행되어 이슈로 반영되었습니다.