본문 바로가기

데이터베이스

[MariaDB] 도커 컴포즈로 MariaDB 사용하기

회사에서 자주 사용했는 데, 정확히 잘 모르고 사용한 것 같아서 반성하고 정리해본다.


# 개발환경


- macOS 12.2
- Docker version 20.10.10, build b485636
- docker-compose version 1.29.2, build 5becea4c


# Mariadb 도커 컴포즈

version: '3.1'

services:

  maria_db:
    image: mariadb
    container_name: mariadb
    ports:
        - 3306:3306
    restart: always
    volumes:
        - mariadb:/var/lib/mysql
    environment:
      MARIADB_ROOT_PASSWORD: my_special_pw
      
volumes:
    mariadb:

 

*MARIADB_ROOT_PASSWORD 의 값은 root 슈퍼 유저의 비밀번호로 세팅된다. 
*네트워크 모드는 bridge 가 디폴트
*mariadb 컨테이너에서 mysql 이 위치한 /var/lib/mysql 의 소유권은 mysql:mysql(0:0) 이다. 맥에서 cat /etc/passwd 로 확인해보니 uid 0 유저는 관리자이기 때문에 바인드마운트 말고 볼륨을 사용했다. 

*가끔 까먹고 탭키를 사용하면 found character '\t' that cannot start any token 이런 에러 발생. 이번에도 발생했음.
*도커가 당연히 켜져 있다고 생각하고 docker-compose up -d를 했고, 이런 에러 메시지 발생 docker.errors.DockerException: Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory')), 도커 데몬이 켜져있지 않은 것.. ㅋㅋ.. 켜줬다. 도커를 개인 컴에서 더 자주 쓰게 되면 컴퓨터 켜질 때마다 실행되도록 설정해야지.


# 데이터 덤프&로드

백엔드 코드 단에서 데이터 덤프 & 로드를 해보았는 데, mysqldump를 사용한 적은 없어서 연습해봤다. 

1. 샘플 데이터베이스 & 테이블 생성 및 샘플 데이터 인서트

더보기
docker exec -it mariadb bash
mysql -uroot -p

 

show databases;
create database sample;
use sample;
create table (
	sample_id int not null primary key, 
    sample_name varchar(20)
);
describe sample;
insert into sample values (1, 'first_sample');
select * from sample;

 

2. 데이터를 덤프

 mkdir data
 docker exec mariadb sh -c 'exec mysqldump --all-databases -uroot -p"$MARIADB_ROOT_PASSWORD"' > ./data/all-databases.sql
 cd data
 ls
 docker-compose down -v
 docker-compose up -d
 docker exec -it mariadb bash
 mysql -uroot -p

 

show databases;

 

3. 덤브 데이터를 로드

docker exec -i mariadb sh -c 'exec mysql -uroot -p"$MARIADB_ROOT_PASSWORD"' < ./data/all-databases.sql
docker exec -it mariadb bash
mysql -uroot -p

 

describe databases;
use sample;
select * from sample;

# TODO


- 데이터를 백업하는 법
   : 그동안 맡은 업무에서 데이터 백업을 할 필요가 없어서 해본 적이 없는 데,
     서비스를 실제로 유지 보수하려면 연습해볼 필요가 있는 것 같다