The Pursuit of Happyness

반응형

예전에 node.js에서 Oracle DB를 연결해서 사용하는 프로젝트를 해봤었는데, Oracle 이 node.js 를 제대로 지원하지 못한다는 느낌을 강하게 받았었습니다.


그때는 node.js oracledb 모듈을 설치할 때, 컴파일 과정이 들어가면서 의존성이 있었기 때문에 은근히 번거로웠었는데, oracledb 2.0 부터는 그러한 과정들이 필요 없게되어서 상당히 편리해졌습니다.


다만 새로운 모듈의 특성상 Oracle 혹은 instant client 을 설치하고, 라이브러리 경로를 설정해 줘야지만 제대로 동작합니다. node.js oracledb 와 Oracle 혹은 instant client 의 설치순서는 상관이 없습니다. 런타임 시점에 라이브러리 경로만 인식되면 됩니다.


또 다른 장점으로는 상당히 많은 수정을 통해서 메모리 관리 등에서 훨씬 안정적인 모듈이 되었다는 것입니다.


--


이쯤에서 node.js oracledb 모듈을 설치해 보겠습니다.


테스트 환경은 CentOS 7.4.1708 , node.js 6.12.3 입니다.


1. 적당한 폴더를 생성합니다.

# mkdir test 


2. 폴더에서 node 프로젝트를 생성합니다. 프로젝트 정보는 적당히 입력합니다.

# npm init 


3. 다음 명령어로 oracledb 모듈을 설치합니다.

# npm install --save oracledb 

현재 2.0.15 버전으로 설치가 됩니다.


4. instant client 를 설치합니다. Oracle 다운로드 페이지에서 적당히 다운로드 받습니다.

http://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/index.html

아래 명령어로 설치를 합니다.

# rpm -ivh  oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm

혹은 yum install 명령어를 이용해도 설치가 됩니다.


5. 환경변수를 설정합니다.

# vi /etc/environment


다음의 두줄을 추가합니다 원래 instant client 만 설치할 경우 "/usr/lib/oracle/12.2/client64/network/admin" 경로는 존재하지 않는데, XE 등을 설치시의 tns 설정경로와 비슷하게 하기 위해서 "network/admin" 폴더를 생성해 주었습니다.

TNS_ADMIN=/usr/lib/oracle/12.2/client64/network/admin

LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib


6. tnsnames.ora 파일을 생성합니다.

# touch /usr/lib/oracle/12.2/client64/network/admin/tnsnames.ora 

생성한 파일을 편집해서 tns 정보를 입력합니다.


7. oracledb에 연결해서 테스트하는 예제들 입니다.

https://github.com/oracle/node-oracledb/tree/master/examples


webapp.js 나 webapppromises.js 파일을 참조하시면 pool 설정 등에 대한 예시를 볼 수 있습니다.



반응형

반응형

테스트 환경


Ubuntu (16.04.1 LTS)


Virtual Box (V5.1.14)


Vagrant (1.9.1)



먼저 Vagrant 에 대해서 간략히 소개하자면.. 개발환경을 쉽고 빠르게 설정하기 위한 Virtual Machine 관리 툴 입니다. 


Vagrant는 Virtual Box 같은 Virtual Machine 프로그램을 명령어로 제어합니다.



@ Virtual Box 와 Vagrant 설치 


설치는 OS 환경에 따라 약간씩 다르지만 Ubuntu 기준으로 설명합니다. (Windows 나 Mac OS의 경우 GUI 로 쉽게 설치가 가능합니다.)


1) 먼저 Virtual Box 를 설치합니다. 


1. Virtual Box 설치에 앞서서 필요한 의존성 라이브러리들을 설치합니다. 


$ sudo apt install libqt5x11extras5 libsdl1.2debian libsdl-ttf2.0-0


각자 환경에 따라서 위의 라이브러리 이외에도 추가로 필요한 것들이 있을 수도 있습니다.


2. 홈페이지에서 deb 패키지를 다운로드 합니다. (https://www.virtualbox.org/wiki/Linux_Downloads)


3. dpkg 명령어로 다운로드 받은 패키지를 설치합니다. (아래는 5.1.14 버전 예시)


$ sudo dpkg -i  virtualbox-5.1.5.1.14-112924-Ubuntu-xenial_amd64.deb



2) 이번에는 vagrant 를 설치합니다.


1. 홈페이지에서 deb 패키지를 다운로드 합니다. (https://www.vagrantup.com/downloads.html)


2. dpkg 명령어로 다운로드 받은 패키지를 설치합니다. (아래는 1.9.1 버전 예시)


$ sudo dpkg -i vagrant_1.9.1_x86_64.deb 



@ Vagrant Box


Vagrant는 Virtual Machine을 쉽고 빠르게 생성하기 위해서 Box를 이용합니다.


Box 는 Virtual Machine 을 생성하기 위한 이미지 정도로 이해하시면 됩니다.



1) 먼저 Box 관리에 대한 명령어를 알아보겠습니다.


1. 현재 로컬 컴퓨터에서 사용가능한 Box들을 확인하는 방법


$ vagrant box list 



2. 로컬 컴퓨터에 필요한 Box 를 추가하는 방법


먼저 필요한 Box 의 URI를 확인합니다. Vagrant 홈페이지에 있는 Box 링크에서 찾을 수도 있고, (https://atlas.hashicorp.com/boxes/search) 아니면 필요한 Box 이미지를 다운로드 받아서 파일 경로를 지정할 수도 있습니다.


아래 명령어를 사용하면 vagrant 가 Box를 리스트에 추가합니다.


$ vagrant box add [box name or URI] --clean



3. 로컬 컴퓨터에 있는 Box를 제거 하는 방법


필요에 따라 같은 Box의 다른 버전들을 같이 가지고 있는 경우 버전을 명시해 주어야 합니다.


$ vagrant box remove [box name] --box-version [box version] 



4. 로컬 컴퓨터의 Box가 최신 버전인지 확인하는 방법


$ vagrant box outdated --global



@ Virtual Machine 관리 명령어


1. Virtual Machine 생성


$ vagrant init [box name or URI] --box-version [box version]


위의 명령어는 명령어를 실행한 경로에 "Vagrantfile" 을 생성하는데, 이 파일은 실제 Virtual Machine 을 생성할 때 필요한 설정 정보입니다.


실제로 존재하지 않는 위치를 입력해도 "Vagrantfile" 은 생성이 되지만, 다음 과정에 에러가 발생하게 됩니다.


2. Virtual Machine 시작 


$ vagrant up


위의 명령어는 "Vagrantfile" 이 있는 위치에서 실행되어야 하며, 설정파일에 맞게 새 Virtual Machine 을 Virtual Box에 실제로 생성하고 Virtual Machine 을 시작합니다. 만약 로컬 컴퓨터에 존재하지 않는 Box의 경우라도 위의 Box 링크 사이트에서 검색이 가능한 Box의 경우 다운로드하고 로컬 컴퓨터에 Box를 추가하고 나서 Virtual Machine을 생성하게 됩니다.


3. Virtual Machine 에 접속하기


$ vagrant ssh


위의 명령어를 이용해서 해당 Virtual Machine의 ssh 서비스에 접속할 수 있습니다. "Vagrantfile" 이 위치한 곳에서 실행해야 하며, ssh 를 직접 이용하고자 한다면 인증 키를 확인해서 접속할 수 있으나 상당히 번거롭기 때문에 위의 명령어를 이용하는 것이 가장 편합니다. 윈도우 서버를 위한 rdp 나 powershell 명령어도 있는데 제대로 동작하는지 확인은 해보지 못했습니다.


4. Virtual Machine 종료시키기


$ vagrant halt



5. Virtual Machine 삭제하기


$ vagrant destroy



~

반응형

반응형

예전에 MySQL 5.6 설치 포스팅을 올렸었는데, 5.7에서 상당한 변화가 있어서 다시 포스팅을 합니다.


기본적인 설치 방법이나 명령어는 비슷하지만 기본 패스워드를 확인하는 방법이 필요해서 정리해 봅니다.


1. mysql-community repo 설치


CentOS 7.x 버전에서는 MySQL 대신 Maria DB가 기본으로 들어가 있어서 MySQL 설치를 위해서는 repo 를 추가해 주어야 합니다.


rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm 


2. MySQL 서버를 설치합니다.


yum install mysql-community-server


3. MySQL 서버를 구동합니다.


systemctl start mysqld


4. 서버 재시작 후에도 MySQL 서버가 동작하도록 세팅합니다.


systemctl enable mysqld


5. MySQL 5.6 버전까지는 설치 후에 기본 root 계정 패스워드가 없었는데, 5.7 부터는 보안이 강화되어 임시 패스워드가 생겼습니다. log 파일에서 패스워드를 확인합니다.


grep 'temporary password' /var/log/mysqld.log


6. 위에서 확인한 임시 패스워드를 이용해서 MySQL 서버를 설정합니다.


mysql_secure_installation





 



반응형

반응형

Linux 콘솔에서는 기본적으로 하나의 foreground job 을 수행할 수 있는데, 여러 개의 작업을 동시에 실행할 때에는 screen 명령을 이용해서 가상의 콘솔을 이용할 수 있다.


1. 기본 사용법


> screen 



2. 스크린 추가하기


^A^C



3. 스크린 닫기


exit : 현재 스크린 닫기

^D : 현재 스크린 닫기

^A\ : 전체 스크린 종료 및 screen 명령 종료



4. 스크린 전환하기


^A^P : 이전 번호의 스크린으로

^A^N : 다음 번호의 스크린으로

^A0, ^A1, ... ^A9 : 해당 번호의 스크린으로 이동

^A' : 이동할 스크린 번호 입력해서 이동

^A^A : 바로 전에 사용한 스크린으로 이동



5. 현재 스크린 확인


^AN : 현재 스크린 번호 확인

^A^W : 전체 스크린 리스트 확인





반응형

반응형

Linux에서는 여러 개의 프로그램을 동시에 실행시킬 수가 있는데, 


하나의 콘솔창에서는 보통 하나의 Job만 foreground에서 실행이 가능하고, 나머지 Job은 Background에서 실행이 된다.


이 포스트에서는 Foreground / Background Job을 관리하는 방법에 대해서 알아본다.


1. Job


현재 콘솔에서 실행되고 있는 Job들의 리스트를 확인하는 명령어


> jobs 



2. 백그라운드에서 프로그램을 실행하는 방법 


명령 끝에 '&' 를 붙여준다. 실행 하게 되면 job id와 프로세스 id 를 보여준다. (아래 예제에서는 job id = 1, process id = 910)


> sleep 1000 &

[1]+ 910



3. 현재 실행중인 명령을 잠시 중단하는 방법


명령어 실행 후 ^Z  (ctrl + z) 를 입력한다.


> sleep 1000 &

^Z
[1]+ Stopped          sleep 1000


Stopped 라고 나오지만 실제로는 종료되지 않은 상태로 남아 있다. (jobs 명령어로 확인이 가능)



4. 잠시 중단한 명령을 백그라운드로 보내는 방법


bg %[id]


> bg %1

[1]+ sleep 1000 &



5. 백그라운드에서 실행중인 job을 foreground로 바꾸는 방법


fg %[id]


> fg %1

sleep 1000



6. 실행 중인 명령을 중단하는 방법


명령어 실행 후 ^C (ctrl + c) 를 입력한다.



참고로 백그라운드에서 작업 중인 명령을 종료하기 위해서는 해당 job을 foreground로 넘긴 후 ^C 를 입력하면 된다.


혹은 kill 명령어를 이용해서 해당 process 를 종료 하면 된다. (process id 는 ps 명령어로 검색한다.)


> kill 910







반응형

반응형

MySQL 을 관리하면서 가장 기본으로 필요한 것은 계정 생성 및 권한을 관리하는 것입니다.


사용자 계정과 관련된 구문은 다음과 같습니다.


 ALTER 

 사용자 정보를 변경  

 ex) ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE;

 CREATE

 사용자 계정 생성  

 ex) CREATE USER 'testuser'@'%' IDENTIFIED BY 'password';

 DROP

 사용자 계정 삭제 

 ex)  DROP USER 'testuser';

 GRANT

 사용자 계정에 권한을 부여 

 ex) GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'localhost' IDENTIFIED BY'password';

 RENAME

 사용자 계정을 변경 

 ex) RENAME USER 'testuser'@'localhost' TO 'testuser2'@'127.0.0.1';

 REVOKE

 사용자 계정의 권한을 제거 

 ex) REVOKE ALL PRIVILEGES ON testdb.* FROM 'testuser'@'localhost'; 

 SET PASSWORD

 사용자 계정의 비밀번호 변경 

 ex) SET PASSWORD FOR 'testuser'@'localhost' = password('new_password'); 


사용자 계정을 새로 생성하여 권한을 바로 부여하는 경우에는 CREATE 과정을 생략하고 바로 GRANT 구문만 사용해도 됩니다.

반대로 계정을 삭제하는 경우에는 권한을 제거하지 않고 바로 DROP 하면 계정이 삭제 됩니다.


사용자의 권한을 확인하기 위해서는 다음의 구문을 사용합니다.


 mysql> SHOW GRANTS FOR 'testuser'@'localhost';



사용자가 가질수 있는 권한은 종류가 매우 많습니다.

많이 쓰이는 권한은 다음과 같습니다.


ALL [PRIVILEGES] : 모든 권한


CREATE : 데이터베이스 혹은 테이블 생성 권한


DELETE : DELETE 구문을 사용할 수 있는 권한


DROP : 데이터베이스, 테이블 혹은 뷰를 삭제할 수 있는 권한


INSERT : INSERT 구문 사용 권한


LOCK TABLES : SELECT 구문시 테이블에 락을 걸수 있는 권한


SELECT : SELECT 구문 사용 권한


SUPER: admin 권한


UPDATE : UPDATE 구문 사용 권한


반응형

반응형

실제 MySQL을 운영할 때는 replication을 많이 구성하게 됩니다.

Replication 은 목적에 따라 다양한 형태로 구성될 수 있는데, 여기서는 기본적인 Master - Slave 구조를 설정해 보겠습니다.

MySQL의 복제 방식은 Master서버에서 bin_log 를 생성한 후에 Slave 서버가 bin_log 내용을 받아와서 query를 재생하는 방식으로 처리됩니다.


0. Master - Slave Replication 구성을 위해서 DB 로 사용할 서버를 두 대 준비합니다.

편의상 Master 서버의 Private IP 는 10.0.0.51, Slave 서버의 Private IP는 10.0.0.61 이라고 하겠습니다.


1. [Master] 먼저 Master 서버의 my.cnf 설정에 다음의 내용을 추가하여 bin 로그를 활성화 합니다.


[mysqld]

log-bin=mysql-bin

server-id=51


log-bin 에는 bin 로그가 생성될 파일 이름을 지정해 줍니다. 서버의 default 값을 사용하고 싶다면 "log-bin" 이라고만 적어줘도 됩니다.

그리고 server-id는 replication 구성 내에서 unique 한 값을 적어줘야 합니다. DB가 많지 않다면 Private IP 마지막 자리를 적어주면 겹치지 않습니다.


그리고 MySQL을 재시작하여 bin 로그가 생성되는지 확인합니다.


# systemctl restart mysqld


bin 로그는 MySQL 데이터베이스 경로에 생성되며 위에서 지정한 파일 명으로 생성됩니다. (mysql-bin.000001, mysql-bin.000002, ...)

또한 mysql-bin.index 라는 파일이 생성되어 bin 로그를 생성한 시점부터의 로그 파일 리스트가 기록됩니다.


2. [Master] Replication 에서 사용할 계정을 생성합니다.

MySQL을 실행해서 Replication 에서 사용할 계정을 아래와 같이 생성합니다.


# GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.0.%' IDENTIFIED BY 'password';


Private IP 대역 10.0.0.x 에 대해 "repl" 이라는 계정으로 비밀번호 "password" 로 replication 을 허용하겠다는 의미 입니다.


3. [Master] Replication 시작 위치를 확인합니다.

Replication 위치를 제대로 맞춰주기 위해서 지금부터 Master DB의 백업이 완료될 때 까지 DB 접속을 차단하는 것이 좋습니다. query가 실행되면 replication 지점이 변경될 수 있습니다.

다음의 명령어로 replication 위치를 확인합니다.


mysql> show master status\G


만약을 대비하여 File 과 Position 값을 기록해 둡니다.


4. [Master] DB를 백업합니다.

# mysqldump --all-databases --master-data -u root -p > dbdump.db

--master-data 라는 옵션을 주게되면 dbdump.db 파일에 replication 지점이 같이 저장됩니다.

Master DB에서의 할일은 끝났습니다. 


5. [Slave] my.cnf에 다음의 내용을 추가합니다.


[mysqld]

server-id=61


slave 서버에서의 데이터 변경 방지를 위해서 read_only 를 추가할 수 있습니다.


[mysqld]

read_only


Slave 에서도 relay 로그 외에 별도의 bin 로그가 필요하다면 log-bin 옵션을 추가해도 됩니다.

MySQL을 재시작하여 설정을 반영 시킵니다.


# systemctl restart mysqld


6. [Slave] DB 리스토어

Master에서 백업한 데이터를 복사해서 restore 합니다.


# mysql -u root -p < dbdump.db


7. [Slave] Slave DB에서 Master DB의 Replication 지점을 설정합니다.


mysql> CHANGE MASTER TO 

        ->      MASTER_HOST='10.0.0.51'

        ->      , MASTER_USER='repl'

        ->      , MASTER_PASSWORD='password'

        ->      , MASTER_LOG_FILE='mysql-bin.000004'

        ->      , MASTER_LOG_POS=120;


MASTER_LOG_FILE 과  MASTER_LOG_POS는 dbdump.db 파일에서 읽어도 되고, 3번에서 기록해 둔 값을 적어줘도 됩니다.

그리고 Slave 를 시작합니다.


mysql> start slave;


Slave DB의 상태를 확인합니다.


mysql> show slave status\G



8. 기타

* MySQL에서의 DB 백업과 리스토어는 데이터베이스를 그대로 이미지 떠서 rsync 시키는 방법을 사용하실 수 있습니다. InnoDB 엔진을 사용하는 경우에는 반드시 MySQL 서비스를 중지시키고 하는 것을 권장하고 그 외의 기본 엔진에 대해서는 서비스 중지 없이 Lock을 걸고 진행할 수 있습니다.


* 하나의 bin 로그 파일이 너무 커지는 것을 막기 위해서 bin 로그 파일 사이즈를 제한할 수 있습니다. 

최소값은 4096이며 최대값은 1073741824 (1GB) 입니다. default 설정은 1073741824 입니다.


[mysqld]

max_binlog_size=1G



* bin 로그가 서버에 무한히 쌓이는 것을 방지하기 위해서 다음의 옵션을 통해서 일정 기간이 지나면 삭제되도록 설정할 수 있습니다.

아래는 7일 (일주일) 이 지난 로그를 삭제하는 옵션입니다. 최대 99일까지 설정이 가능하며 0을 쓰면 삭제하지 않습니다.


[mysqld]

expire_logs_days=7







반응형

반응형

이전 포스팅에서 CentOS 7.x 서버에 MySQL 5.6 을 설치해 보았습니다.  [MySQL 설치 다시보기]


이번 포스팅에서는 MySQL 설치 후에 필요한 세팅에 대해서 알아보도록 하겠습니다.


MySQL은 시작할 때 /etc/my.cnf 파일을 읽어서 필요할 설정을 하게 됩니다.


아래 명령으로 해당 파일을 열어서 편집합니다.


vi /etc/my.cnf


파일을 열어보면 [mysqld], [mysqld_safe] 와 같이 설정 영역이 나뉘어져 있습니다. 설정은 반드시 필요한 영역에 적어줘야 합니다.


1. DB 경로 설정

- [mysqld] 에 있는 datadir 의 경로를 변경해 줍니다. datadir을 변경할 때는 변경할 datadir의 context를 같이 변경해 주어야 합니다.


[mysqld]

datadir=/var/lib/mysql


- context 변경 (mysql DB 경로를 /datadir 로 변경했다고 가정) 

다음 중 하나만 실행해 주면 됩니다.


  • selinux 상에서 context 변경


- semanage 설치


yum install policycoreutils-python


- context 설정 변경


semanage fcontext -a -t mysqld_db_t "/datadir(/.*)?"


- 변경된 설정 적용


restorecon -Rv /datadir


  • chcon 을 이용해서 context 직접 변경


chcon --reference=/var/lib/mysql /datadir


    2. 기본 DB 엔진 설정

    - 테이블을 생성할 때 기본으로 사용할 DB 엔진을 설정할 수 있습니다. 트랜젝션을 지원하는 InnoDB 엔진을 기본으로 설정하려면 다음을 추가해 주면 됩니다.


    [mysqld]

    default-storage-engine=InnoDB


    MySQL 4.x 버전에서는 default-storage-engine 대신 default-table-type 이라는 옵션을 사용했었는데, 5.x 버전에서는 이 설정이 있으면 에러가 나면서 MySQL이 실행되지 않습니다.


    3. 인코딩 설정

    - 한글이나 일본어 중국어 등의 문자를 사용하는 경우 utf8 방식으로 인코딩을 하여 저장하는 것이 편리합니다.

    인코딩에 대해서는 데이터가 저장될 때의 인코딩과 클라이언트와 서버간의 주고 받는 데이터의 인코딩 등이 다르게 설정될 수 있으므로, 데이터 저장에 대한 것은 [mysqld] 영역에 클라이언트 접속시의 기본 인코딩은 [client] 영역에 다음과 같이 적어 주면 됩니다.


    [mysqld]

    character-set-server=utf8

    collation-server=utf8_general_ci


    [client]

    default-character-set=utf8


    MySQL에서는 서버, 데이터베이스, 테이블, 컬럼에 대해서 각각의 인코딩 방식을 적용할 수 있습니다. 이미 생성된 데이터베이스나 테이블 등은 백업 / 리스토어 시에 해당 인코딩 설정이 붙어서 오기 때문에 기존에 생성된 데이터베이스, 테이블, 컬럼에 대해서는 alter 명령어로 변경해 주는 작업이 필요할 수 있습니다.


    4. Slow Query 로그 설정

     - MySQL의 성능을 모니터링 하기 위해서 필요한 설정입니다. MySQL 서버에서 처리하는 query 중에 지나치게 오랜 시간이 소요되어 퍼포먼스에 영향을 주는 query가 없는지 혹은 index를 타지 않아 문제의 소지가 될 만한 query가 있는지를 로그에 남기는 작업입니다.

    slow-query-log 는 Slow Query 로그를 남긴다는 설정입니다. slow-query-log=1 과 같은 의미 입니다.

    long_query_time은 Slow Query 로그에 남길 기준 시간을 초단위로 설정합니다.

    log_queries_not_using_indexes 는 index를 타지 않는 Query를 로그에 기록합니다.


    [mysqld]

    slow-query-log

    long_query_time=2

    log_queries_not_using_indexes



    slow_query_log_file 옵션으로 파일명을 별도로 설정을 하지 않았다면, MySQL DB가 설치된 경로에 localhost-slow.log 파일에 Slow Query 로그가 생성됩니다.


    5. Max Connections 설정

    최대 접속 가능 클라이언트 숫자 지정 (default 151)


    [mysqld]

    max_connections=500



    6. Timeout 시간 지정

    default 28800


    [mysqld]

    wait_timeout=60











    반응형

    반응형

    CentOS 7.x 에서는 기본으로 MySQL 대신 Maria DB 패키지 정보가 들어있어서 MySQL 설치를 위해서는 repository를 추가로 설치해 줘야 합니다.


    아래의 명령어를 이용하여 mysql-community repo를 설치합니다.

    rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm


    현재 MySQL 5.7 이 배포중에 있으나 위의 repo를 추가한 경우 MySQL 5.6이 기본으로 설정되어 있습니다.

    MySQL 5.7은 기존 버전에 비해서 상당한 변화가 있었기 때문에 다음 포스팅에서 다시 다루기로 하고 일단은 5.6 버전을 설치해 보겠습니다.


    아래 명령어로 MySQL을 설치합니다.

    yum install mysql-community-server


    아래 명령어를 이용해서 MySQL 서비스를 실행합니다.

    # systemctl start mysqld


    기본 세팅에서 DB는 /var/lib/mysql 에 저장이 되며, /var/log/mysqld.log 파일에 로그 기록이 남습니다.

    기본 세팅에서는 별도의 비밀번호 입력없이 아래와 같이 입력해서 로그인 할수 있습니다.

    mysql


    MySQL의 보안을 위해서 root 계정에 비밀번호를 설정하고, anonymous 계정을 삭제합니다.

    mysql_secure_installation

    실행하면 먼저 현재 설정된 MySQL root 비밀번호를 입력하라고 나오고, 입력후에는 MySQL root 비밀번호를 변경 할지를 물어보고, anonymous 계정을 삭제할 것인지 물어봅니다. 그리고 root 계정에 대해서 원격 서버에서의 접속을 허용할 것인지 설정하고 나면 test 데이터 베이스를 삭제할 것인지를 물어보는데, MySQL 5.6에서는 기본으로 test 데이터 베이스가 존재하지 않기 때문에 삭제하겠다고 하면 에러 메시지가 나오게 됩니다. 에러가 나도 보안 설정 진행에는 문제가 없습니다. 그리고 변경된 계정 정보를 바로 반영할 것인지를 설정하면 끝납니다.


    마지막으로 아래 명령어를 이용해서 서버 재시작시 MySQL 서비스가 실행되도록 합니다.

    systemctl enable mysqld




    반응형

    반응형

    선행작업 : JDK 설치!


    아래 명령어로 tomcat을 설치한다.

    # sudo yum install tomcat tomcat-webapps tomcat-admin-webapps 


    아래 명령어로 tomcat 서비스를 실행

    # sudo systemctl start tomcat


    tomcat의 기본 포트는 8080 이므로, 해당 서버에 8080 포트로 접속하여 tomcat 서비스가 잘 돌아가는지 확인



    @ 계정 설정

    vi /etc/tomcat/tomcat-users.xml 


    "tomcat-users" element 에 아래와 비슷하게 계정을 추가한다.

    <user username="admin" password="password" roles="admin-gui,manager-gui"/>


    변경한 내용을 적용하기 위해 톰캣 서비스를 다시 시작한다.

    sudo systemctl restart tomcat



    @ 톰캣 메모리 설정

    아래 설정파일에서 메모리 크기를 지정할 수 있다.

    vi /etc/tomcat/tomcat.conf


    JAVA_OPTS 라고 되어 있는 부분을 다음과 같이 변경한다. (Xms 512M, Xmx1024M 예시)

    JAVA_OPTS="-Xms512M -Xmx1024M"


    톰캣 운영 도중 자주 나타나는 java.lang.OutOfMemoryError: PermGen space 에러는 heap 메모리의 특정 영역에 객체를 할당 할 수 있는 공간이 충분하지 않아서 발생하는 것으로 클래스와 매써드 객체가 저장되는 영역이 부족해서 생긴다. 

    에러의 원인에 따라 하나의 클래스의 생성자에서 차지하는 heap 메모리가 많아서 발생하는 경우 XX:MaxNewSize 옵션을 추가해 주고, 서블릿이 로딩하는 클래스와 매써드가 많아서 발생하는 경우에는 XX:MaxPermSize 옵션을 추가해 준다. (두 가지 다 적용해도 무방)

    JAVA_OPTS="-Xms512M -Xmx1024M -XX:PermSize=256M -XX:MaxPermSize=256M -XX:NewSize=128M -XX:MaxNewSize=128M"


    또한 $CATALINA_BASE/conf/web.xml 파일의 enablePooling 옵션을 아래와 같이 사용하지 않는 것으로 설정하면, jsp를 로딩한 후에 메모리 상에서 제거하게 되므로 위의 에러가 나타날 가능성을 줄여준다. Pooling 을 사용하지 않으므로 동시 요청이 많은 경우 약간의 성능 차이는 발생할 수 있음.

    <init-param>

        <param-name>enablePooling</param-name>

        <param-value>false</param-value>

    </init-param>


    @ 부팅시 서비스가 시작되도록 등록

    # sudo systemctl enable tomcat


    @ 부팅시 서비스가 시작되지 않게 삭제

    # sudo systemctl disable tomcat



    반응형