데이터베이스

Raspberry PI,Wheezy에서 MySQL의 Server Characterset을 latin1 에서 UTF8로 변경하기.

프로필

2012. 12. 12. 15:00

이웃추가

환경

Debian Linux (우분투 가능)


※ 리눅스는 종류별로 명령어나 위치가 다른 경우가 있기 때문에 아래 설명과 다를수가 있습니다.







뭐가 문제인가

MySQL 설치시에 별다른 세팅을 하지 않으면 Character Set이 latin1로 설정되어 있어 한글이 깨지는 현상이 있다.

 

그래서 CharacterSet을 변경하는 방법을 찾아보면 아래 링크와 같은 자료가 나온다.


http://hacks.egloos.com/579380

 

다른 블로그들이 더 있지만 대부분 거의 같은 설명을 하고 있다.

그래서 나도 my.cnf 파일을 똑같이 수정했는데 MySQL 데몬이 Start 시킬 때 계속 [FAIL]이 떴다.







바쁜 사람들을 위한 2줄 결론

 tinymin@raspberrypi / $ vi /etc/my.cnf



아래처럼 수정

[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


[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8 





문제점 찾아가는 과정


위에 2줄 결론으로 해결하면 되지만 뭔가 문제인지 찾아가는 방법을 알아둘 필요가 있기 때문에 모르는 분들은 아래 과정을 따라 해 보는 것을 추천한다.




로그를 찾아보자.

 

 

Debian에서 MySQL에 대한 로그는 아래 같다고 해서 찾아보았다.

 

/var/log/mysql.log

 

 

이 놈에게 tail을 잡고 MySQL Restart를 시켜보았다.

자! 이제 로그가 올라올 것이다.

 

.

.

.

.

.

.

 

아무런 로그가 없다... -_-;

뭐지..뭐지...

 

동일 디렉토리를 보니 mysql.err 이 보인다.

이놈인가?

이 놈을 또 tail로 잡아보았다.

 

.

.

.

.

.

 

뭐지.. 이놈도 로그가 없다!!

 

두 놈의 파일 사이즈를 보았다.

 

-rw-r----- 1 mysql adm 0 Dec 12 11:42 mysql.err

-rw-r----- 1 mysql adm 0 Dec 12 11:42 mysql.log

 

 

0...!! 사이즈가 0이다.

 

아놔.. -_-;

 

 

잠시 멘붕을 맞이하고 추측을 해보았다. "로그가 쌓이면 파일이 변경될 것이니.. 수정시간으로 정렬을 해보자!!"

 

 

 tinymin@raspberrypi /var/log $ ls -lrt

<생략>

-rw-r--r-- 1 root  root 595762 Dec 12 12:38 dpkg.log

-rw-r----- 1 root  adm   11710 Dec 12 13:30 dmesg.0

-rw-r----- 1 root  adm     459 Dec 12 13:42 user.log

-rw-r----- 1 root  adm   11816 Dec 12 13:43 dmesg

-rw-r----- 1 root  adm  139192 Dec 12 13:43 messages

-rw-r----- 1 root  adm  151677 Dec 12 13:43 kern.log

-rw-rw-r-- 1 root  utmp 292584 Dec 12 14:28 lastlog

-rw-rw-r-- 1 root  utmp 111744 Dec 12 14:32 wtmp

-rw-r----- 1 root  adm   15042 Dec 12 14:35 debug

-rw-r----- 1 root  adm  109828 Dec 12 15:06 auth.log

-rw-r----- 1 root  adm  266908 Dec 12 15:06 syslog

-rw-r----- 1 root  adm  107771 Dec 12 15:06 daemon.log <-- 이놈인 것 같다.

tinymin@raspberrypi /var/log $

 

이 파일을 tail로 열어보니 MySQL 관련 로그가 들어있었다!

이 자식.. 꼭꼭 숨어있었다니;;;

 

 

 

/var/log/daemon.log 를 tail로 잡아두고,

세팅값을 하나씩 넣고 저장한 다음

MySQL을 Restart 시키면서 어떤 놈이 에러를 일으키는지 확인 해보자.

우선 아래와 같이 tail 명령어를 실행 시켜준다.

 

 tinymin@raspberrypi /var/log $ sudo tail -f daemon.log

 

 

 

 

 

그리고 터미널을 하나 더 띄우고 vim으로 해당 파일을 열자.

  

 tinymin@raspberrypi /var/log $ sudo vim /etc/mysql/my.cnf

 

  

아래 [client]를 찾아서 아래 빨갛게 표시된 값을 추가하자.

 

[client]

default-character-set = utf8

 

 

 

 tinymin@raspberrypi /var/log $ sudo /etc/init.d/mysql restart

 

 

 

정상이었다.

 

 

 

 

두번째로 아래 값을 넣고 Restart 해 보았다.

 

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

 

여기서 Restart FAIL!!

 

 

Dec 12 14:35:16 raspberrypi mysqld_safe: Starting mysqld daemon with databases from /var/lib/mysql



Dec 12 14:35:17 raspberrypi mysqld: 121212 14:35:17 [Note] Plugin 'FEDERATED' is disabled.

Dec 12 14:35:17 raspberrypi mysqld: 121212 14:35:17 InnoDB: The InnoDB memory heap is disabled

Dec 12 14:35:17 raspberrypi mysqld: 121212 14:35:17 InnoDB: Mutexes and rw_locks use GCC atomic builtins

Dec 12 14:35:17 raspberrypi mysqld: 121212 14:35:17 InnoDB: Compressed tables use zlib 1.2.7

Dec 12 14:35:17 raspberrypi mysqld: 121212 14:35:17 InnoDB: Using Linux native AIO

Dec 12 14:35:17 raspberrypi mysqld: 121212 14:35:17 InnoDB: Initializing buffer pool, size = 128.0M

Dec 12 14:35:17 raspberrypi mysqld: 121212 14:35:17 InnoDB: Completed initialization of buffer pool

Dec 12 14:35:17 raspberrypi mysqld: 121212 14:35:17 InnoDB: highest supported file format is Barracuda.

Dec 12 14:35:17 raspberrypi mysqld: 121212 14:35:17  InnoDB: Waiting for the background threads to start

Dec 12 14:35:18 raspberrypi mysqld: 121212 14:35:18 InnoDB: 1.1.8 started; log sequence number 1599116

Dec 12 14:35:18 raspberrypi mysqld: 121212 14:35:18 [ERROR] /usr/sbin/mysqld: unknown variable 'default-character-set=utf8'

Dec 12 14:35:18 raspberrypi mysqld: 121212 14:35:18 [ERROR] Aborting

Dec 12 14:35:18 raspberrypi mysqld:

Dec 12 14:35:18 raspberrypi mysqld: 121212 14:35:18  InnoDB: Starting shutdown...

Dec 12 14:35:19 raspberrypi mysqld: 121212 14:35:19  InnoDB: Shutdown completed; log sequence number 1599116

Dec 12 14:35:19 raspberrypi mysqld: 121212 14:35:19 [Note] /usr/sbin/mysqld: Shutdown complete

Dec 12 14:35:19 raspberrypi mysqld:

Dec 12 14:35:19 raspberrypi mysqld_safe: mysqld from pid file /var/run/mysqld/mysqld.pid ended

 

 

 

로그를 보니 방금 추가한 값 중에 " 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



정상적으로 Restart 된다!!

mysql에 접속해서 status를 실행해봤다.

 

 mysql> status

--------------

mysql  Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (armv7l) using readline 6.2

 

Connection id:          47

Current database:       tinymin

Current user:           tinymin@localhost

SSL:                    Not in use

Current pager:          stdout

Using outfile:          ''

Using delimiter:        ;

Server version:         5.5.28-1 (Debian)

Protocol version:       10

Connection:             Localhost via UNIX socket

Server characterset:    utf8  <-- 변경 됨

Db     characterset:    latin1

Client characterset:    utf8

Conn.  characterset:    utf8

UNIX socket:            /var/run/mysqld/mysqld.sock

Uptime:                 25 sec

 

Threads: 1  Questions: 145  Slow queries: 0  Opens: 215  Flush tables: 1  Open tables: 52  Queries per second avg: 5.800

--------------

 

 

잘 변경 되었다.

 

-끗-

 


 

 

삼철
삼철

M = ⟨ Q , Γ , b , Σ , δ , q 0 , F ⟩