Database

Mariadb란? (사용법)

Somaz 2022. 1. 14. 17:05
728x90
반응형

 

Overview

오늘은 MariaDB에 대해 알아보고, 설치 및 사용법, 계정 관리, 백업 및 복구, 최적화 및 유지보수 방법까지 실습을 통해 학습하려고 한다.

출처 : https://dololak.tistory.com/766

 

 

 

 

 


 

 

 

Mariadb란?

MariaDB는 MySQL의 Fork로 등장한 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)이다.

MariaDB는 2009년 Oracle Corporation의 MySQL 인수에 대한 우려 이후 MySQL의 최초 개발자에 의해 만들어졌다.

GNU GPL에서 무료로 유지되고 MySQL과 긴밀한 호환성을 유지하기 위해 만들어졌다. 시간이 지남에 따라 MariaDB는 MySQL과 다른 기능과 개선 사항을 갖춘 자체 ID를 개발했다. 

 

처음에는 MariaDB는 MySQL을 즉시 대체하도록 설계되었다. 즉, 애플리케이션이나 데이터를 수정할 필요 없이 시스템에서 MySQL을 직접 대체할 수 있다는 의미이다. MariaDB는 MySQL과의 높은 호환성을 유지하지만 시간이 지남에 따라 MySQL에서 마이그레이션할 때 조정이 필요할 수 있는 기능과 변경 사항이 도입되었다. 

 

MariaDB에는 기본 InnoDB를 비롯해 Aria, ColumnStore 등 다양한 스토리지 엔진이 포함되어 있어 다양한 사용 사례에 유연성을 제공다.

 

 

 

 


 

 

 

사용법(실습)

 

1. DB 패키지 설치 및 방화벽 설정

  • 패키지: `mariadb*`
  • 포트: `3306/tcp`
  • 서비스: `mysql`
  • 데몬: `mariadb[.service]`

 

 

방화벽 설정

# mysql 명령어
-u [사용자] = -u root(Database 관리자)
-p [Database] = -p mysql(관리자만 접속 가능)

# socket error 발생 시
systemctl restart mariadb
mysql -u root -p mysql

 

 

 

 

 

 

2. 접속한 계정 확인

select user();

 

 

 

2-1. DB/table/data 조회

SHOW DATABASES;
SHOW TABLES;

 

 

 

2-2 db 테이블 내 계정 권한 확인

SELECT user, host, select_priv FROM mysql.user;

 

 

 

 

 

 

3. 사용자 계정 생성 및 권한 부여

# 모든 권한부여 "all"
grant all privileges   

# on db이름.table이름 to DB-user이름@'IP주소'
on dbsamadal.* to usersamadal@'localhost' 

# ('%' 는 모든 IP주소 접속가능)

# password 입력
identified by 'pwsamadal'; 

# 권한 저장
flush privileges;

# 권한 부여
GRANT ALL PRIVILEGES ON dbsamadal.* TO usersamadal@'localhost' IDENTIFIED BY 'pwsamadal';
FLUSH PRIVILEGES;

 

 

 

 

 

 

4. 사용자 권한 제거 및 익명 접속 거부

REVOKE INSERT ON dbsamadal.* FROM usersamadal@'localhost';
DELETE FROM mysql.user WHERE user='';
DELETE FROM mysql.db WHERE user='';

 

 

 

4-1. DB에 사용자에게 부여한 일부 권한 제거

ex) revoke [ ] on [db].* from [user]@'localhost';
MariaDB [mysql]> revoke insert on dbsamadal.* from usersamadal@'localhost';

 

 

 

4-2. 익명 사용자 계정 및 비어 있는 필드 제거

# 익명접속 거부
delete from user where user='';

# 익명접속 사용자 테이블 날리기 
delete from user where user='';

# 익명접속 db 테이블 달리기 
delete from db where user='';

 

 

 

 

 

5. 테이블 생성 및 삭제

CREATE TABLE example_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);
DROP TABLE example_table;

 

 

 

 

 

6. DB 백업 및 복구

 

6-1. 백업

# 부분백업
mysqldump -u [user] -p [db] > /dbbackup/dbbackup.sql

# 전체 백업
mysqldump -u root -p --all-databases > /dbbackup/dbbackup.sql

 

 

6-2. 복구

mysql -u root -p  < [백업파일명].sql
mysql -u [user] -p [db] < [백업파일명].sql

 

 

6-3. 백업 복구 스크립트

# dbinput.sh
#!/bin/bash

# Define variables
DB_HOST="your_db_host" 
DB_USER="your_db_user"
DB_PASS="your_db_password"
DBS=("db1" "db2" "db3" "db4") # Update this with your actual database names
BACKUP_PATH="your_backup_path"

for DB_NAME in "${DBS[@]}"
do
    BACKUP_FILE_NAME="${DB_NAME}_$(date +%Y%m%d).sql"

    # Check if backup file exists
    if [ ! -f $BACKUP_PATH/$BACKUP_FILE_NAME ]; then
      echo "Backup file $BACKUP_PATH/$BACKUP_FILE_NAME does not exist."
      exit 1
    fi

    # Restore the database from the backup file
    mysql -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME < $BACKUP_PATH/$BACKUP_FILE_NAME

    # Check if the restore was successful
    if [ $? -eq 0 ]; then
      echo "Restore of $DB_NAME has been completed successfully."
    else
      echo "Restore of $DB_NAME failed."
      exit 1
    fi

    # Sleep for a while before the next restore
    sleep_duration=10  # adjust this to your needs, this will wait for 20 seconds
    sleep $sleep_duration
done

 

# dbbackup.sh
#!/bin/bash

# Define variables
DB_HOST="your_db_host" 
DB_USER="your_db_user"
DB_PASS="your_db_password"
DBS=("db1" "db2" "db3" "db4") # Update this with your actual database names
BACKUP_PATH="your_backup_path"

for DB_NAME in "${DBS[@]}"
do
    BACKUP_FILE_NAME="${DB_NAME}_$(date +%Y%m%d).sql"

    # Create a dump of the backup_path
    sudo mkdir -p $BACKUP_PATH

    # Create a dump of the database
    mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME --set-gtid-purged=OFF > $BACKUP_PATH/$BACKUP_FILE_NAME

    # Check if the dump was successful
    if [ $? -eq 0 ]; then
      echo "Backup of $DB_NAME has been completed successfully. The backup file is located at $BACKUP_PATH/$BACKUP_FILE_NAME"
    else
      echo "Backup of $DB_NAME failed."
      exit 1
    fi

    # Sleep for a while before the next backup
    sleep_duration=10  # adjust this to your needs, this will wait for 60 seconds
    sleep $sleep_duration
done

 

 

 

7. 명령어 정리

# use 명령어는 데이터베이스 변경 명령어
use [데이터베이스]

# 3개의 명령어 전부 필드의 타입을 확인하는 명령어
describe user;
explain user;
desc user;
desc [필드]

# 데이터베이스를 만드는 명령어
create database db[database];

# 테이블을 만드는 명령어
create table tb[테이블] (타입, 타입);

# 데이터베이스, 테이블 삭제명령어
drop database dbsamadal;
drop table tbsamadal;

# user라는 테이블로부터 (host,user,password) 필드만 출력해라
select host, user, password from user;

# user라는 테이블로부터 모든 필드를 출력해라
select [필드] from [테이블];
select * from user;

# password는 password함수를 이용해서 작업
update user set password=password('samadal') where user='root';
ex. update [테이블] set [변경하고자 하는 필드와 필드의 값] where [조건식]

# 익명접속 거부
delete from user where user=''; 
ex. delete from [필드] where [조건]

 

 

 

 

 

7. MariaDB 최적화 및 유지보수

 

 

7-1. 데이터베이스 최적화

OPTIMIZE TABLE table_name;

 

 

 

7-2. 로그 확인 및 유지보수

tail -f /var/log/mariadb/mariadb.log

 

7-3. 서비스 모니터링 및 자동 재시작 설정

 

systemctl enable mariadb
systemctl restart mariadb

 

 

 

 

 

8. 명령어 정리

USE [데이터베이스];
CREATE DATABASE dbname;
DROP DATABASE dbname;
CREATE TABLE tablename (id INT PRIMARY KEY, name VARCHAR(255));
DROP TABLE tablename;
SELECT host, user, password FROM mysql.user;
UPDATE mysql.user SET password=PASSWORD('newpassword') WHERE user='root';
DELETE FROM mysql.user WHERE user='';

 

 

 

 

 

 


 

 

 

 

 

마무리

MariaDB는 MySQL의 강력한 대안으로 높은 호환성을 제공하면서도 지속적인 기능 개선을 통해 차별화되고 있다.

본 문서를 통해 기본적인 설치, 계정 관리, 백업 및 복구, 테이블 관리 등을 익히고, 실습을 통해 MariaDB를 보다 효과적으로 활용할 수 있도록 하자.

또한 최적화와 유지보수를 통해 더욱 안정적인 데이터베이스 운영이 가능하도록 지속적인 모니터링과 개선을 병행하자.

 

 

 

 

 

 


Reference

https://mariadb.org/

https://dololak.tistory.com/766

https://github.com/somaz94/script-collection

728x90
반응형

'Database' 카테고리의 다른 글

데이터베이스 인덱스(Index) 최적화 방법  (4) 2025.03.21
DB 샤딩(Sharding): 개념 및 동작방식  (0) 2024.05.10
PostgreSQL 개념 및 특징(with MySQL)  (0) 2024.03.29
MongoDB란?  (2) 2023.05.20
DB 스키마란?(Schema)  (0) 2023.04.21