[Inception] 4. Mariadb

aqualung·2023년 2월 26일

Mariadb

1. 초기화

Mariadb의 데이터 디렉토리를 초기화하고 시스템테이블이 없는 경우 생성하기 위해 mariadb_install_db을 사용할 수 있다. mysqld를 실행할 때 데이터 디렉토리에 접근할 계정으로 mariadb_install_db을 실행하거나 --user 옵션으로 사용자를 인자로 넘겨주어야 한다. 내 경우 --user--datadir 옵션으로 사용자와 데이터 디렉토리를 지정해 주었다.

mariadb-install-db --user=mysql --datadir=/var/lib/mysql

2. 접근 권한 설정

mysqld를 백그라운드에서 실행한다.

/usr/bin/mysqld_safe --user=mysql --datadir=/var/lib/mysql &

커맨드라인 뒤에 &을 붙여 백그라운드에서 데몬을 실행한다.

SQL이라는 데이터 쿼리언어로 데이터베이스 접근 권한 및 사용자 설정을 해야한다. 해당 링크에 자세한 내용을 확인할 수 있다.

GRANT ALL ON *.* TO 'root'@'%' identified by '$MYSQL_ROOT_PASSWORD' WITH GRANT OPTION ;
  • GRANT ALL ON *.*: 모든 데이터테이블(*.*)에 모든 권한을 부여한다는 의미

  • TO 'root'@'%' identified by '$MYSQL_ROOT_PASSWORD': TO '루트사용자'@'원격접속' identified by '비밀번호'

  • WITH GRANT OPTION: 이 사용자는 다른 사용자에게 해당 권한을 부여할 수 있음.

FLUSH PRIVILEGES; 설정을 적용한다.

나는 모든 쿼리를 파일(query.sql)에 저장한 뒤 mariadb < query.sql로 한번에 적용했다.

3. 데몬 실행

이제 백그라운드에 실행해두었던 mysqld를 종료하고 포그라운드에 다시 실행하면 된다. 실행옵션으로 --skip-networking=0--bind-address=0.0.0.0를 추가해주었다.

--skip-networking이 설정되어 있다면 로컬에서의 소켓접속만 허용한다. 우리는 원격으로 데이터베이스에 접근할 수 있어야 하므로 꺼주도록 하자.

--bind-address로 어떤 IP를 listen할지 설정할 수 있다. 0.0.0.0으로 설정해 모든 IP에서 접근 가능하도록 할 수 있다.

4. Docker Network

구축하고자 하는 서버에서 Mariadb는 Wordpress의 데이터를 저장하기 위해 존재한다. Wordpress 컨테이너와 Mariadb 컨테이너가 소통이 가능하게 하기 위해 docker-compose.ymlnetwork 설정을 해주자.

networks:
  backend_network:
    driver: bridge
    name: backend_network

컨테이너 사이의 소통이 가능하게 하는 네트워크의 드라이버로 bridge를 이용한다.

backend_network라는 네트워크를 구성하여 Mariadb 컨테이너와 Wordpress 컨테이너의 네트워크에 추가해준다.

services:
  mariadb:
    ...
    
    networks:
      - backend_network
      
    ...

  wordpress:
    ...
    
    networks:
      - backend_network
      
    ...

5. Volume

volumes:
  mariadb_volume:
    name: mariadb_volume
    driver_opts:
      type: volume
      device: /home/seunchoi/data/mariadb
      o: bind

도커가 관리하는 볼륨에 컨테이너의 데이터를 저장할 수도 있지만 host에 저장하고 직접 접근해 관리할 수 있다. 이 방식을 바인드 마운트라고 한다.

0개의 댓글