mysqld 가 죽지 않을 때. 강제로 죽이는 방법

MySQL | 2009. 10. 28. 09:48
Posted by 시반

얼마전 mysql 설정을 변경하기 위해 잠시 mysql을 종료하려는데 적용이 되질 않아 확인해보니 mysqld 가 정지되지 않은 사실을 알게 되었습니다..

일반적으로  /etc/rc.d/init.d/mysqld stop 이라는 명령어로  mysqld서비스를 정지시키죠
아니면 서비스 관리창에서 정지를 클릭하기도 합니다.

하지만 이상하게도  계속 죽지 않고 살아있는 경우가 있으니.. 답답할 노릇..
심지어는 kill -9  PID로 프로세스를 강제로 종료해도 서비스가 자동으로 재시작되어 종료가 되지 않더군요.
최종적으로는 다음과 같은 방법으로 해결..

killall mysqld

이렇게 killall로 mysql과 관련된 모든 프로세스를 중지시키니  불사신 처럼 죽지않고 되살아나기만 했던 mysqld 가 정지했습니다. (^o^)v  

도대체 어떤 백그라운드 프로그램이 돌고 있었는지는 모르겠지만. 첨엔 난감했습니다. 흐흐흑

 

 

 

 

 

mysql configure 옵션 정리

MySQL | 2009. 10. 27. 11:33
Posted by 시반

 MySQL Configure

 

매번 MySQL을 설치할때면 설치관련 블로그들을 검색해보게 되는데 그때마다 조금씩 다른 설정 옵션으로 설치를 하게 된다.

따라하기에는 충분하지만 도대체 어떤 옵션으로 설정을 하고 설치를 하는지... 

configure --help를 하면 알수는 있겠지만 자주쓰는 옵션을 위주로 짧게 정리하고자 한다.

 

예) ./configure

     --prefix=/usr/local/mysql  

     --enable-thread-safe-client

     --with-charset=utf8

     --with-extra-charsets=all

     --without-readline

     --localstatedir=/usr/local/mysql/data

     --enable-assembler

     --sysconfdir=/etc

 

옵션 설명 :

  • --prefix=/usr/local/mysql : 컴파일후 관련된 파일들이 설치되는 디렉토리,기본값 : /usr/local
  • --exec-prefix = EPREFIX : 기본값은 --prefix에서 지정한 값과 동일.
  • --bin-dir = DIR : 클라이언트 실핼파일과 스크립들이 저장되는 디렉토리, 기본값은 PREFIX/bin
  • --libexec=DIR : mysql 데몬, 기본값은 PREFIX/libexec
  • --localstatedir=/usr/local/mysql/data : 사용자의 데이터와 로그파일를 저장할 디렉토리 지정, 기본값은 PREFIX/var
  • --with-charset=utf8 : utf8charset 지정. utf-8로 하면 에러.
  • --with-extra-charsets=all : 추가 charset 지정, none,complex,all 또는 charset 리스트
  • --with-unix-socket-path=/tmp/mysql.sock : 소켓디렉토리 , 기본값은 /tmp 또는 /var/run
  • --with-tcp-port=3306 : 포트 지정. 기본값은 3306
  • --with-mysqld-user=mysql : 데몬실행 계정 지정
  • --with-debug : debug code추가 , 사용안하는 경우 without 옵션으로
  • --without-readline : 콘솔에서 한글 입력가능
  • --enable-thread-safe-client : 쓰레드 지원
  • --without-server : 서버 기능 없이 클라이언트로만 사용하고자 할 때 즉 클라이언트로만 사용할 때
  • --enable-assembler : 어셈블러  함수 지원
  • --with-client-ldflags=-all-static : 클라이언트 실행 파일 생성시 라이브러리를 포함하도록 지정, 정적으로 컴파일
  • --with-mysqld-ldflags=-all-static : 데몬실행파일 생성시 라이브러리를 포함하도록 지정,정적으로 컴파일
  • --sysconfdir=/etc : 설정파일 디렉토리지정
  • --with-mit-threads : 강제로 MIT-pthreads 를 실행하고자 할때

기타   

  • libg++ 이나 libstdc++이 없이 gcc만 사용할때 
         # CC=gcc CXX=gcc ./configure 
  • 'DEFAULT' 필드를 사용하지 않도록 하려면 
         # CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure 
  • character set설정한 다음 다시 변경하려면 아래와 같은 명령을 준 다음 './configure' 를 다시 실행한다. 
         # make distclean 
 

configure: error: No curses/termcap library found

MySQL | 2009. 10. 27. 10:48
Posted by 시반

 MySQL 설치 에러 : configure: error : No curses/termcap library found

리눅스에서 yum install mysql 을 통해 쉽게 mysql을 설치할 수 있지만 yum을 통해 설치할수 있는 mysql 버젼은 현재 mysql-5.0.77 버젼입니다. 5.1 이상의 mysql (얼마전에 5.3 소식을 들었는데 현재 6.0까지 나와있더군요..-_-)을 설치하고자 하는 경우에는 소스 컴파일을 통한 수동 설치를 진행할 수 밖에 없는 노릇입니다.

일반적으로 소스컴파일을 위해 glibc 라이브러리를 설치한 후에 mysql을 설치를 진행하는데 옵션에 따라 참조하는 라이브러리가 다르기 때문에  간혹 configure 도중 추가적인 라이브러리를 필요로 할 때가 있습니다. 

configure: error: No curses/termcap library found

대표적인 예가 바로 curses 라이브러리와 termcap 라이브러리를 참조하는 경우입니다.

즉 원인은 xterm을 지원하는 termcap라이브러리를 찾을 수 없기 때문인데요...

 

해결방법은 termcap 라이브러리를 설치해야 겠죠...(-_-a

termcap,libtermcap 라이브러리는 libtermcap-devel 패키지에 curses 라이브러리는 ncurses-devel 패키지에 들어 있네요.

 

[root@localhost ~]# yum -y install libtermcap-devel ncurses-devel

 

 

 

 

 

  - MySQL을 사용할 때 일반적으로 취해야 하는 보안설정
  
    1. MySQL은 시스템의 root 계정으로 구동하지 않는다.

  • MySQL(3306/tcp), Oracle(1521/tcp), mssql(1114/tcp), MS-SQL(1433/tcp) 등 대부분의 데이터베이스는  시스템 관리자인 root와는 별개의 계정으로 작동해야 한다.
  • MySQL을 root로 구동할 경우의 위험들..
    • buffer overflow등 MySQL 자체의 취약성이 발생할 경우 MySQL을 구동하는 user가 시스템의 root권한을 빼앗길 수 있다.
    • file 권한을 가진 유저의 경우 root권한으로 /root/.bashrc 와 같은 파일을 생성할 수 있다.
  • 자동으로 mysql 계정으로 작동하도록 하려면
    • su mysql -c "/usr/local/mysql/bin/mysql.server start" 부분을 rc.local 파일로 정의해 주면 된다.
    • 또는 /etc/my.cnf 에 다음과 같이 추가하면 root가 아닌 다른 유저로 작동하게 된다.
      [mysqld]
      user=mysql

 2. 쉬운 암호를 사용하지 않는다.

       - 관리자가 변경되었거나 퇴사하였을 경우 root 암호를 변경하는 것이 좋은데, 변경하려면 다음과 같다

         $ mysql -u root mysql
         mysql> UPDATE user SET Password=PASSWORD('xxxxxxxxx')
                  WHERE user='root';
         mysql> FLUSH PRIVILEGES;

        3. 방화벽을 사용하여 MySQL port를 제한한다.

       - MySQL은 기본적으로 3306/tcp를 사용하는데, 외부에서 이 포트로의 직접 접근을 차단해야 한다.
         이를 위해 앞단에 방화벽을 설치하는 것이 좋은데, 외부에서 MySQL에 직접 접근 가능한지를  확인한다.

         1) 외부에서 nmap으로 스캔(scan)해 본다.   
         2) 외부에서 telnet hostname 3306으로 접속해본다.
         3) 외부에서 mysql -h hostname으로 접속 해본다.

   

     4. 인터넷을 통해 평문 데이터를 전송하지 않도록 한다.

  •  원격지의 웹-DB 연동시 Database에 접속 하기 위해서는 아이디/암호로 인증하게 되는데,  이러한 경우 평문으로 전송된다면 아이디/암호가 그대로 유출 되는 문제가 발생할 수 있기 때문에 인터넷을 통해 전송할 때는 SSL 또는 SSH를 통해 암호화 하도록 한다.
  • 실제, 스니핑을 통해 아이디/암호등이 노출되는지 확인
# tcpdump -l -i eh0 -w - src or dst port 3306 | strings


    5. 접근 권한을 엄격히 제한한다.

  • MySQL 관리자가 아닌 일반 유저에게 process 권한을 주지 않도록 한다. 만약 이 권한이 주어질 경우  "show processlist;"를 실행하면 현재 실행되는 query를 모니터링 할 수 있으며 이중에는 "UPDATE user SET password=PASSWORD('xxxxx')"과 같은 query도 직접 볼 수있으며 결국   암호도 쉽게 유출될 수 있게 된다.
  • MySQL 관리자가 아닌 일반유저에게 SUPER 권한을 부여하지 않도록 한다. 만약 이 권한이 주어질 경우 client의 connection을 종료하거나 서버의 시스템 변수를 변경할 수 있게 된다.
  • 각 유저당 허용되는 동시 접속자수를 제한하려면 mysqld 가동시 "max_user_connnections 옵션을 사용
  • 만약 mysqld를 mysql 권한으로 실행할 경우 mysql 디렉토리 이하에 대한 읽고 쓰기 권한은 mysql로  제한한다.

 

출처 : 리눅스 서버보안관리 실무 -수퍼유저코리아

 

MySQL 원격으로 외부접근이 되지 않을때

MySQL | 2008. 4. 10. 13:35
Posted by 시반

로컬에서 작업할 때는 몰랐는데 다른 서버에 MySql을 설치하였더니 원격에서 접근이 되지 않는다.

당연하게 방화벽 때문에 그러려니 하고 방화벽 설정에서 MySql port인 3306 포트를 허용 시켰더니

 

SQLyog에서

Error no 1130 

 '아이피주소' XXXXXXX

라는 메시지가 나오면서 접속이 여전히 되지 않는다.

에러메시지라도 잘 나오면 좋은데

SQLyog는 좋긴 헌데 이런 메시지가 깨지는게 좀 불편하다. (한글 패치 없나..? 좀 찾아봐야지...)

 

여하튼 찾아보니 1130 은 mysql error 메시지라는 걸 확인할 수 있었구

 

정상적(?) 인 에러 구문은..

Error no 1130 

 Host '아이피주소' is not allowed to connect to this mysql server 라고 나온다고 한다.

 

흐음 도대체 어느 부분이 SQLyog 에서는 깨져서 나오는걸까?

 

결론은 해당계정에 대하여 외부에서의 접근권한이 허용되지 않아서 나온 문제..

 

[해결방법]

grant all privileges on *.* to 계정@'%' identified by '패스워드' with grant option;

flush privileges;

 

1130 뿐 아니라 1045(28000) 에러인 경우에도 같은 방법으로 해결된다고 한다.

 

ERROR 1045 (28000): Access denied for user 'root'@'ip주소' (using password: YES)  

 

 

웹서버설정xml에서 Error가 발생하는 경우

MySQL | 2006. 7. 4. 22:28
Posted by 시반

[Error]

 

     The reference to entity "characterEncoding" must end with the ';' delimiter.

 

[원인]

 

     ...&characterEncoding=euckr

     

       --> xml에서 &를 참조자로 인식하기 때문에 발생한 Error..

      

[조치]

 

       &를 &로 변경하여 준다..

 

예) jdbc:mysql://localhost:3306/ISM_LOG?useUnicode=true&characterEncoding=euckr

 

  

 
블로그 이미지

시반

시반(詩伴)이란 함께 시를 짓는 벗이란 뜻을 가지고 있습니다. 함께 나눌수 있는 그런 공간이길 바라며...

카테고리

분류 전체보기 (233)
개발 이야기 (73)
WEB2.0 (57)
DB2 (24)
MySQL (6)
오라클 (26)
기타 (44)
취미 (0)
잡담 (2)