회사에서 자주 사용했는 데, 정확히 잘 모르고 사용한 것 같아서 반성하고 정리해본다.
# 개발환경
- 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
- 데이터를 백업하는 법
: 그동안 맡은 업무에서 데이터 백업을 할 필요가 없어서 해본 적이 없는 데,
서비스를 실제로 유지 보수하려면 연습해볼 필요가 있는 것 같다
'개발 > 데이터베이스' 카테고리의 다른 글
[Oracle] 다른 스키마에 테이블 생성하기 (0) | 2022.08.01 |
---|---|
데이트 타임 칼럼에서 시간만 추출하기 + GROUB BY 피하기 (0) | 2022.04.09 |
CASE ~ WHEN ~ THEN ~ ELSE ~ END (0) | 2022.04.07 |
Like 대소문자 비교 (0) | 2022.04.07 |
실행시간 (Execution time) vs 패치시간 (Fetch time) (0) | 2022.03.05 |