DevLog ๐Ÿ˜ถ

[MySQL] Replication์„ ํ™œ์šฉํ•˜์—ฌ Master-Slave DB ๋ถ„๋ฆฌํ•˜๊ธฐ (1) ๋ณธ๋ฌธ

๊ฐœ๋ฐœ์ผ์ง€

[MySQL] Replication์„ ํ™œ์šฉํ•˜์—ฌ Master-Slave DB ๋ถ„๋ฆฌํ•˜๊ธฐ (1)

dolmeng2 2024. 5. 15. 18:29

 

๐ŸŒฑ ๋“ค์–ด๊ฐ€๊ธฐ ์ „

ํšŒ์‚ฌ ๋“ค์–ด๊ฐ€๊ณ  ๋ธ”๋กœ๊ทธ๊ฐ€ ๋„ˆ๋ฌด ๋œธํ•ด์ง„ ๊ฒƒ ๊ฐ™์•„์„œ, ์ด์ „์— ์“ฐ๋ ค๋‹ค๊ฐ€ ๋ชป ์“ด ๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ ์ž ํ•œ๋‹ค ๐Ÿฅน (๋ฌดํ•œ์˜ ์ž„์‹œ ์ €์žฅ...) 

์‚ฌ๋‚ด์—์„œ Replication์„ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฑด ์•Œ๊ณ  ์žˆ๋Š”๋ฐ, ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€๋Š” ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์•„์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ MySQL์„ ํ™œ์šฉํ•˜์—ฌ Replication์ด ์–ด๋–ค ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ตฌ์ถ•ํ•ด๋ณด์•˜๋‹ค. 

๊ตฌ์ฒด์ ์ธ ๋ถ€๋ถ„์€ ๋” ๊ณต๋ถ€ํ•˜๋ฉด ์ข‹๊ฒ ์ง€๋งŒ, ํ•™์Šต ์šฉ๋„๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ธ€!

 


 

๐ŸŒฑ ๋ณต์ œ๋ž€ ๋ฌด์—‡์ผ๊นŒ?

๋ณต์ œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ master ๋…ธ๋“œ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ slave ๋…ธ๋“œ์—๋„ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ์ ์šฉ์‹œํ‚ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, MySQL์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„๋™๊ธฐ ๋ณต์ œ ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜์—ฌ ๋‘˜ ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ๋งž์ถ”๊ณ  ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋น„๋™๊ธฐ ๋ณต์ œ ๋ฐฉ์‹์ด ๋ฌด์—‡์ผ๊นŒ? ๋™์ž‘ ๋ฐฉ์‹์„ ํ๋ฆ„์œผ๋กœ๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋„๋ก ํ•˜์ž.

 

0. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ปค๋ฐ‹์„ ์ง„ํ–‰ํ•œ๋‹ค. (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ ์ €์žฅ ์š”์ฒญ)
1. Connection Thread๋Š” ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—๊ฒŒ ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•œ Prepare๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.
- ํ•ด๋‹น ๋‹จ๊ณ„๋Š” Commit ์„ ์‹ค์ œ๋กœ ์ง„ํ–‰ํ•˜๋Š” ๋‹จ๊ณ„๊ฐ€ ์•„๋‹Œ, ‘์ค€๋น„’๋ฅผ ํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค. (2PC, 2 Phase Commit)
- ์ด ์‹œ์ ์— (InnoDB์˜ ๊ฒฝ์šฐ) Redo Log๋ฅผ ๊ธฐ๋กํ•˜๊ฒŒ ๋œ๋‹ค.
- ๋งŒ์•ฝ ์ด ๋‹จ๊ณ„์—์„œ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด, ๋ณต๊ตฌํ•  ๋•Œ ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์€ ๋กค๋ฐฑ๋œ๋‹ค.

2. Commit ์„ ์ง„ํ–‰ํ•˜๊ธฐ ์ „, ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ธฐ๋กํ•œ๋‹ค.
3. ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์ปค๋ฐ‹์„ ์™„๋ฃŒํ•œ๋‹ค.
- ์ด ์‹œ์ ๊นŒ์ง€ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด, ํŠธ๋žœ์žญ์…˜์€ ์ปค๋ฐ‹์ด ์™„๋ฃŒ๋˜์–ด ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์™€ (InnoDB๋ผ๋ฉด) ๋ฆฌ๋‘ ๋กœ๊ทธ๊นŒ์ง€ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค.
4-5. Master Thread๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋ฅผ ์ฝ์–ด์„œ, Slave๋กœ ์ „์†กํ•œ๋‹ค.
6. Slave์˜ I/O ์Šค๋ ˆ๋“œ๋Š” ์ˆ˜์‹ ํ•œ ๋ณ€๊ฒฝ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆด๋ ˆ์ด ๋กœ๊ทธ์— ๊ธฐ๋กํ•œ๋‹ค.
7-8. Slave์˜ SQL ์Šค๋ ˆ๋“œ๋Š” ๋ฆด๋ ˆ์ด ๋กœ๊ทธ์— ๊ธฐ๋ก๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์„œ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์— ๊ธฐ๋กํ•œ๋‹ค.

 


 

๐ŸŒฑ ์‹ค์Šต ์ค€๋น„  - ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„ ๊ตฌ์ถ•ํ•˜๊ธฐ

๊ฐ„๋‹จํ•˜๊ฒŒ ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด, docker๋ฅผ ํ™œ์šฉํ•˜์—ฌ mySQL ์„œ๋ฒ„๋ฅผ ๋„์›Œ์ฃผ์—ˆ๋‹ค.

๊ฐ€์žฅ ๋จผ์ € master ์„œ๋ฒ„๋ฅผ ๋„์›Œ์ฃผ๊ฒŒ ๋  ๊ฑด๋ฐ, mySQL์˜ ์„ค์ • ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— my.cnf ๋ผ๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ด๋‘์ž.

[mysqld]
log-bin=mysql-bin    
server-id=1          
binlog-do-db=practice  
authentication_policy=mysql_native_password

 

- [mysqld]: MySQL ์„œ๋ฒ„์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์ž‘ prefix ๊ฐ’
log-bin : ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜๊ณ , ๋กœ๊ทธ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ. ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋กœ๊ทธ ํŒŒ์ผ๋กœ ๊ธฐ๋กํ•˜๊ฒŒ ๋œ๋‹ค. 

๊ธฐ๋ณธ์ ์œผ๋กœ mySQL ์—์„œ replication์„ ์ง„ํ–‰ํ•  ๋•Œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๊ธฐ์ค€์œผ๋กœ ๋ณต์ œ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋กœ๊น…์„ ํ™œ์„ฑํ™”ํ•˜๊ฒŒ ๋œ๋‹ค.
server-id: MySQL ์„œ๋ฒ„์— ๋Œ€ํ•œ ๊ณ ์œ  ์•„์ด๋”” ๊ฐ’์œผ๋กœ, ์ถ”ํ›„ ๊ตฌ์ถ•ํ•  slave ์šฉ ์„œ๋ฒ„์™€ ๊ผญ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •์„ ํ•ด์ค˜์•ผ ํ•˜๋Š” ๊ฐ’์ด๋‹ค. ๋ณต์ œ๋œ ํ”„๋กœ์„ธ์Šค๋“ค ์‚ฌ์ด์—์„œ ๊ฐ mySQL ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’์ด๋‹ค.
binlog-do-db: ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊น…์„ ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ์ถ”ํ›„ ๋งŒ๋“ค ‘practice’ ๋ผ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ๋กœ๊น…์„ ํ—ˆ์šฉํ•˜๋„๋ก ์ง€์ •ํ•ด์ฃผ์—ˆ๋‹ค.
authentication_policy : MySQL 8.0๋ถ€ํ„ฐ๋Š” SHA-256 Hashing์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ 2๊ฐ€์ง€์˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ caching_sha2_password ๋ผ๋Š” ์บ์‹ฑ์„ ํ™œ์šฉํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™œ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋•Œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ SSL ๋ณด์•ˆ ์—ฐ๊ฒฐ์ด๋‚˜ RSA ๋ณด์•ˆ์„ ์ ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๊ฝค๋‚˜ ๋ฒˆ๊ฑฐ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ๋ฒ„์ „ ํ”Œ๋Ÿฌ๊ทธ์ธ์ธ mysql_native_password์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (์ด ๋ถ€๋ถ„์„ ๋นผ๋จน์œผ๋ฉด ๋‚˜์ค‘์— ํ†ต์‹ ์ด ์•ˆ ๋œ๋‹ค…)

 

 

์ด๋Ÿฌํ•œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๋‹ค๋ฉด, ์„ค์ • ํŒŒ์ผ์„ ์ ์šฉํ•œ Dockerfile์„ ๋งŒ๋“ค์–ด ์ฃผ์ž.

FROM mysql:8.0

COPY ./my.cnf /etc/my.cnf

 

mySQL 8.0 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์˜€์œผ๋ฉฐ, ์œ„์—์„œ ๋งŒ๋“ค์—ˆ๋˜ my.cnf ํŒŒ์ผ์„ ์„ค์ • ํŒŒ์ผ๋กœ ํ™œ์šฉํ•˜๋„๋ก ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด COPY๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ์„ค์ • ํŒŒ์ผ์„ ๋ฎ์–ด์”Œ์šฐ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ , ๋งŒ๋“  Dockerfile์„ ํ™œ์šฉํ•˜์—ฌ ๋„์ปค ์ธ์Šคํ„ด์Šค๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋„๋ก docker-compose๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋„๋ก ํ•˜์ž.

version: '3'
services:
  mysql:
    build: .
    container_name: mysql
    environment:
      MYSQL_DATABASE: practice
      MYSQL_ROOT_PASSWORD: test
    ports:
      - 3306:3306 # HOST:CONTAINER
    volumes:
      - ./mysql/data:/var/lib/mysql
    networks:
      - practice-net

networks:
  practice-net:
    driver: bridge

 

- image ๋Œ€์‹ ์— build๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ (.)์— ์žˆ๋Š” Dockerfile์„ ํ™œ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Œ๊ณ  ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.
- ๋˜ํ•œ, slave์™€ ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปค์Šคํ…€ํ•˜๊ฒŒ ๋„คํŠธ์›Œํฌ๋ฅผ ์ •์˜ํ•ด์ฃผ์—ˆ๋‹ค. (์š”๊ฒƒ๋„ ์„ค์ • ์•ˆ ํ•ด์ฃผ๋ฉด ๋‚˜์ค‘์— ํ†ต์‹ ์ด ์•ˆ ๋œ๋‹ค… ๊ผญ ์„ค์ •ํ•ด๋‘๋„๋ก ํ•˜์ž.)
- ์ฐธ๊ณ ๋กœ, ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์€ ํ˜„์žฌ ์œ„์น˜ํ•œ {ํŒจํ‚ค์ง€ ์ด๋ฆ„_์„ค์ •ํ•œ ์ด๋ฆ„} ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๋‚˜์˜ ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์ด master-practice-net์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

 

๋‹ค ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด, ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์›Œ์ฃผ์ž. -d๋ฅผ ํ†ตํ•ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋„์šธ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

docker-compose -f docker-compose.yml up -d

 

์ •์ƒ์ ์œผ๋กœ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด, ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€๋กœ ์ ‘์†ํ•˜์—ฌ ์„ค์ • ํŒŒ์ผ์ด ์ž˜ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

docker exec -it {containerID} bash

 

mySQL ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ํ…Œ์ง€๋งŒ, ๋‚˜์˜ ๊ฒฝ์šฐ /etc ํ•˜์œ„์— ์„ค์ • ํŒŒ์ผ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์กด์žฌํ•˜์˜€์œผ๋ฉฐ, ํŒŒ์ผ ๋‚ด์šฉ์ด ์œ„์™€ ๊ฐ™์ด ์ž˜ ๋ณ€๊ฒฝ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

์ฐธ๊ณ ๋กœ, ๋‚˜์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์ €๊ฒƒ ์‚ฝ์งˆํ•˜๋ฉด์„œ ์‹œ๊ฐ„์„ ๋งŽ์ด ๋ณด๋ƒˆ์—ˆ๋Š”๋ฐ ํ˜น์‹œ๋‚˜ ์„ค์ •์„ ์ž˜๋ชปํ•˜์—ฌ my.cnf ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด, ๊ผญ ๋นŒ๋“œ ์‹œ no-cache ์˜ต์…˜์„ ์„ค์ •ํ•ด๋‘๋„๋ก ํ•˜์ž. ์•„๋‹ˆ๋ฉด ์บ์‹œ๋กœ ์ธํ•ด์„œ ์ ์šฉ์ด ๋Šฆ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ์™œ ์•ˆ ๋˜์ง€? ๋ผ๋ฉฐ ์‹œ๊ฐ„์„ ๋ณด๋‚ด๋Š” ์ผ์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค...

docker-compose build --no-cache

 


 

๐ŸŒฑ ์‹ค์Šต ์ค€๋น„  - ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„ ๊ตฌ์ถ•ํ•˜๊ธฐ

- ๋น„์Šทํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๋„ ๊ตฌ์ถ•ํ•˜๊ณ ์ž ํ•œ๋‹ค. ์„ค์ • ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

[mysqld]
log-bin=mysql-bin    
server-id=2  
relay_log=/var/lib/mysql/mysql-relay-bin
log_replica_updates='ON'
read_only='ON'
authentication_policy=mysql_native_password

 

- ์•ž์„œ ๋งํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ, server-id์˜ ๊ฐ’์€ ๊ผญ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์™€ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
relay_log๋ฆด๋ ˆ์ด ๋กœ๊ทธ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.
log_replica_updates: ๋ฆด๋ ˆ์ด ๋กœ๊ทธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ž์‹ ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉํ•˜๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์—๋„ ๊ธฐ๋กํ•œ๋‹ค.
read_only: ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๋Š” ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. (๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์—์„œ๋งŒ ์“ฐ๊ธฐ ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•˜๋„๋ก ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์„ค์ •ํ•ด์ค€๋‹ค.)
    - ์ฐธ๊ณ ๋กœ, super ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด์„œ๋Š” ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค!

 

๋‹ค์Œ์œผ๋กœ docker-compose ๋„ ๋งŒ๋“ค์–ด์ฃผ์ž. ํฌํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์€ ๋‹ค๋ฅด๊ฒŒ, ๊ทธ๋ฆฌ๊ณ  ๋„คํŠธ์›Œํฌ ์ •๋ณด๋Š” ๊ผญ ๋™์ผํ•˜๊ฒŒ ์„ค์ •ํ•ด์ฃผ์ž.

version: '3'
services:
  mysql:
    build: .
    container_name: mysql-slave
    environment:
      MYSQL_DATABASE: practice
      MYSQL_ROOT_PASSWORD: test
    ports:
      - 3307:3306 # HOST:CONTAINER
    volumes:
      - ./mysql/data:/var/lib/mysql
    networks:
      - practice-net

networks:
  practice-net:
    external: true
    name: master_practice-net

 

๊ทธ๋ฆฌ๊ณ , ์ปจํ…Œ์ด๋„ˆ์— ์ ‘์†ํ•œ ๋‹ค์Œ ์‹ค์ œ๋กœ read_only ๊ฐ™์€ ์˜ต์…˜์ด ์ž˜ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

show global variables like '%read_only%';

 

 

 


 

 

๐ŸŒฑ ์—ฐ๋™ํ•˜๊ธฐ 

 

โœ”๏ธ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๋ฅผ ์œ„ํ•œ ๊ณ„์ • ๋งŒ๋“ค๊ธฐ

 

Replication ์—์„œ๋Š” Slave Thread๊ฐ€ Master Thread ์ชฝ์œผ๋กœ ์ ‘์†์„ ์š”์ฒญํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Slave๊ฐ€ ์ผ์ข…์˜ ํด๋ผ์ด์–ธํŠธ์ด๊ณ , Master๊ฐ€ ์„œ๋ฒ„๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ Master์—๋Š” Slave๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ„์ •๊ณผ ๊ถŒํ•œ (Replication Slave)๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ณ„์ •์„ ์ƒ์„ฑํ•˜๊ณ  ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์ฃผ์ž.

mysql -u root -p
create user 'test-replication'@'%' identified by 'test';
grant replication slave on *.* to 'test-replication'@'%';
flush privileges;

 

๊ถŒํ•œ์ด ์ •์ƒ์ ์œผ๋กœ ์ž˜ ๋ถ€์—ฌ๋˜์—ˆ๋Š”์ง€ ํ•œ ๋ฒˆ ํ™•์ธํ•˜๊ณ  ๋„˜์–ด๊ฐ€์ฃผ์ž.

use mysql;
select user, host from user;
show grants for 'test-replication'@'%';

 

์œ„์™€ ๊ฐ™์ด slave ๊ถŒํ•œ์ด ์ž˜ ๋ถ€์—ฌ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ณธ๊ฒฉ์ ์ธ ์—ฐ๋™์„ ์œ„ํ•˜์—ฌ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊น… ์ƒํƒœ๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

show master status;

 

File: ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ํŒŒ์ผ์˜ ์ด๋ฆ„์ด๋‹ค.
Position: ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ํŒŒ์ผ ๋‚ด์˜ ์˜คํ”„์…‹์ด๋ฉฐ, ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณต์ œ๋ฅผ ์™„๋ฃŒํ•œ ์ง€์ ์— ๋Œ€ํ•ด ๋‚˜ํƒ€๋‚ธ๋‹ค.
Binlog_Do_DB: ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊น…์ด ํ™œ์„ฑํ™”๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์•ž์„œ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•ด์ฃผ์—ˆ์„ ๋•Œ practice ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด ์ง€์ •ํ–ˆ๋˜ ๊ฒƒ์ด ์—ฌ๊ธฐ์— ๋ฐ˜์˜๋œ ๊ฒƒ์ด๋‹ค.
Binlog_Ignore_DB: ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊น…์—์„œ ์ œ์™ธ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.
Executed_Gtid_set: GTID (Global Transaction Identifier), ํ•ด๋‹น ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋œ ๋ชจ๋“  ํŠธ๋ Œ์žญ์…˜์˜ GTID๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ปค๋ฐ‹๋œ ํŠธ๋žœ์žญ์…˜๋“ค์ด ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๊ณ ์œ ํ•œ ์‹๋ณ„์ž์ด๋‹ค. (๋งˆ์Šคํ„ฐ-์Šฌ๋ ˆ์ด๋ธŒ ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ)

-> ๊ธฐ๋ณธ์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜๋ฉด GTID๋ฅผ ํ• ๋‹น๋ฐ›์•„ ๋งˆ์Šคํ„ฐ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์— ๊ธฐ๋ก์ด ๋œ๋‹ค. ์ด๋•Œ, ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์— ์žˆ๋˜ ๋‚ด์šฉ์„ ๋ฆด๋ ˆ์ด ๋กœ๊ทธ์— ์ €์žฅํ•˜๋ฉด, GTID ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ ํ•ด๋‹น ํŠธ๋žœ์žญ์…˜์ด ์•„์ง ๋ฏธ๋ฐ˜์˜๋œ ์ƒํƒœ๋ผ๋ฉด ๋ฐ˜์˜ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šฌ๋ ˆ์ด๋ธŒ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์—๋„ ๊ธฐ๋กํ•˜๊ฒŒ ๋œ๋‹ค.

 


 

โœ”๏ธ ์—ฐ๋™ํ•˜๊ธฐ  - ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ ์•Œ์•„๋‚ด๊ธฐ

 

์—ฌ๊ธฐ๊นŒ์ง€ ์ง„ํ–‰ํ–ˆ๋‹ค๋ฉด ์ด์ œ ๋‘ ์„œ๋ฒ„์— ๋Œ€ํ•ด ์—ฐ๊ฒฐ์„ ํ•ด์ค„ ์ฐจ๋ก€์ด๋‹ค. ๋จผ์ €, ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ์ปจํ…Œ์ด๋„ˆ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

์ด๋Š”, ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๊ฐ€ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ๊ณผ์ •์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์–ด๋–ค ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ž…๋ ฅํ•˜์ž.

docker inspect {container_name} | grep Network


๋งŒ์•ฝ ์œ„์˜ ์บก์ณ ํ™”๋ฉด์ฒ˜๋Ÿผ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์™€ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์˜ ๋„คํŠธ์›Œํฌ ์ •๋ณด๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค. (๋ฌผ๋ก  ์žฌ์ƒ์„ฑ์„ ํ•ด๋„ ๊ดœ์ฐฎ๋‹ค)

// mysql-slave ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด slave_default ๋„คํŠธ์›Œํฌ ๋Š์–ด์ฃผ๊ธฐ
docker network disconnect slave_default mysql-slave

// ๋Œ€์‹  master_default ๋„คํŠธ์›Œํฌ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๊ธฐ
docker network connect master_default mysql-slave


๊ทธ๋Ÿผ ์œ„์™€ ๊ฐ™์ด master ์ปจํ…Œ์ด๋„ˆ์™€ ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ ์•„์ด๋””๋ฅผ ํ• ๋‹น๋ฐ›์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.    

 

์œ„์—์„œ ํ™•์ธํ•œ ๋„คํŠธ์›Œํฌ ์•„์ด๋””๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ, ์ „์ฒด docker ๋„คํŠธ์›Œํฌ ๋ชฉ๋ก์„ ํ™•์ธํ•˜์—ฌ ์–ด๋–ค ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜์ž.   

docker network ls

 

 

์•ž์„œ ๋ดค๋˜ ๋„คํŠธ์›Œํฌ ์•„์ด๋””๊ฐ€ 95dc~ ๋กœ ์‹œ์ž‘ํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ํ˜„์žฌ ์—ฐ๊ฒฐ๋œ ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์ด ‘master_default’ ์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•ด๋‹น ๋„คํŠธ์›Œํฌ์˜ IP ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‹ค์‹œ ์ž…๋ ฅํ•ด์ฃผ์ž.

docker inspect {network_name} | grep IPv4Address

 


 

โœ”๏ธ ์—ฐ๋™ํ•˜๊ธฐ  - ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์—์„œ ์ ‘์†ํ•˜๊ธฐ

 

์ด์ œ IP ์ฃผ์†Œ๋„ ์•Œ๊ฒŒ ๋˜์—ˆ์œผ๋‹ˆ, ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์ž.

CHANGE MASTER TO MASTER_HOST='172.29.0.2', MASTER_PORT=3306, MASTER_USER='test-replication', MASTER_PASSWORD='test', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=880, GET_MASTER_PUBLIC_KEY=1;

 

 

 - MASTER_HOST / MASTER_PORT: ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ / Port๋กœ, ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๊ฐ€ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•ด ์•Œ์•„์•ผ ํ•˜๋Š” IP ์ •๋ณด์™€ ํฌํŠธ ์ •๋ณด์ด๋‹ค.

- MASTER_USER / MASTER_PASSWORD: ์ด์ „์— ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์—์„œ ์ƒ์„ฑํ–ˆ๋˜ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์šฉ ๊ณ„์ • ์ •๋ณด์ด๋‹ค.

- MASTER_LOG_FILE / MASTER_LOG_POST: ์•ž์„œ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ํŒŒ์ผ ์ •๋ณด์—์„œ ๋ดค๋˜ ํŒŒ์ผ ์ด๋ฆ„๊ณผ ์˜คํ”„์…‹ ์ •๋ณด์ด๋‹ค. (์–ด๋””์„œ๋ถ€ํ„ฐ ์ฝ์–ด์˜ฌ ๊ฒƒ์ธ์ง€ ์ •ํ•˜๋Š” ๊ฒƒ)
- GET_MASTER_PUBLIC_KEY=1 : ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ๋•Œ ๋งˆ์Šคํ„ฐ์˜ ๊ณต๊ฐœํ‚ค๋ฅผ ์ž๋™์œผ๋กœ ์š”์ฒญํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

์—ฐ๋™์„ ์‹œ์ž‘ํ•ด์ฃผ๊ธฐ ์œ„ํ•ด start slave๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์ž.

์žฌ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” stop replica > reset slave;๋ฅผ ํ™œ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค.    

start slave;


๋งˆ์ง€๋ง‰์œผ๋กœ ์—ฐ๋™์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ณด์ž.

 show slave status\G


์—ฌ๊ธฐ์—์„œ Slave_IO_Running, Slave_SQL_Running์˜ ๊ฐ’์ด ๋ชจ๋‘ Yes๋กœ ํ‘œ์‹œ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.

๋งŒ์•ฝ Slave_IO_Running๊ฐ€ Connecting์œผ๋กœ ๋œฌ๋‹ค๋ฉด, ์•„๋ž˜๋กœ ๋‚ด๋ ค Last_IO_Error ํ•ญ๋ชฉ์„ ๋ณด์ž.


๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ดˆ๊ธฐ์— network ์„ค์ •์„ ์ œ๋Œ€๋กœ ์•ˆ ํ•ด์ค˜์„œ ์ด๋ ‡๊ฒŒ ํ†ต์‹ ์ด ์‹คํŒจํ–ˆ์—ˆ๋‹ค.

 


ํ˜น์€, ์ด๋Ÿฐ ์‹์œผ๋กœ Authentication ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด, ์ดˆ๊ธฐ์— mysql ์„ค์ • ํŒŒ์ผ์—์„œ default_authentication_plugin ๊ฐ’์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์•˜์„ ํ™•๋ฅ ์ด ๋†’๋‹ค… ์™œ ์•ˆ ๋˜๋Š”์ง€ ๋‚˜๋„ ์•Œ๊ณ  ์‹ถ์ง€ ์•Š์•˜์ง€๋งŒ ์ด 2๊ฐ€์ง€ ์˜ค๋ฅ˜ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์„ ๋งŽ์ด ์ผ๋‹ค.

์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์—์„œ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„ ์—ฐ๋™ ์‹œ GET_MASTER_PUBLIC_KEY ์ด ์˜ต์…˜์„ ๋นผ๋จน์—ˆ์„ ํ™•๋ฅ ๋„ ์žˆ๋‹ค…! ์ž˜ ํ™•์ธํ•ด๋ณด์ž.
    
์ตœ์ข…์ ์œผ๋กœ ์ œ๋Œ€๋กœ ๋˜์—ˆ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‘˜ ๋‹ค Yes๋กœ ๋œฐ ๊ฒƒ์ด๋‹ค.
ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ๊ฐ€ ์ด์ „๊ณผ ๋‹ค๋ฅธ ์ด์œ ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๊ฝค ์—ฌ๋Ÿฌ ๋ฒˆ ๋–ด์—ˆ์–ด์„œ ๋‹ค์‹œ ๋งŒ๋“œ๋Š๋ผ ๋ฐ”๋€Œ์—ˆ๋‹ค.


    
๋งˆ์Šคํ„ฐ์—์„œ๋„ ์Šฌ๋ ˆ์ด๋ธŒ์˜ ์ ‘์† ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ด๋ณด์ž.

show processlist\G


๊ฐ€์žฅ ์•„๋ž˜์— ์šฐ๋ฆฌ๊ฐ€ ์—ฐ๋™ํ–ˆ๋˜ test-replication ์ด๋ผ๋Š” ์นœ๊ตฌ์— ๋Œ€ํ•ด State๋กœ ‘source๊ฐ€ ๋ชจ๋“  binlog๋ฅผ replication์„ ๋ณด๋ƒˆ๋‹ค’ ๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค!

 




๐ŸŒฑ ๋ณต์ œ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ธฐ

๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด ๋„ฃ๊ณ  ํ•œ ๋ฒˆ ํ™•์ธํ•ด๋ณด์ž.

use practice;

create table test(
    id bigint not null primary key,
    name varchar(100)
) engine = 'INNODB';

insert into test (id, name) values (1, 'test');

 

insert ํ›„ ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์˜ ๋ชจ์Šต์ด๋‹ค. 


๊ทธ๋ฆฌ๊ณ , ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜ ๋ณต์ œ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

 

์œ„์™€ ๊ฐ™์ด ์ž˜ ๋ณต์ œ๊ฐ€ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค! 

(๋ฐ์ดํ„ฐ ๊ฐ’์ด ๋˜‘๊ฐ™์•„์„œ ์•„๋‹Œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ๋กœ ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„์— ์ ‘์†ํ–ˆ์„ ๋•Œ ๋‚˜์˜จ ๊ฒฐ๊ณผ์ด๋‹ค!


 

๐ŸŒฑ ๋งˆ๋ฌด๋ฆฌ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” mySQL์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ master <-> slave ๊ฐ„ replication ์„ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.

์‹ค๋ฌด์—์„œ๋Š” ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์ ๋“ค์ด ํ›จ์”ฌ ๋” ๋งŽ๊ฒ ์ง€๋งŒ, master์˜ ๋‚ด์šฉ์ด ์•Œ์•„์„œ slave๋กœ ๋ณต์ œ๋˜๋Š” ๋ชจ์Šต์„ ์ง์ ‘ ๋ณด๋‹ˆ๊นŒ ๊ต‰์žฅํžˆ ์‹ ๊ธฐํ–ˆ๋‹ค. 

์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ์—„์ฒญ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ ธ๋Š”๋ฐ, ์‹ค์ œ๋กœ๋Š” ํ›จ์”ฌ ๋ณต์žกํ•˜๊ฒŒ ๋™์ž‘ํ•  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๊ณ ๋ฏผ๋„ ๋“ค์—‡๋‹ค.

์‹ค์ œ๋กœ ์ผ์„ ํ•˜๋ฉด์„œ ์ด๋Ÿฐ ๊ฒƒ๊นŒ์ง€ ์ œ๋Œ€๋กœ ๊ณ ์ฐฐํ•ด๋ณด์ง€ ๋ชปํ–ˆ์—ˆ๋Š”๋ฐ, ์•ž์œผ๋กœ๋Š” ์ด๋Ÿฐ ์‹์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์€ ์‹ค์Šตํ•ด๋ณด๋Š” ์‹์œผ๋กœ ๊ณต๋ถ€ํ•ด๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

 

๋‹ค์Œ ํฌ์ŠคํŒ…์ด ์–ธ์ œ๊ฐ€ ๋ ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ... ์‹œ๊ฐ„ ๋‚ด์„œ 2ํŽธ๋„ ์ž‘์„ฑํ•ด๋ด์•ผ๊ฒ ๋‹ค. ๋!

Comments