티스토리 뷰

목차

     

    Docker를 활용하여 Local 환경에 MariaDB 설치 및 구동 하는 것을 알아보겠습니다.

     

    1. MariaDB 이미지 설치

    $ docker pull mariadb:10.4.21

    먼저 설치하고자 하는 데이터베이스의 버전의 tag를 아래 링크에서 확인합니다.

    https://hub.docker.com/_/mariadb?tab=tags&page=1&ordering=last_updated 

    확인 후, 위의 명령어와 설치를 원하는 이미지 tag를 입력합니다.

    2. MariaDB 컨테이너 실행

    $ docker container run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mariadb:10.4.21
    
    $ docker container ps | grep mariadb
    74c163276af6        mariadb:10.4.21                  "docker-entrypoint.s…"   2 days ago          Up 2 days           0.0.0.0:3306->3306/tcp   relaxed_payne
    
    $ docker rename relaxed_payne mariadb
    
    $ docker container ps | grep mariadb
    74c163276af6        mariadb:10.4.21                  "docker-entrypoint.s…"   2 days ago          Up 2 days           0.0.0.0:3306->3306/tcp   mariadb

    포트는 3306으로 환경변수에 root 비밀번호를 설정하여 다운받은 데이터베이스의 이미지로 새로운 컨테이너를 띄워 줍니다.

    3. MariaDB 접속

    $ docker exec -it mariadb bash
    
    MariaDB > mysql -uroot -p1234

     

    환경변수에서 설정한 비밀번호로 데이터베이스에 접속합니다.

    4. 데이터베이스 생성

    MariaDB > CREATE DATABASE testdb CHARACTER SET utf8 COLLATE utf8_general_ci;
    
    MariaDB > DROP DATABASE testdb;

    데이터베이스 이름은 "testdb", 캐릭터 셋은 "utf8", COLLATE는 "utf8_general_ci" 인 데이터베이스를 생성합니다.

    COLLATE는 문자열 비교시 어떻게 처리될지를 지정하는 방법이라고 생각하시면 됩니다.

    ( utf8_general_ci 는 대소문자를 구분하지 않으므로, 대소문자를 구분하려면 binary 타입("utf8_bin")으로 지정하시면 됩니다.  )

    MariaDB [segment]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | segment            |
    +--------------------+
    4 rows in set (0.009 sec)
    
    MariaDB [segment]> use segment;
    Database changed
    
    MariaDB [segment]> show tables;
    +--------------------------+
    | Tables_in_segment        |
    +--------------------------+
    | filter                   |
    | service                  |
    +--------------------------+
    26 rows in set (0.002 sec)
    
    MariaDB [segment]>

    5. MariaDB 한글 설정

    데이터베이스에 한글 설정을 별도로 해주지 않으면, 데이터베이스에 한글이 있는 컬럼의 데이터를 조회해 보면, ??? 로 데이터들이 나옵니다.

    MariaDB [segment]> show variables like 'c%';
    +----------------------------------+----------------------------+
    | Variable_name                    | Value                      |
    +----------------------------------+----------------------------+
    | character_set_client             | utf8                       |
    | character_set_connection         | utf8                       |
    | character_set_database           | latin1                     |
    | character_set_filesystem         | binary                     |
    | character_set_results            | utf8                       |
    | character_set_server             | latin1                     |
    | character_set_system             | utf8                       |
    | character_sets_dir               | /usr/share/mysql/charsets/ |
    | check_constraint_checks          | ON                         |
    | collation_connection             | utf8_general_ci            |
    | collation_database               | latin1_swedish_ci          |
    | collation_server                 | latin1_swedish_ci          |
    | column_compression_threshold     | 100                        |
    | column_compression_zlib_level    | 6                          |
    | column_compression_zlib_strategy | DEFAULT_STRATEGY           |
    | column_compression_zlib_wrap     | OFF                        |
    | completion_type                  | NO_CHAIN                   |
    | concurrent_insert                | ALWAYS                     |
    | connect_timeout                  | 5                          |
    | core_file                        | OFF                        |
    +----------------------------------+----------------------------+
    20 rows in set (0.007 sec)

    인코딩 정보를 확인해보면 latin1(character_set_database, character_set_server), latin1_swedish_ci(collation_database, collation_server)으로 인코딩이 되어 있는 것을 확인할 수 있습니다.

    이 인코딩을 변경해주어야 한글이 제대로 조회가 됩니다.

    $ docker exec -it mariadb bash
    root@74c163276af6:/# cd /etc/mysql
    root@74c163276af6:/etc/mysql# vi my.cnf

    database의 my.cnf 파일을 vi로 열어서 아래와 같이 값을 추가해 줍니다.

    [client]
    default-character-set = utf8
    
    [mysqld]
    init_connect = "SET collation_connection = utf8_general_ci"
    init_connect = "SET NAMES utf8"
    character-set-server = utf8
    collation-server = utf8_general_ci
    
    [mysql]
    default-character-set = utf8

    다시 인코딩 정보를 확인해보면, 설정한 대로 utf8로 나오는 것을 확인할 수 있습니다.

    MariaDB [(none)]> show variables like 'c%';
    +----------------------------------+----------------------------+
    | Variable_name                    | Value                      |
    +----------------------------------+----------------------------+
    | character_set_client             | utf8                       |
    | character_set_connection         | utf8                       |
    | character_set_database           | utf8                       |
    | character_set_filesystem         | binary                     |
    | character_set_results            | utf8                       |
    | character_set_server             | utf8                       |
    | character_set_system             | utf8                       |
    | character_sets_dir               | /usr/share/mysql/charsets/ |
    | check_constraint_checks          | ON                         |
    | collation_connection             | utf8_general_ci            |
    | collation_database               | utf8_general_ci            |
    | collation_server                 | utf8_general_ci            |
    | column_compression_threshold     | 100                        |
    | column_compression_zlib_level    | 6                          |
    | column_compression_zlib_strategy | DEFAULT_STRATEGY           |
    | column_compression_zlib_wrap     | OFF                        |
    | completion_type                  | NO_CHAIN                   |
    | concurrent_insert                | ALWAYS                     |
    | connect_timeout                  | 5                          |
    | core_file                        | OFF                        |
    +----------------------------------+----------------------------+
    20 rows in set (0.011 sec)

     

    docker stop mariadb
    docker start mariadb

    데이터 베이스를 재시작 하고, 데이터를 다시 조회하면 한글이 제대로 나오는 것을 확인할 수 있습니다.

    'Database' 카테고리의 다른 글

    Mac M1 docker mysql 설치 및 실행( + 한글 설정 )  (2) 2022.02.17
    SQL WHERE의 AND, OR 우선 순위  (0) 2021.10.01
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/04   »
    1 2 3 4 5 6
    7 8 9 10 11 12 13
    14 15 16 17 18 19 20
    21 22 23 24 25 26 27
    28 29 30
    글 보관함