이 MySQL 이란 DB 는 제가 IT 생활을 하면서 도대체 몇번을 설치하고있는지 모를 정도로 자주 설치해서 사용하네요. 그만큼 돈없는 회사나 개인, 프로젝트에서는 축복받은 존재이기도 하죠.

 오늘은 이 MySQL 의 설치 과정을 블로그로 남겨볼까 합니다. 그냥 apt 나 yum, rpm 으로 설치하면 재미 없죠. 소스로 컴파일 해서 궂이 root 계정이 아니더라도 운영할 수 있도록 해보겠습니다. 


[준비물]

Ubuntu 13.04 
mysql 5.6 source distribution package


1. 재료 준비

MySQL 소스

 MySQL 다운로드 페이지에서 카테고리를 Source 로 선택하면  "Generic Linux (Architecture Independent), Compressed TAR Archive " 가 보입니다. 다운로드 받으면 됩니다.


 MySQL 도 C 로 개발되었기때문에 glibc (GNU C Library) 에 Dependency 가 있습니다. 현재 Ubuntu 13.04 에 기본적으로 포함된 glibc는 버전이 2.17 입니다. (GLIBC 버전 확인은 getconf -a 로 확인할 수 있습니다. MySQL 5.6.19 버전은 glibc 2.5 이상 버전에 Dependency 가 있는걸로 보입니다.)


cmake 빌드할 때, -DENABLE_DOWNLOADS=1 해서, google_mock 같은 써드파티 라이브러리 소스 함께 다운받아 빌드하도록 옵션 준다.

mysql 의 cmake 빌드 옵션은 아래 URL 참고

http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html


오류났을때는 조치하고, CMakeCache.txt 파일을 지우고 나서 다시 cmake 해야 한다.


[내옵션]

cmake -DCMAKE_INSTALL_PREFIX=/home2/dev/db/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLE_DOWNLOADS=1 -DMYSQL_DATADIR=/home2/dev/db/mysql_data -DWITH_INNOBASE_STORAGE_ENGINE=1 .


make


make install


2013-08-28 15:07:25 26770 [Note] InnoDB: Waiting for purge to start 2013-08-28 15:07:25 26770 [Note] InnoDB: 5.6.13 started; log sequence number 0 2013-08-28 15:07:25 26770 [ERROR] Aborting 2013-08-28 15:07:25 26770 [Note] Binlog end 2013-08-28 15:07:25 26770 [Note] InnoDB: FTS optimize thread exiting. 2013-08-28 15:07:25 26770 [Note] InnoDB: Starting shutdown... 2013-08-28 15:07:27 26770 [Note] InnoDB: Shutdown completed; log sequence number 1600607 2013-08-28 15:07:27 26770 [Note]


mysqld_safe --verbose --help 하면, 마지막에 현재 세팅된 variable 나옴.

그런데 요게 역시나 유저 권한으로 띄우기에는 적합하지 않은 옵션들이 기본값임.

바꿔야할것들이 있음..


[기본]

basedir = /usr 

datadir=/var/lib/mysql/

general-log-file = /var/lib/mysql/chrubuntu.log

language                                                   /usr/share/mysql/

lc-messages-dir                                            /usr/share/mysql/

log-error                                                  /var/log/mysql/error.log

pid-file                                                   /var/run/mysqld/mysqld.pid
plugin-dir                                                 /usr/lib/plugin/
socket                                                     /var/run/mysqld/mysqld.sock

그다음..


지금 생성한 my.cnf 를 기본으로 띄워야 하는데.. 방법은 두가지 ..

1. my.cnf 파일을 ~/.my.cnf 파일로 복사해줌~! 

 /etc/my.cnf 파일이 있거나, /etc/mysql/my.cnf, 같은게 있으면 없애줌~!

 왜냐하면, /etc/my.cnf 있으면, 이걸 먼저 로딩하기 때문임.


2. 모든 mysql 관련 실행파일에 --defaults-file=/경로/my.cnf 를 써줌.


난 1번을 선택했음~!


$ scripts/mysql_install_db

실행해줌.


$ bin/mysqlad_safe & 

해서 띄워보고 에러 나는지 확인


$ bin/mysqladmin -uroot password '내패스워드'

로 root 패스워드 변경함


root 에게 ANY 에서 접속할 권한 주려고..

3가지 방법 존재함.

1. GRANT 쿼리 사용


2. mysql_setpermission 유틸 사용

우선 실행하니 이런 에러 남..


perl 에 DBI 모듈 없어서 그램..


다시 perl 모듈 부터 설치해야하니..

# perl -eshell -MCPAN 

cpan> install local:lib DBI (or how it is called)

요렇게 해주기.. 

다시 cpan 쉘로 들어가려면, 그냥

$ cpan 하면 됨.


그런데, 이게 끝이 아니다.. 그래도 경로를 못찾는다..

CPAN 이랑 perl 이랑.. 뭐이리 복잡함??

http://blog.naver.com/PostView.nhn?blogId=xtjin&logNo=50004217785 

요거 참고해서 차근히 함 해보자.

==> 하고 보니, install DBI 를 CAPN 의 shell 에서 하고 나서,

~/.cpan 디렉토리로 가서 .. => install 로 하지 말고, 그냥 get DBI 하자..

get DBI 해서  ==> 아니야~~!!


[정답은..]

cpan shell 에서..

o conf makepl_arg INSTALL_BASE=~/perl

o mbuildpl_arg --install_base=~/perl

이렇게 해주고 나서, 

.profile 에서,.

export PERL5LIB=$PERL5LIB:~/perl/lib:~/perl/lib/x86_어쩌구.. 

해줘야 함.


그리고, 

cpan> install local:lib 함 해주고

cpan> instal DBI 함 해주고

cpan > install DBD:mysql 하면 에러나는데..

우선 밖으로 나가서,

~/.cpan/build/DBD-mysql-xxx 에서

$ perl Makefile.PL INSTALL_BASE=~/perl --mysql_config=/home2/dev/db/mysql/bin/mysql_config

로 수동으로 빌드 해줘야 함.

뒤에 --mysql_config 옵션에 mysql 설치된 디렉토리에서 bin 디렉토리 보면 mysql_config 라는 파일 있는데 그거 지정해줘야 함.


위처럼 Looks good 이 나와야~~!

그다음

make

make install


드디어 mysql_setpermission 을 쓸 수 있음!~

여기서, root 에 % host 를 추가해줄거이므로, 3번 선택.


3. 직접 user 테이블에 INSERT 하기





[오류]

1. ncurses 라이브러리 못찾는 경우

-- Could NOT find Curses  (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:83 (MESSAGE):
  Curses library not found.  Please install appropriate package,

      remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
  cmake/readline.cmake:127 (FIND_CURSES)
  cmake/readline.cmake:217 (MYSQL_USE_BUNDLED_LIBEDIT)
  CMakeLists.txt:257 (MYSQL_CHECK_READLINE)


-- Configuring incomplete, errors occurred!

요따구로 나오는거..

$ sudo apt-get install ncurses5-dev 

$ sudo apt-get install ncursesw5-dev

로 설치 해야한다~ ! 꼭~ ncurses5-dev 를 설치~ 

ncursesw5 는 다국어 뭐시기란다..


2. CMAKE_CXX_COMPILER 에러 나는 경우


CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage

CMake Error: Internal CMake error, TryCompile configure of cmake failed

-- Performing Test HAVE_NO_UNUSED_TYPEDEFS - Failed

-- GTEST_LIBRARIES:gmock;gtest

Warning: Bison executable not found in PATH

-- Library mysqlserver depends on OSLIBS -lpthread;m;crypt;dl

-- Configuring incomplete, errors occurred!


요따구 에러..

g++ 패키지 없어서 그렇것같음.


3. Bison 어쩌구 경고..
-- GTEST_LIBRARIES:gmock;gtest
Warning: Bison executable not found in PATH

$ sudo apt-get install bison
해주기

4. libpthread 의존성 어쭈구..

$ sudo apt-get install libpthread*


 다음에는 MySQL 의 아키텍쳐와 중요한 개념적인 이해에 대하여 써보도록 하겠습니다.


반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
Oracle 은 뭐 대충 Webadmin 에서 입력하면 되는데, MySQL 은 조금 헤멨다..

Database Name, Server Name, User, Password 등을 Webadmin 의 Form 필드에 넣지 말고,
아래의 커스텀 Property 부분에만 지정해주니 잘 된다.

참고로, 아래에 세팅된 예제 나간다.

Jeus 4.x 대 부터 모두 통용되는 듯 하다.

<resource>
   <data-source>
      <database>
         <vendor>mysql</vendor>
         <export-name>cserverdb</export-name>
         <data-source-class-name>jeus.jdbc.driver.blackbox.BlackboxConnectionPoolDataSource</data-source-class-name>
         <data-source-type>ConnectionPoolDataSource</data-source-type>
         <stmt-query-timeout>60000</stmt-query-timeout>
         <property>
            <name>DriverClassName</name>
            <type>java.lang.String</type>
            <value>com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource</value>
         </property>
         <property>
            <name>URL</name>
            <type>java.lang.String</type>
            <value>jdbc:mysql://192.168.1.X:3306/cserverdb?autoReconnect=true</value>
         </property>
         <property>
            <name>User</name>
            <type>java.lang.String</type>
            <value>XXXXXXXX</value>
         </property>
         <property>
            <name>Password</name>
            <type>java.lang.String</type>
            <value>XXXXXXXX</value>
         </property>
         <action-on-connection-leak>Warning</action-on-connection-leak>
         <connection-pool>
            <pooling>
               <min>2</min>
               <max>30</max>
               <step>1</step>
               <period>3600000</period>
            </pooling>
            <wait-free-connection>
               <enable-wait>true</enable-wait>
            </wait-free-connection>
         </connection-pool>
      </database>
   </data-source>
</resource>

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,
root 패스워드를 분실한 경우(응급조치)

mysql을 오랫동안 사용하지 않았을 경우에 간혹 root패스워드가 기억나질않아서 당황할 때가 있습니다.  시스템관리자라면 시스템의 root나 MySQL의 root의 암호를 잊어 버렸을 때를 대비해서 패스워드를 새로 설정하는 방법을 반드시 숙지하고 있어야 할 것입니다.

① 실행중인 msyql 종료

# ps -ef | grep mysqld
root      9567     1  0 Mar16 ?        00:00:00 sh ./mysqld_safe
root      9576  9567  0 Mar16 ?        00:00:00 /usr/local/mysql/libexec/mysqld
root      9578  9576  0 Mar16 ?        00:00:00 /usr/local/mysql/libexec/mysqld
root      9579  9578  0 Mar16 ?        00:00:00 /usr/local/mysql/libexec/mysqld

# killall mysqld

② grant-table 미사용모드로 mysql시작(권한 테이블을 사용하지 않는 옵션으로 데몬 실행)

# ./safe_mysqld  --skip-grant-tables &
[1] 12084
# Starting mysqld daemon with databases from /usr/local/mysql/data
#

# ./mysql -u  root  mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.22.24
Type 'help' for help.
mysql>

※ mysqld_safe 명령어는 mysql 데몬을 실행시킨다.

③ update문으로 root사용자 패스워드 갱신

mysql> update user set password=password('123') where user = 'root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> \q         
Bye

④ 실행중인 mysql 다시 종료(권한 테이블을 사용하지 않는 데몬을 종료)

# ps -ef | grep mysqld
root     12084 11558  0 20:10 pts/2    00:00:00 sh ./mysqld_safe --skip-grant-ta
root     12090 12084  0 20:10 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
root     12092 12090  0 20:10 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
root     12093 12092  0 20:10 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
#
# killall mysqld
mysqld daemon ended
[1]+  Done                    ./mysqld_safe --skip-grant-tables
#

⑤  Mysql 데몬 재 실행 후 갱신된 패스워드로 로그인

# ./safe_mysqld &
[1] 12102
# Starting mysqld daemon with databases from /usr/local/mysql/data
#

# ps -ef | grep mysql
root     12102 11558  0 20:13 pts/2    00:00:00 sh ./mysqld_safe
root     12108 12102  0 20:13 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
root     12110 12108  0 20:13 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld
root     12111 12110  0 20:13 pts/2    00:00:00 /usr/local/mysql/libexec/mysqld

# mysql -u  root  -p
Enter Password: ***************



완.료.

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,

mysql 의 root 는 기본적으로 패스워드가 비어있다. 이대로 계속 두었다가는 낭패..
phpadmin 이라도 설치하면 편하겠는데, 언제 그걸 설치하는가..
mysql.user 테이블의 password 를 변경해서 쉽게 적용하자.

mysql -uroot
mysql> use mysql;
mysql> update  user  set  password=password('123456') where user='root';
mysql> flush privileges;

요렇게 간단하게 끝내자. 마지막 flush privileges; 안하면, DB 를 내렸다 올려야 한다. 꼭 권한변경 해주면 함께 해주도록 한다.

update 를 사용해서, 접속 가능한 host 등도 쉽게 변경하도록 한다.

mysql> UPDATE user SET grant_priv='N', show_db_priv='N', super_priv='N', create_user_priv='N' where user='cserver';
mysql> flush privileges;
반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,