Overview
Mariadb에 대해서 공부해보려고 한다.
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])`
CentOS 7으로 진행하였다.
# mysql 명령어
-u [사용자] = -u root(Database 관리자)
-p [Database] = -p mysql(관리자만 접속 가능)
# socket error 가 발생한 경우
systemctl restart mariadb
mysql -u root -p mysql
2. 접속한 계정 확인
2-1. DB/table/data 조회
2-2 db 테이블 내 계정 권한 확인
select_priv = select 권한
3. 사용자 계정 생성 및 권한 부여
#모든 권한부여 "all"
grant all privileges
# on db이름.table이름 to DB-user이름@'IP주소'
on dbsamadal.* to usersamadal@'localhost'
# ('%' 는 모든 IP주소 접속가능)
# password 입력
identified by 'pwsamadal';
# 권한 저장
flush privileges;
4. 사용자 권한 제거 및 익명 접속 거부
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. 테이블 생성 및 삭제
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 [조건]
Reference
'Database' 카테고리의 다른 글
DB 샤딩(Sharding): 개념 및 동작방식 (0) | 2024.05.10 |
---|---|
PostgreSQL 개념 및 특징(with MySQL) (0) | 2024.03.29 |
MongoDB란? (2) | 2023.05.20 |
DB 스키마란?(Schema) (0) | 2023.04.21 |