[MYSQL]replication & mysql 이중화 (master,slave)
- Master 작업
1-1. Slave 계정 생성
Grant replication slave on *.* to slave@'192.168.0.*' identified by ' passwd';
1-2. master(DB) 백업
Mysqldump -u root -p dbname > dump.sql
1-3. dump 파일 slave 서버로 전송
FTP 이용 및 SCP
scp dump.sql user(계정)@IP:.
1-4. /etc/my.cnf 내용추가
log-bin=mysql-bin
server-id = 1
1-5. mysql restart
1-6 show master status;
(File 번호 ,Position 번호 메모)
- Slave 작업 (Slave 서버가 Master서버로 운영되기위해선 1-1 항목 필수 추가)
1-1. /etc/my.cnf 내용 추가
Server-id=2
replicate-do-db='dbname' (연동하려는 Dbname ,2개의 Dbname 기재 시 동일내용으로 한 줄 추가)
log-slave-update (Slave 서버가 Master서버로 운영 필수 항목/ 설명 아래 참조)
read-only = 1 (slave 서버에 대한 쓰기를 제한할경우 사용 / my.cnf 에 등록 / root 계정의 경우에는 쓰기가 가능하다.)
1-2. dbname 생성 (Master 에서 연동하려는 Dbname 과 동일한 Dbname 생성)
Create database dbname;
1-3. DB import
Master DB dump 파일을 import
Mysql -u root -p dbname < dump.sql
1-4. Replication master 서버 정보 설정 (host IP Master)
Change master to
Master_host='192.168.0.*',
Master_user='slave', <--임의지정
Master_password='passwd',
Master_log_file='mysql-bin.000001',
Master_log_pos=326;
1-5. Mysql 재 시작
- 확인
1-1. Master 서버에서 show master status;
File / Position 번호
1-2. Slave 서버에서 show slave status;
File / Position 번호
1-3. 위의 정보가 동일하면 완료.
- TEST (참조:http://ijj.kr/220495833461)
( 사용자생성 grant all privileges on pakmunsung2_godo_co_kr.* to ceraondb@localhost identified by 'pakmunsun*#fkd2'; )
1-1. 테이블 생성
CREATE TABLE MT (mountain char(20),altitude int );
tip : create database database_name; ( 데이터베이스 생성 )
1-2. select
Select * from MT;
1-3. insert
insert into MT(mountain, altitude) values("설악산",1708);
insert into MT values("지리산", 1915 );
1-4. delete
Delete from MT where altitude='1708';
1-5. update
update MT set altitude ="2000" where altitude="1915";
1-6. drop
drop table MT;
flush privileges ( 재적용 )
---마무리 되었습니다. 지금까지의 테스트 master - slave / slave(master) - slave 가 가능 합니다.
시간 문제로, TEST 부분은 잘 정리된 블로그 에서 확인한 정보를 제공 합니다.
- 정보 및 이해
일단 log-slave-update에 대해서 이해를 하셔야 할 겁니다.
일반적으로 마스터 - 슬레이브/마스터 - 슬레이브를 구성하기 위해서
A (master)
--------
server-id=...
log-bin=/...
.
B ( slave/master)
---------
master-host = ...
master...
.
.
server-id=
log-bin=..
C ( slave )
-------------
master-host = B server
.
중요한 것은 MySQL의 Replication은 binary log를 읽어온다는 것입니다.
이렇게 세팅을 할 경우
A서버에서 사용자가 입력하는 문장은 A서버에 binary log로 남습니다.
B서버에서 사용자가 입력하는 문장은 B서버에 binary log로 남겠죠
B 서버는 그와 별도로 A서버의 binary log를 읽어와서 자기한테 적용을 하고 C서버는 B서버의 binary log를 읽어와서 자기한테 적용을 합니다.
그러면 여기에서 A서버에서 기록된 binary log를 B서버에서 읽어와서 자기한테 적용을 할 때 그건 B자신의 binary log에 남기는가 하는 것이죠. 이게 기본으로는 적용이 되지 않습니다. 그렇기 때문에 위와 같은 설정으로 세팅을 했을 경우에는.
( A , B ) ( B, C ) 이런 형태의 Replication이 구성이 되는 것이죠.
A에서 입력한 내용은 B에는 적용이 되지만, C에는 적용이 되지 않습니다.
이걸 가능하게 해 주는 옵션이 log-slave-update 입니다. log-slave-update 옵션이 켜져 있는 상황에서는 master에서 받아온 log에 대해서도 자기 log에 기록을 하게 됩니다.
위의 내용에서
B ( slave/master)
---------
master-host = ...
master...
server-id=
log-bin=..
log-slave-updates
문장만 추가해서 사용 가능합니다.
출처: https://applejara.tistory.com/544 [애플자라]
'Database > mysql' 카테고리의 다른 글
[MYSQL]테이블 카운트, rows (0) | 2020.07.13 |
---|---|
[MYSQL]DB복구(innodb) (0) | 2020.07.13 |
[MYSQL]MySQL 쿼리 결과를 파일로 저장하기(shell) (0) | 2020.07.13 |
[MYSQL]MySQL 쿼리 결과를 파일로 저장하기(콘솔) (0) | 2020.07.13 |
[MYSQL]InnoDB Optimize (0) | 2020.07.13 |
[MYSQL]컬럼명으로 테이블 찾기 (0) | 2020.07.13 |
mysql 백업/복구 (0) | 2020.07.13 |
mysql 비번 바꾸기 (0) | 2020.07.13 |