본문 바로가기

[Linux]

[Linux] 리눅스 DB Backup / Replication

반응형

DB 백업

물리적인 백업

db상의 데이터를 담고있는 파일 자체를 백업

전용 백업솔루션 사용

리눅스 상에서 데이터 저장 위치 : /var/lib/mysql

 

 

논리적인 백업

똑같은 데이터를 생성할 수 있는 sql 쿼리문을 만들어서 백원

mysqldump

 

mysqldump

 - mysqldump [option] --all-databases

 - 전체 DB 백업 진행

 - "--all-databases" 옵션을 사용 할 경우 백업대상 테이블에 LOCK 설정을 진행 후 작업을 진행한다. 

 - 백업 작업 시 새로운 데이터가 생성되거나 하느 것을 방지하기 위해 LOCK 설정을 진행한다.

 - mysqldump에서는 기본값으로 전체 테이블의 LOCK 설정을 진행 후 dump 작업을 수행

 

# mysqldump -u root -p --all-databases > 20220719_all_backup.sql

Sample database 삭제 후 sql문으로 복원작업

 

부분백업도 가능

mysqldump -u root -p --databases Sample > 20220719_Sample_Backup.sql (Sample 데이터베이스 백업)

mysqldump -u root -p Sample subject > 20220719_Sample.subject_Backup.sql (Sample 데이터베이스의 subject 테이블 백업)

 


Database Replication 복제 

Database Replication이란 DBMS 복제를 말하며, 같은 데이터를 저장하는 DBMS가 2대 이상 존재하는 환경구성을 말한다.

Database Replication을 구성하기 위해서는 최소 2대이상의 DBMS가 필요하며, 각각 Master/Slave로 구분하여 복제 서비스를 구성한다.

MASTER 역할

웹서버의 데이터 변경 요청을 받아들여, 새로운 데이터를 등록하거나 기존 데이텅 대한 수정, 삭제 작업을 수행

쓰기 전용  DBMS : insert, delete, update SQL 처리

웹서버로부터 생성된 새로운 데이터 등록 및 기존 데이터에 대한 수정, 삭제 작업에 대한 바이너리 로그를 생성 후 Slave 서버로 전달

 

SLAVE 역할

웹서버의 데이터 요청을 받아들여 데이터를 웹서버에게 전달하는 역할 

읽기 전용 DBMS : select SQL 처리

Master 서버로 부터 전달받은 바이너리 로그를 자신의 database 정보로 반영

Replication 구성 시 주의사항

1. Replication을 사용하는 DBMS는 동일한 DBMS로 사용

2. Replication을 사용하는 DBMS는 동일한 버전이 좋으며, 버전이 다른 경우 Slave 서버가 상위 버전이어야 한다.

3. Replicaiton을 시작시 Master > Slave 순으로 시작

 

DB Replicaion 역할

1. DB 백업 기능을 수행

- Master서버에 저장 된 데이터를 Slave 서버에 중복 저장하므로, DB Backup의 역할 수행

 

2. DBMS 이중화

- 사용자 데이터 처리작업은 Master서버가 처리, 사용자의 데이터 요청 처리는 Slave 서버가 담당

- 이러한 처리는 실제 웹서버에 저장되는 웹페이지를 구성하는 Code에서 진행 (PHP, JSP, ASP 등)

 

* 웹서버 이중화 구현은 기본적으로 L4 Switch장비등을 통해 구현하게 된다. (Load Balancing, Failover)

* 웹서버 이중화를 구현할 경우 웹서버에 대한 부하도를 낮출 수 있지만, DBMS에서 처리하는 부하도를 낮출 수는 없으므로 DB Replication을 함께 구현하는 것이 좋다.

* DBMS의 부하도가 높아질 경우 Client의 사이트 열람 속도가 느려진다.


Linux-01 (MASTER)

# yum -y install mariadb-*

# systemctl start mariadb

# mysql_secure_installation

# systemctl stop mariadb

# vi /etc/my.cnf

바이너리 로그파일 이름을 mysql-bin으로 설정

master 아이디 값 1번

방화벽 데몬

디비 접속 mysql -u root -p mysql

MariaDB [mysql]> create database testDB;

MariaDB [mysql]> grant all privileges on testDB.* to ysy@'%' identified by 'ysy';

MariaDB [mysql]> grant replication slave on *.* to Rep_user@'%' identified by 'ysy'; (리플리케이션용 계정 만들고 대상이 될 디비와 테이블(*.*)에 복제 권한 부여)

MariaDB [mysql]> show master status;

MariaDB [mysql]>use testDB;

MariaDB [testDB]> create table testDB ( ID char(20), Name varchar(50));

MariaDB [testDB]> insert into testDB (ID, Name) value ('ysy','yousungyong');

MariaDB [mysql]> exit

 

# mysqldump -u root -p --all-databases > all_Backup.sql

 

Linux-02 (SLAVE)

#yum -y install mariadb-*

# systemctl start mariadb

# mysql_secure_installation

# systemctl stop mariadb

# vi /etc/my.cnf

# scp 192.168.1.100:/root/all_Backup.sql ./

방화벽 데몬

 

# mysql -u root -p < all_Backup.sql

# mysql -u root -p

MariaDB [(none)]> change master to
    -> master_host='192.168.1.100',
    -> master_user='Rep_user',
    -> master_password='ysy',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=621;

MariaDB [(none)]> exit

# systemctl restart mariadb

 


Linux-01 (MASTER)

# mysql -u root -p -e "show processlist\G" (접속하지 않고 1회성 명령어 수행 가능)

 

Linux-02 (SLAVE)

 


마스터에서 데이터 삽임

MariaDB [testDB]> insert into testDB values ("s1","asdf");

Slave에서 확인

반응형

'[Linux]' 카테고리의 다른 글

[linux] AWS ec2 sftp 연결 (Filezilla)  (0) 2024.05.29
[Linux] 리눅스 Proxy Server  (0) 2022.07.19
[Linux] 리눅스 Database 기본 SQL  (0) 2022.07.15
[Linux] 리눅스 DataBase (mariaDB)  (0) 2022.07.15
[Linux] 리눅스 django / SCL / MariaDB  (0) 2022.07.12