728x90

/etc/my.cnf 설정 파일 수정


Master DB


/etc/my.cnf 설정 파일 수정

vi /etc/my.cnf

[mysqld]
server-id=10
log-bin=mariadb-bin	# 바이너리 기록
autocommit=0
...

 

서비스 재시작

systemctl restart mariadb.service

 

DB 사용자 설정

 

[사용자 생성 + 권한 설정]

GRANT 권한 ON 데이터베이스.테이블 TO 사용자@'호스트'

mysql -u root -p

# replica 사용자에게 모든 데이터베이스의 모든 테이블에 대한 권한 지정 
# @'localhost': 로컬 호스트만
# @'%': 모든 사용자

GRANT replication slave ON *.* TO replica@'%' identified by '123';

# 사용자 설정에 대한 변경 값 적용
flush privileges

 


Slave DB


/etc/my.cnf 설정 파일 수정

vi /etc/my.cnf

[mysqld]
server-id=20
log-bin=mariadb-bin
read_only=1
report-host=slave.goorm.com

 

서비스 재시작

systemctl restart mariadb

 


데이터 백업 구성


 

 

 

Master DB: 데이터 백업 전에 DB 잠금 설정

MariaDB [(none)]> flush tables with read lock;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> show master status;
+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000001 |      460 |              |                  |
+--------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

# Position 번호 확인

 

Master DB: 논리적 백업 (새로운 터미널에서 작업)

mysqldump -u root -p --all-databases --lock-all-tables --events > mysql_dump.sql
Enter password:

# 생성된 파일 확인
ls
mysql_dump.sql

 

Master DB: 원래 터미널에서 잠금 해제

MariaDB [(none)]> unlock tables;

 

 

Master DB: 백업 파일을 Slave DB로 복사

scp mysql_dump.sql root@10.0.2.20:/tmp

 

 

Slave DB: 백업 데이터 복원

[root@slave ~]# mysql -u root -p < /tmp/mysql_dump.sql
	-> 복원만 하는 작업 (로그인 아님)
[root@slave ~]# mysql -u root -p
	-> 설정을 위해 로그인

 

Slave DB: 마스터 지정 및 설정

# IP주소, 사용자 이름/패스워드 , log_file / log_pos 는 
# 마스터에서 show master status; 로 확인 후 입력

MariaDB [(none)]> change master to master_host='10.0.2.10' ,
-> master_user='replica', master_password='123', 
-> master_log_file='mariadb-bin.000001',
-> master_log_pos=460;

MariaDB [(none)]> start slave;

 

 

Slave DB: 설정 확인

MariaDB [(none)]> show slave status \G

 

 


데이터 동기화 확인


Master DB: 데이터 수정

[root@master ~]# mysql -u root -p
Enter password:

MariaDB [(none)]> USE testdb;
MariaDB [testdb]> INSERT INTO first_tab VALUE(5,'n');                 
Query OK, 1 row affected (0.00 sec)
MariaDB [testdb]> COMMIT;
Query OK, 0 rows affected (0.04 sec)

MariaDB [testdb]> SELECT * FROM first_tab;
+------+------+
| id   | name |
+------+------+
|    1 | k    |
|    2 | a    |
|    5 | n    |
+------+------+
3 rows in set (0.00 sec)

 

* 만약 커밋을 하지 않으면 변경 사항이 저장되지 않기 때문에 서로 데이터가 다르게 보일 수 있음

 

Slave DB: 수정된 데이터 확인

MariaDB [(none)]> use testdb;
MariaDB [testdb]> SELECT * FROM first_tab;
+------+------+
| id   | name |
+------+------+
|    1 | k    |
|    2 | a    |
|    5 | n    |
+------+------+
3 rows in set (0.00 sec)

 

 

좌: Master DB, 우: Slave DB

 

728x90

+ Recent posts