티스토리 뷰
목차
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
- scala
- error
- plugin
- tomcat
- spring boot
- elasticsearch
- Kibana
- Linux
- docker
- AWS
- Index
- SpringBoot
- apm
- intellij
- logstash
- Spark
- JPA
- gradle
- JSON
- mac
- maven
- spring
- Postman
- Filter
- install
- Java
- Log
- Git
- Size
- Container
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |