티스토리 뷰

MySQL

Installation MySQL on Linux with Source Distribution

꿈이 있는 자유 2010. 8. 7. 15:52
이번 글에서는 MySQL 을 소스 컴파일 설치에 대해 알아보기로 하자. yum 으로 설치하면 훨씬 쉽고 간단하고 환경설정하기도 편하겠지만, 그럼에도 소스를 다운받아 configure 하고 make 하고 install 하는 것은 yum 으로 설치할 때와 다른 새로운 맛이 될 것이다. 수동으로 설치할 때만이 맛볼 수 있는 긴장감(?), 예상치 못한 오류들, 그러기에 구글링을 포함한 다양한 자료수집 그럼으로 결국은 사서 고생할 것이지만 그것이 좋은 공부가 될 것이라고 믿기 때문이다.
이미지 갯수가 60개가 넘기에 긴 작업이 될 것이다. 필자가 여기서 설명하는 예와 다른 문제 다른 에러도 만날 것이다. 그렇지만 일부러 사서하는 공부니까 꼭 실험해보기 바란다. 또한 구글링하면 요새 세상이 좋아져서 해답이 다 나온다. 이 글을 보고 보다 더 새롭고 귀중한 자료나 정보가 있으면 또한 보다 더 쉽게 설명할 수 있는 부분은 함께 공유할 수 있었으면 하는 바램이다.

각설하고...설치해보자. 설치는 크게 설치전 작업, 설치, 설치 후 작업으로 나눠진다.
설치하기 전에 머쉰에 아래와 같은 프로그램 혹은 패키지가 설치되어 있어야 한다.

1. distribution 파일 압축풀기 위해 GNU gunzip
2. tar : 만일 gunzip 을 사용하지 않고 tar 로 압축을 풀어도 된다. 하지만, 몇몇 플랫폼에서는 압축파일 이름의 길이문제로 약간의 문제가 보고되고 있다. 일부 OS 즉, Mac OS X, SunOS 4.x, Solaris 8, Solaris 9, Solaris 10, OpenSolaris, 그리고 HP-UX 에서는 약간의 문제가 있다. 따라서 Mac OS X 에서는 gnutar 프로그램을 먼저 설치해야 한다. 또한 Solaris 10 과 OpenSolaris 에서는 gtar 을 먼저 설치돼야 한다.
3. ANSI C++ 컴파일러 : GCC 3.2 혹은 이후 버전, Sun Studio 10 혹은 이후 버전, Visual Studio 2005 과 이후 버전 등. 필자는 g++ 컴파일러로서 gcc-c++ 을 설치할 것이다.
4. make 프로그램 : 특별히 GNU make 프로그램을 추천한다. GNU make 3.75 버전 혹은 그 이후 버전이면 된다.
5. libtool 1.5.24 혹은 그 이후 버전 : CentOS 에서 설치할 때에는 문제가 발생하지 않지만, Fedora 13에서는 설치시 경고를 만나게 된다. 아마도 필자의 짧은 생각으로는 두개의 프로그램의 버전 충돌일 것 같다. 에러가 아니라 경고이기 때문에 설치해도 문제는 발생하지 않지만, 그래도 좀 찝찝하다.

설치 전 작업

1. 먼저 설치할 머쉰에 다른 버전이 설치되어 있는지 확인하자.

rpm -qa | grep mysql

MySQL Server 즉 mysql-server 가 설치돼있지 않다.


2. 소스를 다운받기 위해 MySQL 사이트를 방문한다. [MySQL Community Server] 섹션의 [DOWNLOAD] 링크를 클릭한다.



3. MySQL Community Server 다운로드 사이트로 들어왔다. 직접 아래의 링크로 방문해도 된다.



4. 아래쪽으로 스크롤하면 다운로드 받을 수 있는 최신버전이 보인다. 이 글을 쓰고 있는 현재 최신버전은 5.1.49이다. [MySQL Community Server 5.1.49] 섹션의 [Select Platform] 목록에서 [Source Code] 를 선택한다.


5. 제일 아래쪽에 보면 [Generic Linux (Architecture Independent), Compressed TAR Archive]가 보인다. [Download] 버튼을 클릭한다. 다운로드받을 파일의 이름은 [mysql-5.1.49.tar.gz] 이다.



6. 등록된 계정으로 다운받으라고 하는 거다. 하지만 계정이 없어도 다운로드할 수 있다. 아래쪽의 [No thanks, just take me to the downloads!] 링크를 클릭하면 된다.


7. Mirror 사이트들이 쭉 나온다. 한국에서는 경희대학교 리눅스 사용자 그룹이 보인다. 안타깝게도 속도가 많이 떨어지기 때문에 가까운 일본이나 기타 아시아 국가 혹은 다른 지역의 국가로부터 다운받아도 된다. 어짜피 설치언어는 공통적으로 영어를 사용하기 때문이다.


8. 필자는 일본쪽에서 다운로드 하기로 했다. 한국의 KAIST 가 있다면 일본엔 JAIST(일본과학기술원)이 있나보다. [JAIST, Japan] 의 [HTTP] 링크를 클릭하여 다운로드받자.


9. 다운받을 파일의 이름이 [mysql-5.1.49.tar.gz] 임을 확인하고, [Save] 버튼을 눌러 다운로드 및 저장하자.


10. 다운로드가 끝났다.


11. 일반계정으로는 설치가 안되니까 root 로 switch 하자.


12. 다운로드받은 디렉토리로 이동한다. 이동 후 다운로드 파일을 확인한다.


13. 압축을 풀자.

tar xvfz mysql-5.1.49.tar.gz


14. 압축이 모두 풀렸으면 압축풀린 디렉토리로 이동한다.

cd mysql-5.1.49



15. MySQL  설치가 모두 끝나고 mysqld 데몬 서비스를 실행할 계정을 생성한다. 별도로 mysql 계정을 생성하자.

useradd -M -s /bin/false mysql

-M 옵션은 새로 생성될 계정인 mysql 은 /home 디렉토리 하위에 홈디렉토리를 생성하지 말라는 명령이다.
-s 옵션은 생성될 계정의 로그인쉘 경로를 지정하는 명령이다. 위에서 보면 로그인쉘의 경로에  false 를 넣음으로써 보안을 위해 머쉰에 직접 로그인을 하지 못하게 했다.


16. 다운받은 파일의 압축을 모두 풀면 아래와 같다.



설치 작업

1. configure 하자. configure 에 대한 보다 자세한 설명은 ./configure --help 로 확인하자.

./configure --prefix=/usr/local/mysql \
--localstatedir=/usr/local/mysql/data \

--with-charset=utf8 \
--with-extra-charsets=all

--prefix=/usr/local/mysql : MySQL 설치폴더를 지정하다.
--localstatedir=/usr/local/mysql/data : 데이타베이스 설치폴더를 지정한다.
--with-charset=utf8 : 디폴트 charset 을 지정한다. 데이타가 영어면 문제없지만, unicode 를 사용해야 하는 한국어, 중국어, 일본어 를 사용하려면 utf8 로 기본 charset 을 지정해야 한다.
--with-extra-charsets=all : 디폴트 charset 외에 나머지도 사용할 수 있도록 등록


2. configure 시 발생할만한 에러는 크게 2가지 정도이다. 첫번째는 아래 그림과 같은 에러이다.
참고사이트 : http://karasix.blog.me/10090278147

configure: error : No curses/termcap library found


3. 에러를 해결하기 위해 ncurses-devel 을 설치해야 한다.

yum -y install ncurses-devel


4. ncurses-devel 설치가 끝났다.


5. 다시 configure 를 하면 아래와 같은 오류가 또 발견된다. 오류의 이유인즉 libtoolT 인 것 같다.


6. 이 문제를 해결하기 위해서 libtool 을 설치해야 한다.

yum -y install libtool


7. libtool 설치가 끝났다. libtool 말고 autoconf, automake 도 같이 설치된 것을 알 수 있다. 이 파일들은 모두 자화된 빌드 시스템 구축에 필요한 파일들이다. aclocal, autoconf, automake 로 configure, Makefile 을 생성한다. 참고사이트 : http://blog.naver.com/taeboong?Redirect=Log&logNo=150040367906, http://mcchae.egloos.com/5202990


8. 설치가 끝났으니 필요한 환경설정을 해야 한다.

autoreconf --force --install

autoreconf 에 대해 잠깐 설명드리자면(필자의 짧은 지식에 구글링해보니)... Unix/Linux 에서는 프로그램을 만들기 위해서 makefile 스크립트를 자동으로 생성하게 도와주는 자동화 툴인 automake가 필요하게 되는데, Makefile.am configure.ac 두개의 파일을 생성시켜 주는 역할을 한다고 한다. 옵션으로 -f(orce) 과 -i(nstall) 로 자동화 스크립트가 자동으로 두개의 파일을 생성시켜 준다. 즉 autoconf 를 다시 설치하라는 명령이다.


9. autoreconf 설치가 끝났다.


10. aclocal 은 보통 autogen.sh 혹은 autoreconf 실행 시 제일 처음으로 불리며 configure.in 혹은 configure.ac 파일을 읽어 필요한 m4 매크로들을 aclocal.m4 파일로 정리해 주는 perl 스크립트이다.
참고사이트 : http://studyfoss.egloos.com/4922394, http://mcchae.egloos.com/5202990

aclocal
libtoolize --automake --force
automake --force --add-missing


11. configure 를 위한 준비작업이 모두 끝났다.


12. 하지만 다시 configure 를 실행해도 에러메시지는 없어지지 않았다. 물론 Fedora 와 같은 회사에서 제작한 CentOS 에서는 성공적으로 수행되지만, Fedora 에서는 에러메시지가 계속 나타나는 이유는 아마도 버전충돌문제로 보인다. 참고사이트: http://karasix.blog.me/10090278147


13. 그렇다고 MySQL 이 설치과정에서 그리 크게 문제가 되지 않기 때문에 소스 컴파일하자.(그래도 기분은 찝찝...)

make


14. make 즉 컴파일시 발생하는 문제점은 아래의 그림과 같이 g++ 을 찾을 수 없다는 오류이다. 이 오류는 위의 MySQL 설치 전 미리 설치해야할 프로그램 중 C++ 컴파일러가 있어야 한다고 했는데, ANSI C++ 컴파일러 가 없어서 사전에 설치되어있지 않아서 그런거다.


15. gcc만 설치되어있다고 g++이 설치되는 것이 아니다. 필자의 머쉰에도 gcc가 설치되어 있지만 g++은 별도로 설치해야 한다. yum 으로 설치하자.

yum -y install gcc-c++


16. g++ 설치가 끝났다.


17. 다시 컴파일하자.


18. 컴파일이 끝났다.


19. 컴파일이 끝나면 이제 드뎌 설치하자.

make install



20. 드디어 MySQL 설치가 끝났다.


21. 설치 디렉토리를 확인해 보자. 위의 configure 할 때 --prefix=/usr/local/mysql 로 했던 것을 기억하는가?




설치 후 작업

1. 환경설정 옵션 파일을 set up 하려면, support-files 하위의 적절한 파일을 골라서 템플릿으로서 사용해야 한다. 이 샘플파일들은 시스템의 메모리에 따라서 선정하게 되는데, 아래와 같다.

1) my-huge.conf : 메모리가 1GB ~ 2GB 사이일 때 사용
2) my-large.conf : 메모리가 512MB 일 대 사용
3) my-medium.conf : 메모리가 64MB ~ 256MB 일 때 사용
4) my-small.conf : 메모리가 64MB 보다 작을 때 사용

위의 파일중의 하나를 시스템에 맞게 선정하여 /etc 디렉토리에 my.conf 라는 이름으로 복사하면 된다.

cp support-files/my-huge.conf /etc/my.conf


2. 이제 본격적으로 환경설정하기 위해 설치된 위치로 작업 디렉토리를 변경하자.

cd /usr/local/mysql


3. 설치 전 작업에서 생성한 계정 mysql 을 확인해 보자.

cat /etc/passwd | grep mysql

 
4. 현재까지의 모든 작업은 root 권한으로 수행했다. 그렇다면 소유주는 당연히 root 이다. 설치 디렉토리내에서 root 의 권한으로 다음의 명령을 수행하여 이후 설치가 mysql 계정의 권한으로 수행되게 하자. 즉 소유권변경하자.

chown -R mysql .
chgrp -R mysql .

현재 작업 디렉토리가 /usr/local/mysql 이기 때문에 이 디렉토리 즉 현재 디렉토리의 모든 소유권은 mysql 계정에게, 그리고 그룹 또한 mysql 로 변경했다. mysql 디렉토리의 소유권과 소유그룹을 확인해 보자.


5. 이제 MySQL 서버에 데이타베이스를 설치하자.

bin/mysql_install_db --user=mysql

mysql 계정으로 bin 디렉토리하위에 있는 mysql_install_db 명령으로 데이타베이스를 설치했다. 그런데, 아래의 그림에 보면 Warning 이 보인다. --skip-locking 문제인 것 같다. 이 Warning 을 없애기 위해서는 my.conf 파일을 열어서 수정해야 한다.


6. vi 에디터를 이용해서 아까 샘플 파일을 복사했던 my.conf 파일을 열자.

vi /etc/my.conf


7. The MySQL server 섹션을 찾아서 skip-locking 앞에 # 을 넣어 주석처리하자.

#skip-locking


8. 다시 데이타베이스를 설치하자.


9. 설치가 성공적으로 끝나면 configure 할 때 지정했던 것처럼(--localstatedir=/usr/local/mysql/data) mysql 디렉토리 하위에 새롭게 data 디렉토리가 생성된 것을 볼 수 있다.


10. 새로 생성된 data 디렉토리만 mysql 계정에게 소유권을 주고 나머지는 다시 root 에게 소유권을 할당한다.

chown -R root .
chown -R mysql data

이렇게 하면 현재 디렉토리에서 data 디렉토리만 소유권이 mysql 계정이고, 나머지는 root 가 소유주가 된다.


11. 확인해 보자.


12. 이제 모두 설치와 환경설정이 끝났기 때문에 mysql 서비스를 시작하자.

/usr/local/mysql/bin/mysqld_safe --user=mysql &

&의 의미는 백그라운드로 서비스를 시작하라는 거다. 서비스를 시작하면 OK 라는 글자는 나타나지 않는다. 백그라운드로 서비스를 돌리기 때문이다. 서비스를 멈추기 위해서는 Ctrl + C 를 누르면 된다.


13. 서비스가 잘 실행되고 있는지 프로세스 목록으로 확인해 보자. 잘 실행되고 있다. 내용을 보니 현재 데이타 디렉토리는 /usr/local/mysql/data 이고, 에러 로그 파일은 /usr/local/mysql/data/Peter.err 인 것을 알 수 있다.

ps -ef | grep mysqld


14. MySQL 을 보다 편하게 사용하기 위해 PATH 설정하자. 만일 특정 사용자용으로 PATH 설정하려면 각 계정의 환경설정파일 즉 쉘 환경파일인 bash_profile 에 등록하면 되고, 모든 사용자용으로 PATH 설정하려면 profile 파일을 수정하면 되겠다. 필자는 모든 사용자용으로 PATH 설정하기 위해 /etc/profile 파일을 수정하기로 했다. vi 로 열자.


15. 제일 아래로 이동하여 아래와 같이 입력한다. 주의할 점은 PATH 부분이다. 기존의 PATH 에 새로운 경로를 입력한다.


16. 새롭게 추가된 환경변수가 적용되게 하려면 다시 로그인을 해야 하지만 바로 source 명령으로 적용하자.

source /etc/profile


17. mysqld 서비스가 시스템이 재부팅되어도 자동으로 실행하게 하자. 그러기 위해 mysql.server 파일을 /etc/init.d 디렉토리에 mysqld 의 이름으로 복사한다.

cp share/mysql/mysql.server /etc/init.d/mysqld



18. chkconfig 에 등록하여 자동으로 서비스가 올라오게 하자.

chkconfig --add mysqld
chkconfig --list | grep mysqld


19. 모든 작업은 끝났다. 서비스를 시작하자. 위의 12번 항목과 달리 mysqld 라는 이름으로 시작하면 된다. 서비스가 정상적으로 올라오면 OK 글자가 나타난다.

/etc/init.d/mysqld start


20. MySQL 서버에 로그인하자. 그냥 mysql 명령으로 들어왔다. 로그인 계정을 넣지도 않고 패스워드도 넣지 않았는데, 로그인이 됐다. 큰일이다. 보안에 큰 구멍이 뚫린거다.

mysql


21. 일단 가장 중요한 계정인 root 계정의 패스워드 부터 지정하자. 여기서의 root 계정은 리눅스의 관리자 계정이 아니라 MySQL 서버의 관리자 계정을 의미한다. MySQL 관리자 계정 root 의 패스워드를 설정하기 위해 mysqladmin 을 실행하고 계정명은 root 변경할 패스워드는 P@ssw0rd 물론 여러분들은 각자 필요한 패스워드를 넣으면 된다.

mysqladmin -u root password 패스워드


22. 이제 root 계정으로 로그인해 보자. 패스워드를 넣지 않아 로그인에 실패한다.

mysql -u root


23. root 의 계정으로 로그인하기 위해서는 -p 옵션이 필요하다. 그리고 지정된 패스워드를 넣으면 된다.

mysql -u root -p
Enter password :


24. 현재 MySQL 서버에 기본적으로 등록되어있는 유저와 호스트 그리고 패스워드의 목록을 보자. 아래의 그림과 같이 root 계정은 방금 패스워드를 생성했고, 유저의 이름이 공백 즉 anonymous 계정이 있는 것을 알 수 있다. 참고로 MySQL 에서 SQL문을 사용할 때에는 반드시 문장의 마지막에 ;(세미콜론)을 넣어야 한다.

mysql>SELECT user, host, password FROM mysql.user;



25. 그렇다면 anonymous 계정을 삭제해야 하지 않겠는가?  위의 20번 항목에서처럼 그냥 계정없이 로그인한다면 보안에 치명타를 입을 것이다. 아래의 명령을 처리하여 anonymous 계정을 삭제하자.

mysql>DELETE FROM mysql.user WHERE user='';



26. 마지막으로 다시 계정들을 확인해 보자. 더이상 anonymous 계정이 없는 것을 확인하자.


이상으로 기나긴 MySQL 소스 컴파일 설치를 모두 마치겠다. 굳이 힘들게 설치해봤다. 그렇다면 자신감이 생기지 않는가? 강의끝.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함