환경
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] [mysqld] init_connect = "SET collation_connection = utf8_general_ci" [mysqldump] |
문제점 찾아가는 과정
위에 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
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 -------------- |
잘 변경 되었다.
-끗-