티스토리 뷰

목차

 

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
링크
«   2025/03   »
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 31
글 보관함