[SQL] A-A / Master-Slave, Slave-Master Replication ์๋ฒ ๊ตฌ์ถ ์ค์ต
ํ๋๋ master, ๋๋จธ์ง ํ๋๋ slave์ ์๋ฒ์์ ๋์์
master์ด์ slave, slave์ด์ master์ธ replication ์๋ฒ ๊ตฌ์ถ์ ๊ตฌํํด๋ณผ ๊ฒ์ด๋ค.
์ ์ ํ๋ Master-Slave ์ค์ต์ Master์์๋ง CAUD๊ฐ ์ผ์ด๋ ์ ์์๊ณ , Slave์์๋ Select๋ก ์กฐํ๋ง ๊ฐ๋ฅํด์ DB์ ์ ๋ฌด๋ฅผ ๋ถ๋ด์์ผ์คฌ๋๋ฐ, ์ด๋ Master DB๊ฐ ๊ณ ์ฅ๋ฌ์ ๋์ ๊ฒฝ์ฐ ๋ณต๊ตฌ (DR, Disaster Recovery ์ฌ๋ ๋ณต๊ตฌ) ๊ฐ ์ด๋ ต๋ค.
๋ ์๋ฒ๊ฐ ๋๋ค ์๋ก์ master์ด์ slave๊ฐ ๋๋ฉด, ์์ชฝ์์ ๋ชจ๋ ์ ๋ฌด๊ฐ ์ผ์ด๋ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ์ฑ์ด ๋ณด์ฅ๋๋ค.
VMware๋ก ๋ฆฌ๋ ์ค ์ปดํจํฐ 3๋ ์ค์น(Master DB, Slave DB)
๋ฆฌ๋ ์ค ์ปดํจํฐ 3๋๋ฅผ ์ค๋นํ๊ณ ๊ฐ ์ปดํจํฐ๋ง๋ค ์ค์ ํด์ค ๊ฒ์
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 ... -> Y
3. ๋ฐฉํ๋ฒฝ ๋๊ธฐ
setenforce 0
systemctl stop firewalld
์ด์ ์ปดํจํฐ 3๋๊ฐ ์์ฑ๋์์ผ๋ 3๋ ์ค 2๋๋ฅผ 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
Master, Slave DB์ ๋์ ํ์ธ
3. ๋์ ํ์ธ
(1) ๋ง์คํฐ, ์ฌ๋ ์ด๋ธ์์ DB ํ์ธ
show databases;
(2) ๋ง์คํฐ์์ DB ์์ฑ
CREATE DATABASE [DB์ด๋ฆ];
(3) ๋ง์คํฐ, ์ฌ๋ ์ด๋ธ ์์ DB ํ์ธ
show databases;
์ด ๋ ์์ชฝ์ DB๊ฐ ์์ฑ๋์ด ์์ด์ผ ํ๋ค.
Slave DB์ Master DB ์ค์
1) /etc/my.cnf.d/mysql-server.cnf ์ค์ ํ์ผ ์์
vi /etc/my.cnf.d/mysql-server.cnf
[mysqld] ๋ฐ์ ๋ค์ ๋ด์ฉ์ ์ถ๊ฐํ๋ค.
//๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๊ธฐ ์ํจ
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
Master DB์ Slave DB ์ค์
1) 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=[๋ง์คํฐ์ ํฌ์ง์
๋ฒํธ];
2) ๋๊ธฐํ ์์
start slave;
3) Slave ์ํ ํ์ธ
show slave status;
๋๋
show slave status\G
Master-Slave, Slave-Master DB ๋์ ํ์ธ
์ ์ชฝ์์ CREATE DATABASE๋ฅผ ํด๋ณด๊ณ ์ ์ชฝ์์ SHOW DATABASES;๋ก ๋๊ธฐํ๊ฐ ์๋ก ๋๋ ์ง ํ์ธํ๋ค.