‡๐Ÿ‘ฉ‍๐Ÿ’ป ‡/ºDatabase

[MySQL] Master-Server Replication ์„œ๋ฒ„ ๊ตฌ์ถ• ์‹ค์Šต

Trudy | ์†ก์—ฐ 2023. 11. 7. 17:20

VMware๋กœ ๋ฆฌ๋ˆ…์Šค ์ปดํ“จํ„ฐ 2๋Œ€ ์„ค์น˜(Master DB, Slave DB)

 

ํ•˜๋‚˜๋Š” master, ๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋Š” slave์˜ ์„œ๋ฒ„๋กœ MySQL Replication์„ ๊ตฌํ˜„, ์‹ค์Šต ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค. 

 

๊ฐ ์ปดํ“จํ„ฐ๋งˆ๋‹ค ์„ค์ •ํ•ด์ค„ ๊ฒƒ์€

1. IP ์„ค์ • (master์€ 10.10.10.5, slave๋Š” 10.10.10.6์œผ๋กœ IP์ฃผ์†Œ๋ฅผ ์„ธํŒ…)

1-1. ๋„คํŠธ์›Œํฌ ์„ค์ • ํŒŒ์ผ ํŽธ์ง‘ 
vi /etc/sysconfig/network-scripts/ifcfg-ens160

//VI ํŽธ์ง‘๊ธฐ์— ๋“ค์–ด์™€์„œ ๋ฌธ์„œ ์ˆ˜์ •
ONBOOT=yes    : ๋ถ€ํŒ…ํ•  ๋•Œ ์ด ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•ด์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ์„ธํŒ…ํ•˜๊ฒ ๋‹ค
IPADDR=10.10.10.3      :์›ํ•˜๋Š” IP๋กœ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•ด์คŒ
NETMASK=255.255.255.0      :์„œ๋ธŒ๋„ท ๋งˆ์Šคํฌ ์„ค์ •
GATEWAY=10.10.10.2
DNS1=8.8.8.8

1-2. ์žฌ๋ถ€ํŒ…
init 6   

1-3. IP ์ฃผ์†Œ๊ฐ€ ์ž˜ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š” ์ง€ ํ™•์ธ
ip addr    

1-4. ์ธํ„ฐ๋„ท์ด ์ž˜ ๋˜๋Š” ์ง€ ํ™•์ธ
ping 8.8.8.8


2. mysql-server ์„ค์น˜

 

2-1. DB ์„œ๋ฒ„ ์„ค์น˜
yum install -y mysql-server

2-2. DB ์„œ๋ฒ„ ์‹คํ–‰
systemctl start mysqld

2-3. mysql ์ดˆ๊ธฐํ™”
mysql_secure_installation 
		-> No -> ๋น„๋ฐ€๋ฒˆํ˜ธ์ž…๋ ฅ -> ์žฌ์ž…๋ ฅ -> Y -> Y -> Y

์ด์ œ ์ปดํ“จํ„ฐ ๋‘ ๋Œ€๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์œผ๋‹ˆ ๊ฐ๊ฐ์˜ ์ปดํ“จํ„ฐ๋ฅผ Master DB, Slave DB๋กœ ์„ค์ •ํ•ด๋ณด์ž! 

 

Master DB ์„ค์ •

    1) /etc/my.cnf.d/mysql-server.cnf ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •
  		 vi /etc/my.cnf.d/mysql-server.cnf 
    
		[mysqld] ๋ฐ‘์— ๋‹ค์Œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
    
   		 //1์ด ํŠน๋ณ„ํ•œ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ ๋Œ€์ด๋‹ค ๋ณด๋‹ˆ๊นŒ ๊ตฌ๋ณ„ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ id๋ฅผ ์„ค์ •ํ•จ
		 server-id = 1  
   		 //๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•จ
		 log-bin = mysql-bin
 
 	2) ์„ค์ • ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด restart์„ ํ•ด์ค˜์•ผ ํ•จ
    	systemctl restart mysqld

    3) Master ์ƒํƒœ ํ™•์ธ
		mysql -u root -p ๋กœ๊ทธ์ธ ํ›„
		show master status;

    4) Replicationํ•  ๋•Œ ์‚ฌ์šฉํ•  ๊ณ„์ • ์ƒ์„ฑ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ
    	//Master DB์— ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉํ•  Slave๋ฅผ ์œ„ํ•œ master์˜ user๋ฅผ ๋งŒ๋“ฆ
		CREATE USER '[์ด๋‹ˆ์…œ]'@'[Slave์˜ IP์ฃผ์†Œ]' IDENTIFIED BY '[ํŒจ์Šค์›Œ๋“œ]';
	
		GRANT REPLICATION SLAVE ON *.*  TO '[์ด๋‹ˆ์…œ]'@'[Slave์˜ IP์ฃผ์†Œ]';
	
    
 	5) Repl_slave_priv ์†์„ฑ์ด Y๋กœ ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธ
		SELECT * FROM mysql.user where user='[์ด๋‹ˆ์…œ]'\G

 

Slave DB ์„ค์ •

    // Master์˜ log ๋ฒˆํ˜ธ, ํฌ์ง€์…˜ ๋ฒˆํ˜ธ๋Š” Master์—์„œ ํ™•์ธ ํ›„ Slave์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ! 


    1) /etc/my.cnf.d/mysql-server.cnf ํŒŒ์ผ ์ˆ˜์ •
    vi /etc/my.cnf.d/mysql-server.cnf
    
	[mysqld]๋ฐ‘์— ๋‹ค์Œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
	
	server-id = 2
	
    1-1) ์„ค์ • ํŒŒ์ผ์„ ์ˆ˜์ •ํ–ˆ์œผ๋‹ˆ ์žฌ์‹œ์ž‘
	systemctl restart mysqld

    2) Master ์ง€์ •
	mysql -u root -p
	change master to
    master_host='[๋งˆ์Šคํ„ฐ์˜ IP์ฃผ์†Œ]',
	master_user='[๋งˆ์Šคํ„ฐ์—์„œ ๋งŒ๋“  slave์šฉ ๊ณ„์ • ์ด๋ฆ„]',
	master_password='[๋งˆ์Šคํ„ฐ์—์„œ ๋งŒ๋“  slave์šฉ ๊ณ„์ •์˜ PW]',
	master_log_file='mysql-bin.[๋งˆ์Šคํ„ฐ์˜ ๋กœ๊ทธ ๋ฒˆํ˜ธ]',
	master_log_pos=[๋งˆ์Šคํ„ฐ์˜ ํฌ์ง€์…˜ ๋ฒˆํ˜ธ];

    3) ๋™๊ธฐํ™” ์‹œ์ž‘
	start slave;

    4) Slave ์ƒํƒœ ํ™•์ธ
	show slave status;

		๋˜๋Š”

	show slave status\G

 

* ์œ„ ๋™๊ธฐํ™”๊ฐ€ ์ž˜ ์•ˆ๋  ๋•Œ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ์ 


  (1) ์Šฌ๋ ˆ์ด๋ธŒ
	stop slave;

  (2) ๋งˆ์Šคํ„ฐ
	๋งˆ์Šคํ„ฐ ์ƒํƒœ ํ™•์ธ

  (3) ์Šฌ๋ ˆ์ด๋ธŒ
	change master to ๋ช…๋ น์–ด๋กœ ์„ค์ •

	start slave;
    
   (4) ๊ธฐํƒ€ (DB์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ)
   	 ๋„คํŠธ์›Œํฌ ํ™•์ธ
    	 ๋ฐฉํ™”๋ฒฝ ํ™•์ธ

Master, Slave DB์˜ ๋™์ž‘ ํ™•์ธ

3. ๋™์ž‘ ํ™•์ธ
  (1) ๋งˆ์Šคํ„ฐ, ์Šฌ๋ ˆ์ด๋ธŒ์—์„œ DB ํ™•์ธ
	show databases;

  (2) ๋งˆ์Šคํ„ฐ์—์„œ DB ์ƒ์„ฑ
	CREATE DATABASE [DB์ด๋ฆ„];

  (3) ๋งˆ์Šคํ„ฐ, ์Šฌ๋ ˆ์ด๋ธŒ ์—์„œ DB ํ™•์ธ
	show databases;    

	์ด ๋•Œ ์–‘์ชฝ์— DB๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.