업무를 하고 중간에 내가 하고 싶었던 일을 하다 보니 한번에 모든 것이 정리되는 것이 아니라

띄엄띄엄 정리를 하게 된다.


그러다 보니 어제는 분명히 완벽히 되던 것이 오늘 진행하다 보면 진행이 안되는 경우가 생긴다


어제까지 완벽히 Install 이 진행 되었었는데, MySQL 에 로그인까지 되는 것을 확인 했다.


하지만 다음날 DB를 내렸다가 다시 올리게 되면 로그인은 커녕 MySQL 이 시작도 안되는 현상이 발생 되었다.



맨 처음에 언급했듯이 해당 서버는 많으 사람들이 이용하는 개발 DB이다.

물론 개발자들을 위해서 멀티로 DB를 설치해 주고 또한 나도 여기서 필요시에 다른 버전을 설치한다.


그러다보니 3.x 버전부터 5.0x 버전 지금의 5.6.31까지 몇개의 MySQL 엔진이 설치되어 있다.


당연히 my.cnf 도 몇개가 있다.


참조 : http://jmkjb.tistory.com/entry/MySQL5621SetupSourceCompile


여기서 보면 service를 등록하는 부분이 있다.


나 또한 등록하여 진행을 하는데,

- cp /usr/local/rmysql/support-files/mysql.server /etc/init.d/mysqld


- vi /etc/init.d/mysqld

아래 내용수정

basedir=/usr/local/rmysql

datadir=/usr/local/rmysql/DB/data


- chkconfig mysqld on

- chkconfig --list mysqld

 

6. MySQL 서비스 시작


- service mysqld start


여기까지 따라한 후 service 를 시작하면 다음과 같은 에러를 발견할 수 있다.



ㅎㅎㅎㅎㅎㅎ여기에 보면 이상한 숫자들과 경로들을 볼 수 있다.

이 부분들은 내가 mysqld 파일을 디버깅하면서 적어 놓은 것들이다....ㅠㅠ


다음은 실행하면서 떨어진 devDB.err 이다



전의 포스팅한 내용에는 분명 rmy.cnf 에는 해당 skip-locking 이라는 설정이 전혀 있지 않다.


상사의 말 한마디에 my.cnf (3버전에서 쓰는 것) 을 확인해 보았다.



ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

나랑 장난치냐 지금 너!!!!!!!

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ


 vi /etc/init.d/mysqld


그래......여기를 수정하면 가능하겠다 싶어 수정하였다.


 echo $echo_n "Starting MySQL"

    if test -x $bindir/mysqld_safe

    then

      # Give extra arguments to mysqld with the my.cnf file. This script

      # may be overwritten at next upgrade.

      $bindir/mysqld_safe --defaults-file=/etc/rmy.cnf --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1 &

      wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?


빨간색으로 수정해 주었다.

이것을 처음부터 알았다면 고생 안했을 일을....


친구야...우리 앞으로 잘 지내자....ㅠ


나처럼 my.cnf 위치를 수정해서 쓰는 분들은 꼭 확인해 보세요....


이로써 나는 또 초급이란 것을 티내고 있다.....


이제는 3버전에서 5.6으로 Migration 하는 부분을 올릴 예정이다.

테스트는 금방 할 것 같지만...테스트 데이터는 3버전에서 사용하는 것들이라 많은 부분을 수정해 줘야 할 듯 싶다.


Oracle에서 심심하면 했던 Migration.....새삼 그립다....ㅎㅎ

여기서도 패러럴이 먹히면 좋겠지만.....

반응형

DB 를 설치해 보자.


먼저 설치를 하기 전에 현재 개발 서버에는 Mysql 3.2X 가 무수히 멀티로 운영중이며, 또한 MySQL 5.0x 버전 또한 설치가 되어 있다.


그렇기에 나는 기존 설치 방식이 아닌 다른 방식으로 설치를 진행할 수 밖에 없었다.



1. my.cnf 생성


이 부분은 앞으로 수정되어야 할 듯싶다.


#my.cnf 를 읽는 순서

#1. /etc/my.cnf파일

#2. /etc/mysql/my.cnf

#3. /usr/local/mysql/etc/my.cnf

#4. ~/.my.cnf


[client]

default-character-set = euckr

#default-collaction-set = euckr_korean_ci #euckr_bin

[mysqld]

user = mysql

port            = 4958

basedir = /usr/local/rmysql

datadir = /usr/local/rmysql/data

tmpdir = /usr/local/rmysql/tmp

socket          = /tmp/rmysql.sock

default-storage-engine = MyIsam

event-scheduler = ON

sysdate-is-now


#######

back_log = 100

max_connections = 300

max_connect_errors = 999999

thread_cache_size = 50

table_open_cache = 400

wait_timeout = 28800


max_allowed_packet = 32M

max_help_table_size = 32M

tmp_table_size = 512K


sort_buffer_size = 128K

join_buffer_size = 128K

read_buffer_size = 128K

read_rnd_buffer_size = 128K


query_cache_size = 32M

query_cache_limit = 2M


group_concat_max_len = 1024


########

######### MyISAM Option

## InnoDB를 사용하지 않고 MyISAM만 사용한다면 key_buffer_size 를 4GB까지 설정

key_buffer_size = 32M

bulk_insert_buffer_size = 32M

myisam_sort_buffer_size = 1M

myisam_max_sort_file_size = 2G

myisam_repair_threads = 1

myisam_recover

ft_min_word_len = 3


##로깅 옵션

pid-file = /usr/local/rmysql/logs/mysqld.pid

log-warnings = 1

log-error = /usr/local/rmysql/logs/mysqld


##General log 사용

general_log = 0

general_log_file = /usr/local/rmysql/logs/general_query.log


log_slow_admin_statements

slow-query-log = 1

long_query_time = 1

slow_query_log_file = /usr/local/rmysql/logs/slow_query.log


##replication option

##if this DB is Master DB then you need to remove #

log-bin = /usr/local/mysql/logs/binary_log

binlog_cache_size = 128K

max_binlog_size = 512M

expire_logs_days = 14

log-bin-trust-function-creators = 1

sync_binlog = 1


##if this DB is Slave DB then you need to remove #

#relay-log = /usr/local/rmysql/logs/relay_log

#relay_log_purge = TRUE

#read_only


##현재 서버가 슬레이브이면서 마스터 MySQL인 경우

##현재 MySQL 서버로 복제되는 쿼리를 바이너리 로그에 저장하려면 아래 주석을 해제

#log-slave-updates


위와 같이 작성 하였지만, 설치가 되지 않았다.


 - ...../rmysql/scripts 에서 처음 DB생성을 시도하였지만 아래와 같은 에러가 발생하였다.

FATAL ERROR: Could not find .//usr/local/rmysql/bin/my_print_defaults


If you compiled from source, you need to run 'make install' to

copy the software into the correct location ready for operation.


If you are using a binary release, you must either be at the top

level of the extracted archive, or pass the --basedir option

pointing to that location.


검색하였더니 scripts 폴더가 아닌 mysql base 위치에서 진행하라고 나와 있었다.(외국 블로그)


그래서 다시 base위치에서 진행을 시도 하였지만...아래와 같이 진행되고 stop 되었다.


Installing MySQL system tables...2016-06-14 15:11:49 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --ex                                                                                       plicit_defaults_for_timestamp server option (see documentation for more details).

2016-06-14 15:11:49 0 [Note] ./bin/mysqld (mysqld 5.6.31-log) starting as process 13591 ...


결국 찾지 못하고 base에 my.cnf 를 설정하기로 했다.(최대한 my.cnf 내용은 간소하게..설치가 목적이라..)


# For advice on how to change settings please see

# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html


[mysqld]


# Remove leading # and set to the amount of RAM for the most important data

# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.

# innodb_buffer_pool_size = 128M


# Remove leading # to turn on a very important data integrity option: logging

# changes to the binary log between backups.

# log_bin


# These are commonly set, remove the # and set as required.

# basedir = .....

# datadir = .....

# port = .....

# server_id = .....

# socket = .....


# Remove leading # to set options mainly useful for reporting servers.

# The server defaults are faster for transactions and fast SELECTs.

# Adjust sizes as needed, experiment to find the optimal values.

# join_buffer_size = 128M

# sort_buffer_size = 2M

# read_rnd_buffer_size = 2M


sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#default-character-set = euckr  이게 문제였다...

character-set-server = euckr   이렇게 작성해 주었다.


user            = mysql

port            = 4958

socket          = /tmp/rmysql.sock

default-storage-engine  = myisam

event-scheduler = ON

sysdate-is-now


key_buffer_size                 = 32M

bulk_insert_buffer_size = 32M

myisam_sort_buffer_size = 1M

myisam_max_sort_file_size       =       2G

myisam_repair_threads                   =       1

myisam_recover

ft_min_word_len                                         = 3



[root@devDB:/usr/local/rmysql]# ./scripts/mysql_install_db --defaults-file=/usr/local/rmysql/my.cnf --basedir=/usr/local/rmysql --datadir=/usr/local/rmysql/data --explicit_defaults_for_timestamp=on


또 에러 발생...



...

2016-06-14 15:40:33 13684 [Note] InnoDB: 5.6.31 started; log sequence number 0

2016-06-14 15:40:33 13684 [ERROR] /usr/local/rmysql/bin/mysqld: unknown variable 'default-character-set=euckr'

2016-06-14 15:40:33 13684 [ERROR] Aborting


2016-06-14 15:40:33 13684 [Note] Binlog end

2016-06-14 15:40:33 13684 [Note] InnoDB: FTS optimize thread exiting.

2016-06-14 15:40:33 13684 [Note] InnoDB: Starting shutdown...

2016-06-14 15:40:34 13684 [Note] InnoDB: Shutdown completed; log sequence number 1600607

2016-06-14 15:40:34 13684 [Note] /usr/local/rmysql/bin/mysqld: Shutdown complete

OK


To start mysqld at boot time you have to copy

support-files/mysql.server to the right place for your system


PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !

To do so, start the server, then issue the following commands:


  /usr/local/rmysql/bin/mysqladmin -u root password 'new-password'

  /usr/local/rmysql/bin/mysqladmin -u root -h devDB password 'new-password'


Alternatively you can run:


  /usr/local/rmysql/bin/mysql_secure_installation


which will also give you the option of removing the test

databases and anonymous user created by default.  This is

strongly recommended for production servers.


See the manual for more instructions.


You can start the MySQL daemon with:


  cd . ; /usr/local/rmysql/bin/mysqld_safe &


You can test the MySQL daemon with mysql-test-run.pl


  cd mysql-test ; perl mysql-test-run.pl


Please report any problems at http://bugs.mysql.com/


The latest information about MySQL is available on the web at


  http://www.mysql.com


Support MySQL by buying support/licenses at http://shop.mysql.com


WARNING: Found existing config file /usr/local/rmysql/my.cnf on the system.

Because this file might be in use, it was not replaced,

but was used in bootstrap (unless you used --defaults-file)

and when you later start the server.

The new default config file was created as /usr/local/rmysql/my-new.cnf,

please compare it with your file and take the changes you need.


WARNING: Default config file /etc/my.cnf exists on the system

This file will be read by default by the MySQL server

If you do not want to use this, either remove it, or use the

--defaults-file argument to mysqld_safe when starting the server



- 이 부분은 위에서 수정해 주었다. #default-character-set = euckr  이게 문제였다...


이 후 다시 진행을 했더니 제대로 설치가 된 것 같았다.

이제 MySQL 를 실행해 보자


여기서는 아래 사이트를 참고하면서 진행 하였다.

참조 : http://jmkjb.tistory.com/entry/MySQL5621SetupSourceCompile

반응형

'MySQL' 카테고리의 다른 글

[MySQL] 빈로그 지우기 [펌]  (0) 2016.06.16
[MySQL]5.6.31 source 설치 (3) - 완료  (0) 2016.06.15
[MySQL]5.6.31 source 설치  (0) 2016.06.13
[MySQL] Federated Engine (Table) (2) - 마무리  (0) 2016.06.09
[MySQL] Federated Engine (Table)  (1) 2016.06.09

MySQL 설치를 보면 대부분 간단하게 yum 을 이용한 설치를 알려준다.


MySQL 엔지니어는 안해봤지만, Oracle Engineer를 한 경험상, UI를 통해 설치하는 경우도 대부분이긴 하지만,

단순히 Typicall 이 아닌 Manual 대로 진행하는 경우가 보통이다.

즉, 설정값 들을 수동으로 진행하는 경우가 대부분 이었다.


그래서 나는 단순 설치가 아닌 CMake를 이용한 source 설치를 

물론 책에도 이렇게 진행하는 방식을 알려준다...




MySQL 5.6.31 로 진행하였으며, mysql 홈페이지 가면 찾기가 조금 까다롭다.

해당 페이지를 참조하면서 설치 하였다.

http://jmkjb.tistory.com/entry/MySQL5621SetupSourceCompile


먼저 souce 파일을 다운받아 보자.


현재 테스트 서버는 CentOS 5.6 이다

[root@devDB:/root]#  rpm -qa | grep release

centos-release-5-6.el5.centos.1


http://dev.mysql.com/downloads/mysql/5.6.html#downloads 에서 다운받아 진행했다.

여기서 select platform 을 눌러보면 Source Code가 있는데 선택해서 맞는 OS 에 대해 다운 받으면 된다.

이지 참고를 하면 금방 찾을 수 있을 것이다.

이 후, 책을 참고 하여 진행 하였다.


다운 받은 파일을 압축을 풀어 압축 푼 폴더 내에서 build_target이라는 폴더를 생성한다.

mkdir -p /home/Setup/mysql-5.6.31/build_target


MySQL 5.5부터는 CMake를 이용한 Makefile를 생성 해야 한다.


다만 여기서 책과 다른 점은 SSL 이다. SSL 에 대한 정보는 다음과 같은데,

책에서는 0으로 설정했는데, bundled 로 나는 선택했다.


만약 여기서 에러가 생기면 해당 폴더(여기서는 /home/Setup/mysql-5.6.31/build_target) 를 다 삭제 후에 다시 진행해야한다.

또한 에러 찾기 위해서는 CMakeLists.txt 파일을 열어 찾아 보는 것을 추천한다. 나도 에런 코드 위치 찾아 보니 SSL 관련 된 내용이 있길레 변경을 한 후 진행하였다..


맨 마지막에 done 으로 뜨면 완료 된 것이다.

먼저, 자신이 설치할 위치에 디렉터리 권한 설정 및 가급적 폴더까지 생성하자.

mkdir -p /usr/local/rmysql/bin

mkdir -p /usr/local/rmysql/etc

mkdir -p /usr/local/rmysql/data

...


chown -R root /usr/local/rmysql

chown -R mysql /usr/local/rmysql/data

chown -R mysql /usr/local/rmysql/bin

chown -R mysql /usr/local/rmysql/etc

chgrp -R dba /usr/local/rmysql

...


*CMake 파일 생성 정보


$ cmake .. \

 '-DCMAKE_INSTALL_PREFIX=/usr/local/rmysql' \                //자기에 맞는 경로를 설정하자(mysql 엔진설치 위치)

 '-DWITH_COMMENT=Toto mysql standard x86_64' \

 '-DINSTALL_SBINDIR=/usr/local/rmysql/bin' \

 '-DINSTALL_BINDIR=/usr/local/rmysql/bin' \

 '-DINSTALL_LAYOUT=STANDALONE' \

 '-DMYSQL_DATADIR=/usr/local/rmysql/data' \               //데이터 위치

 '-DSYSCONFDIR=/usr/local/rmysql/etc' \

 '-DINSTALL_SCRIPDIR=/usr/local/rmysql/bin' \

 '-DWITH_INNOBASE_STORAGE_ENGINE=1' \

 '-DWITH_ARCHIVE_STORAGE_ENGINE=1' \

 '-DWITH_BLACKHOE_STORAGE_ENGINE=1' \

 '-DWITH_PERFSCHEMA_STORAGE_ENGIN=1' \

 '-DWITH_PARTITION_STORAGE_ENGINE=1' \

 '-DWITH_FEDERATED_STORAGE_ENGINE=1' \

 '-DENABLE_DEBUG_SYNC=0' \

 '-DENABLED_LOCAL_INFILE=1' \

 '-DENABLED_PROFILING=1' \

 '-DWITH_DEBUG=0' \

 '-DWITH_LIBWRAP=0' \

 '-DWITH_READLINE=1' \

 '-DWITH_SSL=bundled' \

 '-DCMAKE_BUILD_TYPE=RelWithDebInfo' \

 '-DCMAKE_C_FLAGS=-02' \

 '-DCMAKE_CXX_FLAGS=-02'



해당 속성 정보들은 아래와 같다

[펌] http://www.programkr.com/blog/MkjMxADMwYTz.html


  • 지정 설치 파일 설치 경로 때 자주 쓰는 옵션

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql   # 지정 설치 경로 (기본 바로/usr/local/mysql)
-DMYSQL_DATADIR=/data/mysql               # mysql 데이터 파일 경로
-DSYSCONFDIR=/etc                         # 프로필 경로
  • 컴파일 과정 중에 다른 저장소 엔진 사용하기

-DWITH_INNOBASE_STORAGE_ENGINE=1          # INNOBASE 저장소 엔진 사용하기
-DWITH_ARCHIVE_STORAGE_ENGINE=1           # 자주 사용하는 로그 및 집계 분석 한다, 지원하지 않는 인덱스
-DWITH_BLACKHOLE_STORAGE_ENGINE=1         # 블랙홀 저장소 엔진
  • 컴파일 과정에서 일부 저장소 엔진, 취소

-DWITHOUT_<ENGINE>_STORAGE_ENGINE=1
예제 다음과 같다: 
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1
  • 컴파일 들어갈 과정에서 기능 활성화 명령 소개

-DWITH_READLINE=1       # 지원 대량 가져오기 mysql 데이터
-DWITH_SSL=system       # mysql 지원 ssl 회화 구현 기반 ssl 데이터 회답하다
-DWITH_ZLIB=system      # 압축 라이브러리
-DWITH_LIBWRAP=0        # WRAP 실현할 수 있는지 기반 접근 제어
  • 기타 기능 명령

-DMYSQL_TCP_PORT=3306                   # 기본 포트
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock       # 기본 소켓 파일 경로
-DENABLED_LOCAL_INFILE=1                # LOCAL_INFILE 기능 사용 여부
-DEXTRA_CHARSETS=all                    # 혹시 지원 추가 문자 집합
-DDEFAULT_CHARSET=utf8                  # 기본 인코딩 메커니즘
-DDEFAULT_COLLATION=utf8_general_ci     # 기본 언어 데이터 정렬
-DWITH_DEBUG=0                          # DEBUG 기능 설정
-DENABLE_PROFILING=1                    # 성능 처리 기능 사용 여부


이것까지 완료 되었다면, 이제 Install를 진행하자.


$ make && make install


이렇게 치면 다음과 같이 설치가 진행 되는 것을 확인할 수 있다.



옆에 %가 나와서 보기가 좋다.

에러가 난 적은 없지만..에러가 어떻게 하면 에러가 찾을 수 있을지는 나중으로........나도 찾아봐야 하기에;;;ㅠ


이제 DB를 생성해 보자.


vi /etc/RMy.cnf 라는 이름으로 생성해 보자.



반응형

+ Recent posts