테스트 환경

Ubuntu 16.04.2 LTS


Oracle DB를 이용할 일이 생겨서 Ubuntu에 Oracle XE를 설치해 보았습니다.


설치하는데 아래 링크를 참조했습니다.

http://www.gokhanatil.com/2016/04/how-to-install-oracle-11gr2-xe-on-ubuntu.html


먼저 설치 패키지를 아래 링크에서 다운로드 합니다. 

(2017년 3월 30일 현재 2014년에 배포한 11gR2 가 최신버전 입니다.)

http://www.oracle.com/technetwork/database/database-technologies/express-edition/downloads/index.html


Oracle 홈페이지에서는 리눅스 용으로는 rpm을 zip으로 압축해서 배포하고 있습니다.


다운로드 완료 후에는 다음 명령으로 압축을 풀어 줍니다.


$ unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip


압축이 풀리면 Disk1 폴더가 생성되고 그 안에 rpm 파일이 있습니다.


rpm 파일을 Ubuntu 에서 쓰는 deb 파일로 변환을 해 주어야 합니다.


rpm을 deb로 변경할 때는 alien 을 사용하게 됩니다. 


만약 alien 이 설치되어 있지 않다면 다음 명령으로 설치합니다.


$ sudo apt install alien 


그리고 오라클 사용에 필요한 라이브러리를 설치합니다. (사용자의 환경에 따라 이미 설치되어 있을 수도 있습니다.)


$ sudo apt install libaio1


Disk1 폴더에서 아래 명령으로 rpm을 deb로 변경합니다. (시간이 상당히 걸리는 작업입니다.)


$ sudo alien --scripts oracle-xe_11.2.0-1.0.x86_64.rpm


deb 파일을 다음 명령으로 설치를 합니다.


$ sudo dpkg -i oracle-xe_11.2.0-2_amd64.deb


설치 도중에 /sbin/chkconfig 가 없다는 메시지가 나오게 되는데, redhat 계열에서 사용하는 설정인데 무시하셔도 상관 없습니다. 그래도 설정을 하고 싶다면, 아래 링크를 참조하세요.

http://meandmyubuntulinux.blogspot.com/2012/05/installing-oracle-11g-r2-express.html


그리고 설치 후에는 설정을 위해서 스크립트를 실행해야 합니다. 실행시에 발생할 에러를 막기 위해서 아래와 같이 링크를 설정하고 폴더를 생성합니다. (폴더가 이미 존재하는 경우도 있습니다.)


$ sudo ln -s /usr/bin/awk /bin/awk

$ sudo mkdir /var/lock/subsys


그리고 스크립트를 돌려서 초기 설정을 합니다.


$ sudo /etc/init.d/oracle-xe configure


초기 설정을 위해 몇가지 질문을 하는데, 성실히 대답해 주면 됩니다.


아래 명령으로 시작합니다.


$ sudo /etc/init.d/oracle-xe start


아래 명령으로 서버를 종료합니다.


$ sudo /etc/init.d/oracle-xe stop




신고
 
 
Posted by ShineUm
 
 

테스트 환경

Ubuntu (16.04.2 LTS)


Ubuntu 사용 도중 crash 가 발생하면 부팅시에 계속 메시지가 나타나게 됩니다.


문제가 해결되고 나서도 메시지가 계속 나타나는 경우 다음의 방법으로 해결 합니다.


1. 터미널을 연다. (Ctrl + Alt + t)


2. 다음 경로로 이동


$ cd /var/crash 



3. crash 파일 확인 후 삭제 



신고
 
 
Posted by ShineUm
 
 

테스트 환경 

Ubuntu (16.04.2 LTS)


예전에 한번 Ubuntu 에서 JDK 설치하기를 포스팅한 적이 있었는데, 다시 설치하다보니 예전 방법에서는 스크립트 오류가 나서 새로 포스팅을 합니다. (예전 포스트 바로가기)


참고로 예전 방식대로 oracle java 홈페이지에서 rpm파일을 다운로드 받아서 alien 을 이용해서 설치 하게 되면 /usr/sbin/alternatives 를 찾을 수 없다는 에러가 나오면서 스크립트가 중단되는 에러가 발생하며 종료가 됩니다. 


그래서 쉽게 설치할 수 있는 다른 방법을 이용해서 설치해 보겠습니다.


1. 먼저 터미널 창을 엽니다. (Ctrl + Alt + t)


2. 다음과 같이 입력하여 repository 를 추가합니다. 


$ sudo add-apt-repository ppa:webupd8team/java 



3. 설치 스크립트를 업데이트하고 설치합니다.


$ sudo apt update; sudo apt install oracle-java8-installer



(2017년 3월 19일 현재 jdk9 는 정식 릴리즈 되지 않은 상태지만 추후에는 설치 패키지 명을 oracle-java9-installer 로 바꿔주기만 하면 jdk9 도 설치가 가능할거에요..)


4. 추후에 나오는 팝업은 긍정적으로 답변하면 설치가 시작됩니다. (라이센스 동의 등..)


5. 환경변수 등록을 추가하고 싶다면 아래 명령어도 실행해 봅니다.


$ sudo apt install oracle-java8-set-default




ps. 혹시 예전 방법으로 설치하다가 오류가 나서 중간에 막혀있는 경우 아래 방법을 이용해서 해결합니다. 


1. 터미널을 엽니다. (Ctrl + Alt + t)


2. 다음 경로로 이동합니다.


$ cd /var/lib/dpkg/info



3. JDK 설치 관련 파일들을 체크합니다.


$ ls -ltr | grep jdk


jdk 설치 관련 파일들이 화면에 출력됩니다.


4. 설치하던 버전에 맞는 파일들을 삭제합니다. (잘못 삭제하면 다른 문제가 생길 수 있으니 주의!)


5. 다음 명령어로 패키지 삭제를 완료합니다.


$ sudo apt autoremove





신고
 
 
Posted by ShineUm
분류없음2017.01.23 14:14
 
 

테스트 환경


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



~

신고
 
 
Posted by ShineUm
분류없음2016.10.12 01:28
 
 

예전에 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





 



신고
 
 
Posted by ShineUm
 
 

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 구문 사용 권한


신고
 
 
Posted by ShineUm
 
 

CentOS 설치 후에 어플리케이션 설치 및 설정 후 무언가 제대로 되지 않는다면 대부분 SELinux 설정 때문인 경우가 많습니다.


SELinux 에 대해서 알아보도록 하겠습니다.


SELinux란 Security-Enhanced Linux 의 줄임말로 보안이 향상된 리눅스라고 정의되어 있습니다.


보안과 사용자 편의는 양날의 검인지라, 보안이 향상되었다는 것은 무언가 사용하기 불편할 수 있다라는 의미입니다.


SELinux 상에서는 각 응용 프로그램에 대해서 접근이 가능한 설정 파일이나 사용할 수 있는 폴더의 위치에 대해서 권한이 명확하게 정의가 되었습니다.


예를 들자면 httpd 프로세스가 php 를 통해서 특정 경로에 파일을 write 하는 것도 SELinux context type이 맞아야만 가능합니다.


또한 mysql 의 DB 경로를 변경할 때에도 해당 폴더에 맞는 SELinux context type 이어야 가능합니다.



1. SELinux 기본


SELinux는 enforcing, permissive, disabled 세 가지 정책을 설정할 수 있습니다.


enforcing 의 경우 보안 정책을 적용하는 것이고, permissive 의 경우는 경고만 보여주고, disabled 는 아예 로딩하지 않는 것입니다.


그리고 targeted, minimum, mls 등의 타입을 지정할 수 있습니다.


targeted는 지정된 프로세스들을 보호하는 것이고, minimum 은 targeted 를 변형하여 선택된 프로세스만 보호하는 것이고, mls 는 여러 레벨로 보안을 설정하는 것입니다.


현재 설정을 확인하기 위해서는 getenforce 명령어를 사용합니다.


# getenforce


그리고 임시 설정 변경을 위해서는 setenforce 명령어를 이용하면 됩니다. (리부팅시 원래 상태로 돌아옴)


SELinux 설정을 permissive 로 변경


# setenforce 0


SELInux 설정을 enforcing 으로 변경


# setenforce 1


영구적인 설정 변경을 위해서는 아래의 설정파일을 열어서 변경하면 됩니다.


# vi /etc/selinux/config 



2. chcon 을 이용한 context type 변경


SELinux 를 사용하지 않으면 설정에 문제는 사라지겠지만 보안이 약해지는 문제가 있습니다. 따라서 SELinux 를 적용한 상태에서 특정 폴더 혹은 파일의 context type 을 상황에 맞게 적용하는 방법에 대해서 설명 드리겠습니다.


이전에 mysql 설정 포스팅에서도 잠깐 소개되었었는데, mysql의 DB 경로를 변경하는 경우에 대해서 설명해 보겠습니다. 


기본 경로 (/var/lib/mysql)를 /datadir 로 변경한다고 가정하면, 아래와 같이 새 DB 경로의 context 를 변경해 주면 mysql 프로세스가 사용이 가능한 권한을 얻게 됩니다.


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


또한 php 프로세스가 httpd 상에서 파일 쓰기 권한이 필요하다면, 권한이 필요한 경로 (/var/www/html/phpfile) 에 다음과 같이 설정해 주면 됩니다.  


# chcon -t httpd_sys_rw_content_t -R /var/www/html/phpfile



3. SELinux 설정값 확인 및 변경


이번에는 getsebool / setsebool 명령어를 이용해서 SELinux 설정을 확인하고 변경해 보겠습니다.


httpd 프로세스에서 네트워크 연결 허용 여부를 결정하는 SELinux 설정은 httpd_can_network_connect 입니다.


아래와 같이 입력하여 현재 설정값을 확인해 봅니다.


# getsebool httpd_can_network_connect


혹은 getsebool -a 후에 grep 으로도 확인할 수 있습니다.


위의 연결을 허용해 주고 싶으면 아래와 같이 입력하면 됩니다.


# setsebool -P httpd_can_network_connect on


on 대신 1을 입력해도 됩니다.


반대로 연결을 허용하지 않겠다면,


# setsebool -P httpd_can_network_connect off


off 대신 0을 입력해도 됩니다.






신고
 
 
Posted by ShineUm
 
 

실제 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







신고
 
 
Posted by ShineUm
 
 

이전 포스팅에서 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











    신고
     
     
    Posted by ShineUm
     
     

    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




    신고
     
     
    Posted by ShineUm

    티스토리 툴바