Programming > Docker

[docker-Database] mariadb 마리아DB

#install#설치#default#기본

Docker HUB에서 버전확인 (tags)

https://hub.docker.com/r/library/mariadb/tags/

 

이미지 다운로드

$ docker pull mariadb
$ docker pull mariadb:10.3.10

 

Dockerfile을 확인하고 싶으면 아래 참조

https://github.com/docker-library

https://github.com/docker-library/mariadb

https://github.com/docker-library/mariadb/blob/master/10.3/Dockerfile

 

컨테이너 기동

※ 디폴트 옵션인 MYSQL_ROOT_PASSWORD 는 ROOT패스웨드로 반드시 설정해야 한다.

$ docker run -d --name mymaria -e MYSQL_ROOT_PASSWORD=9999 -p 3306:3306 mariadb

※ 기동시 별도 유저와 데이터베이스를 같이 설정할려면 아래와 같이 실행

$ docker run -d --name mymaria -e MYSQL_DATABASE=mydb -e MYSQL_USER=user1 -e MYSQL_PASSWORD=8888 -e MYSQL_ROOT_PASSWORD=9999 -p 3306:3306 mariadb

-e MYSQL_DATABASE=mydb 

mydb라는 데이터베이스를 생성한다.

-e MYSQL_USER=user1 

user1 이라는 사용자 생성

-e MYSQL_PASSWORD=8888 

user1의 패스워드 생성

-e MYSQL_ROOT_PASSWORD=9999 

root 패스워드

 

생성한 마리아db 환경변수 확인하기

※ 생성한 컨테이너에 접속해 env 명령어를 실행하면 환경변수들의 값을 확인 가능

$ docker exec -it mymaria bash

 

# env

※ MariaDB에 접속해 본다.

# mysql -u root -p

    or
# mysql -u user1 -p

 

데이터베이스 생성시 초기 데이터를 만들면서 컨테이너 생성하기

※ 디렉토리 /docker-entrypoint-initdb.d/ 에 .sql 또는 .sh 파일을 넣어두면 컨테이너 생성시 실행하게 되어있다.

ex) 호스트머신의 /home/docker/sql 폴더에 test.sql 파일을 아래와 같이 생성한다.

**** /home/docker/sql/test.sql  ****

CREATE TABLE USERS(ID INT, NAME VARCHAR(128));

INSERT INTO USERS(ID, NAME) VALUES(1, 'aa1');
INSERT INTO USERS(ID, NAME) VALUES(2, 'bb2');
INSERT INTO USERS(ID, NAME) VALUES(3, 'cc3');
INSERT INTO USERS(ID, NAME) VALUES(4, 'dd4');
INSERT INTO USERS(ID, NAME) VALUES(5, 'ee5');
INSERT INTO USERS(ID, NAME) VALUES(6, 'ff6');

※ 위 호스트머신 폴더를 컨테이너에 볼륨마운트 시키면 된다.

docker run -d --name mymaria -v /home/docker/sql:/docker-entrypoint-initdb.d -e MYSQL_DATABASE=mydb -e MYSQL_USER=user1 -e MYSQL_PASSWORD=8888 -e MYSQL_ROOT_PASSWORD=9999 -p 3306:3306 mariadb

 

데이터 컨테이너를 사용해서, MariaDB데이터를 저장하기

※ mariadb공식 이미지의 MariaDB 데이터 저장소는 /var/lib/mysql 디렉토리 이다.

즉, /var/lib/mysql 볼륨 디렉토리를 갖는 데이터컨테이너를 만들고 MariaDB컨테이너에 볼륨으로 매핑하면 된다.

$ docker create -it -v /var/lib/mysql --name maria_vol busybox

MariaDB 컨테이너를 생성

$ docker run -d --name mymaria --volumes-from maria_vol -v /home/docker/sql:/docker-entrypoint-initdb.d -e MYSQL_DATABASE=mydb -e MYSQL_USER=user1 -e MYSQL_PASSWORD=8888 -e MYSQL_ROOT_PASSWORD=9999 -p 3306:3306 mariadb

※ DB에 접속해서 데이터를 추가해 본다.

$ docker exec -it mymaria bash

# mysql -u user1 -p

MariaDB [(none)]> use mydb;

MariaDB [mydb]> insert into USERS(id,name) values(10, 'emunhi');
MariaDB [mydb]> insert into USERS(id,name) values(20, 'Hong Gil Dong');
MariaDB [mydb]> insert into USERS(id,name) values(30, 'Dully');
MariaDB [mydb]> commit;

 

데이터베이스 문자셋 utf8 로 설정하기 (my.cnf)

※ MariaDB는 설정파일에서 /etc/mysql/conf.d/my.cnf 를 읽어들인다.
   즉, my.cnf 파일을 만들어 /etc/mysql/conf.d 에 볼륨으로 매핑시킨다.

vi /home/docker/conf/my.cnf

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

[mysql]
default-character-set=utf8

[client]
default-character-set=utf8

위에서 만든 파일을 볼륨매핑해서 다시 시작한다.

※ 주의

이미 생성된 데이터베이스에 문자셋을 변경해서 다시시작해도 이전 문자셋이 남아 있으므로 데이터볼륨과 데이터베이스컨테이너를 만들기 전에 문자셋을 설정해 놔야한다.

$ docker create -it -v /var/lib/mysql --name maria_vol busybox

$ docker run -d --name mymaria --volumes-from maria_vol -v /home/docker/conf:/etc/mysql/conf.d -v /home/docker/sql:/docker-entrypoint-initdb.d -e MYSQL_DATABASE=mydb -e MYSQL_USER=user1 -e MYSQL_PASSWORD=8888 -e MYSQL_ROOT_PASSWORD=9999 -p 3306:3306 mariadb

 

 

MariaDB 백업/원복 하기

(1) 데이터 컨테이너에서 데이터를 백업

$ docker run --rm --volumes-from maria_vol -v $(pwd):/back busybox tar cvf /back/maria.tar /var/lib/mysql

호스트머신의 현재 디렉토리$(pwd) 에 maria.tar 로  파일생성 압축 대상은 데이터 컨테이너의 /var/lib/mysql 디렉토리

 

(2) 테스트를 위해 위에서 만든 MariaDB컨테이너와 데이터 컨테이너를 모두 삭제

$ docker stop mymaria
$ docker rm mymaria

 

$ docker rm maria_vol

 

(3) 새로운 데이터 컨테이너를 만들고 백업한 데이터를 복원한다.

$ docker create -it -v /var/lib/mysql --name maria_vol2 busybox

$ docker run --rm --volumes-from maria_vol2 -v $(pwd):/back busybox tar xvf /back/maria.tar -C /var/lib/mysql

   **** 압축해제시 디렉토리도 같이 풀리므로 루트로 잡아 줘야 제대로 풀린다.
   /var/lib/mysql을 붙이면  /var/lib/mysql/var/lib/mysql  아래에 풀린다.

 

(4) 새로운 MariaDB 컨테이너를 만들고 테스트 해본다.

$ docker run -d --name mymaria --volumes-from maria_vol2 -v /home/docker/sql:/docker-entrypoint-initdb.d -e MYSQL_DATABASE=mydb -e MYSQL_USER=user1 -e MYSQL_PASSWORD=8888 -e MYSQL_ROOT_PASSWORD=9999 -p 3306:3306 mariadb

백업받아놓은 파일에서 추가/갱신된 DB데이터가 있는지 확인을 한다.
정상적으로 복원되어 있는 것을 확인하면 OK

$ docker exec -it mymaria /bin/bash

 

# mysql -u user1 -p

MariaDB [(none)]> use mydb;
MariaDB [mydb]> select * from USERS;