Tuesday, April 17, 2018

CentOS 7.3 리눅스 네트워크 ] 11.1 데이터베이스 - MariaDB 설치 및 연동


안녕하세요. 썬구루입니다. 이 게시물에서는 CentOS 7.3 리눅스 기반 MariaDB 데이터베이스 서버 설치 및 Tomcat과 연동하는 방법에 대해 알아보도록 하겠습니다. CentOS 7.3에서 yum 명령으로 MariaDB을 설치 시도하면 MariaDB가 설치됩니다. ^^

텍스트 파일에는 비정형화된 데이터가 저장됩니다. 일정한 형식의 정형화된 데이터를 저장하기 위해 데이터베이스 시스템(RDBMS)를 사용하는데 여러 종류의 데이터베이스 시스템 중 MySQL이라는 데이터베이스가 있었습니다. 썬마이크로시스템즈(Sun Microsystems)가 인수를 하였고 다시 오라클(Oracle)이 썬마이크로시스템즈를 인수함으로써 지금은 Oracle MySQL로 되어 있습니다. 이것에 대한 클론이 MariaDB입니다.

이 게시물에서 데이터베이스와 데이터베이스 시스템이 무엇인지에 대해 설명하지 않습니다. MariaDB 데이터베이스 서버를 CentOS 7.3 리눅스에 설치하고 이전에 설치한 Apache Tomcat과 연동하는 방법에 대해 설명합니다. 그리고 테스트 용 JSP 파일을 사용하여 Apache Tomcat 과 MariaDB 연동을 확인합니다.

서버 IP 주소
관련 서비스
서비스 포트(Port) 주소
192.168.80.10
Apache HTTPD
 80
192.168.80.11
Apache Tomcat
 8080, 8009
192.168.80.12
MariaDB Database
 3306


■ MariaDB

1). CentOS 7.3에 MariaDB 설치

DB01 가상머신에 CentOS 7.3 DVD ISO 파일을 연결한 후 아래와 같이 yum 명령으로 MariaDB를 설치한다.

[root@db01 ~]# cd /etc/yum.repos.d/
[root@db01 yum.repos.d]#
[root@db01 yum.repos.d]# vi CentOS-Media.repo

# CentOS-Media.repo
#
#  This repo can be used with mounted DVD media, verify the mount point for
#  CentOS-7.  You can use this repo and yum to install items directly off the
#  DVD ISO that we release.
#
# To use this repo, put in your DVD and use it with the other repos too:
#  yum --enablerepo=c7-media [command]
#
# or for ONLY the media repo, do this:
#
#  yum --disablerepo=\* --enablerepo=c7-media [command]

[c7-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
        file:///media/cdrom/
        file:///run/media/root/CentOS\ 7\ x86_64/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[root@db01 yum.repos.d]#
[root@db01 yum.repos.d]# yum --disablerepo=\* --enablerepo=c7-media -y install mariadb mariadb-server

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * c7-media:
Resolving Dependencies
--> Running transaction check
---> Package mariadb.x86_64 1:5.5.52-1.el7 will be installed
---> Package mariadb-server.x86_64 1:5.5.52-1.el7 will be installed
--> Processing Dependency: perl-DBD-MySQL for package: 1:mariadb-server-5.5.52-1.el7.x86_64
--> Running transaction check
---> Package perl-DBD-MySQL.x86_64 0:4.023-5.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================
 Package                    Arch               Version                       Repository            Size
========================================================================================================
Installing:
 mariadb                    x86_64             1:5.5.52-1.el7                c7-media             8.7 M
 mariadb-server             x86_64             1:5.5.52-1.el7                c7-media              11 M
Installing for dependencies:
 perl-DBD-MySQL             x86_64             4.023-5.el7                   c7-media             140 k

Transaction Summary
========================================================================================================
Install  2 Packages (+1 Dependent package)

Total download size: 20 M
Installed size: 104 M
Downloading packages:
--------------------------------------------------------------------------------------------------------
Total                                                                    65 MB/s |  20 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 1:mariadb-5.5.52-1.el7.x86_64                                                        1/3
  Installing : perl-DBD-MySQL-4.023-5.el7.x86_64                                                    2/3
  Installing : 1:mariadb-server-5.5.52-1.el7.x86_64                                                 3/3
  Verifying  : 1:mariadb-server-5.5.52-1.el7.x86_64                                                 1/3
  Verifying  : perl-DBD-MySQL-4.023-5.el7.x86_64                                                    2/3
  Verifying  : 1:mariadb-5.5.52-1.el7.x86_64                                                        3/3

Installed:
  mariadb.x86_64 1:5.5.52-1.el7                   mariadb-server.x86_64 1:5.5.52-1.el7           

Dependency Installed:
  perl-DBD-MySQL.x86_64 0:4.023-5.el7                                                           

Complete!
[root@db01 yum.repos.d]#


[root@db01 yum.repos.d]# rpm -qa | grep -i mariadb

mariadb-server-5.5.52-1.el7.x86_64
mariadb-libs-5.5.52-1.el7.x86_64
mariadb-5.5.52-1.el7.x86_64

[root@db01 yum.repos.d]# rpm -qa | grep -i mysql

perl-DBD-MySQL-4.023-5.el7.x86_64

[root@db01 yum.repos.d]#
[root@db01 yum.repos.d]# id -a mysql

uid=27(mysql) gid=27(mysql) groups=27(mysql)

[root@db01 yum.repos.d]# 

2). MariaDB 서비스 시작 종료

systemctl [ start | stop ] mariadb

3). 시스템 부팅 시 MariaDB 서비스 자동 시작

systemctl [ enable | disable ] mariaDB




4). MariaDB 시작 및 테이블 생성

아래와 같은 명령을 실행하여 MariaDB 서비스를 실행합니다.

[root@db01 yum.repos.d]# systemctl enable mariadb

Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

[root@db01 yum.repos.d]# systemctl start mariadb
[root@db01 yum.repos.d]#
[root@db01 yum.repos.d]# systemctl status mariadb

● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-02-04 16:47:36 EST; 12s ago
  Process: 37868 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=0/SUCCESS)
  Process: 37839 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS)
 Main PID: 37867 (mysqld_safe)
   CGroup: /system.slice/mariadb.service
           ├─37867 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
           └─38024 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib6...

Hint: Some lines were ellipsized, use -l to show in full.

[root@db01 yum.repos.d]#
[root@db01 yum.repos.d]# firewall-cmd --permanent --zone=public --add-port=3306/tcp
success
[root@db01 yum.repos.d]# firewall-cmd --reload
success
[root@db01 yum.repos.d]# 

아래와 같은 명령을 실행하여 MariaDB의 root 계정 암호를 설정합니다.

[root@db01 yum.repos.d]# mysqladmin -u root password '1234'

아래와 같은 명령을 실행하여 MariaDB에 접속합니다.

[root@db01 yum.repos.d]# mysql -u root -p

Enter password: 암호입력(1234) 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

아래와 같이 MariaDB에 일반계정을 생성합니다. 계정 이름은 testuser이고 암호는 1234입니다.

MariaDB [(none)]> grant select, insert, update, delete, create on test.* to 'testuser'@'localhost' identified by '1234';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant select, insert, update, delete, create on test.* to 'testuser'@'%' identified by '1234';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye

[root@db01 yum.repos.d]# 

생성한 testuser 계정으로 다시 MariaDB에 접속합니다. 그리고 테스트 용 test 테이블을 생성합니다.

[root@db01 yum.repos.d]# mysql -u testuser -p

Enter password: 암호입력(1234)
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 5.5.52-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> connect test;
Connection id:    5
Current database: test

MariaDB [test]> create table test(name varchar(30));
Query OK, 0 rows affected (0.01 sec)

MariaDB [test]> select * from test;
Empty set (0.00 sec)

MariaDB [test]> insert into test values('MariaDB Database');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> select * from test;
+------------------+
| name             |
+------------------+
| MariaDB Database |
+------------------+
1 row in set (0.00 sec)

MariaDB [test]> insert into test values('sunguru');
Query OK, 1 row affected (0.00 sec)

MariaDB [test]> select * from test;
+------------------+
| name             |
+------------------+
| MariaDB Database |
| sunguru          |
+------------------+
2 rows in set (0.00 sec)

MariaDB [test]> commit;
Query OK, 0 rows affected (0.00 sec)

MariaDB [test]> quit
Bye
[root@db01 yum.repos.d]# 




■ MariaDB 과 Apache Tomcat 연동

WAS01 가상머신에 CentOS 7.3 DVD ISO 파일을 연결한 후 mysql-connector-java 패키지를 설치합니다. 그리고 관련된 파일을 Tomcat 라이브러리 디렉터리에 복사하고 Tomcat을 재실행하면 연동이 끝납니다.

[root@was01 ~]# cd /run/media/root/CentOS\ 7\ x86_64/Packages/
[root@was01 Packages]# ls | grep connector-javamysql-connector-java-5.1.25-3.el7.noarch.rpm
[root@was01 Packages]#
[root@was01 Packages]# yum --disablerepo=\* --enablerepo=c7-media -y install mysql-connector-java

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * c7-media:
Resolving Dependencies
--> Running transaction check
---> Package mysql-connector-java.noarch 1:5.1.25-3.el7 will be installed
--> Processing Dependency: slf4j for package: 1:mysql-connector-java-5.1.25-3.el7.noarch
--> Running transaction check
---> Package slf4j.noarch 0:1.7.4-3.el7 will be installed
--> Processing Dependency: mvn(javassist:javassist) for package: slf4j-1.7.4-3.el7.noarch
--> Processing Dependency: mvn(commons-lang:commons-lang) for package: slf4j-1.7.4-3.el7.noarch
--> Processing Dependency: mvn(ch.qos.cal10n:cal10n-api) for package: slf4j-1.7.4-3.el7.noarch
--> Running transaction check
---> Package apache-commons-lang.noarch 0:2.6-15.el7 will be installed
---> Package cal10n.noarch 0:0.7.7-4.el7 will be installed
---> Package javassist.noarch 0:3.16.1-10.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package                   Arch        Version              Repository     Size
================================================================================
Installing:
 mysql-connector-java      noarch      1:5.1.25-3.el7       c7-media      1.3 M
Installing for dependencies:
 apache-commons-lang       noarch      2.6-15.el7           c7-media      276 k
 cal10n                    noarch      0.7.7-4.el7          c7-media       36 k
 javassist                 noarch      3.16.1-10.el7        c7-media      627 k
 slf4j                     noarch      1.7.4-3.el7          c7-media      170 k

Transaction Summary
================================================================================
Install  1 Package (+4 Dependent packages)

Total download size: 2.3 M
Installed size: 3.4 M
Downloading packages:
--------------------------------------------------------------------------------
Total                                               89 MB/s | 2.3 MB  00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : javassist-3.16.1-10.el7.noarch                               1/5
  Installing : apache-commons-lang-2.6-15.el7.noarch                        2/5
  Installing : cal10n-0.7.7-4.el7.noarch                                    3/5
  Installing : slf4j-1.7.4-3.el7.noarch                                     4/5
  Installing : 1:mysql-connector-java-5.1.25-3.el7.noarch                   5/5
  Verifying  : slf4j-1.7.4-3.el7.noarch                                     1/5
  Verifying  : cal10n-0.7.7-4.el7.noarch                                    2/5
  Verifying  : 1:mysql-connector-java-5.1.25-3.el7.noarch                   3/5
  Verifying  : apache-commons-lang-2.6-15.el7.noarch                        4/5
  Verifying  : javassist-3.16.1-10.el7.noarch                               5/5

Installed:
  mysql-connector-java.noarch 1:5.1.25-3.el7                             

Dependency Installed:
  apache-commons-lang.noarch 0:2.6-15.el7      cal10n.noarch 0:0.7.7-4.el7
  javassist.noarch 0:3.16.1-10.el7             slf4j.noarch 0:1.7.4-3.el7

Complete!

[root@was01 Packages]#

설치된 mysql-connector-java 패키지에 관련된 /usr/share/java/mysql-connector-java.jar 파일을 아래와 같이 Apache Tomcat의 라이브러리 디렉터리에 복사한 후 Tomcat 서비스를 재실행합니다.

[root@was01 Packages]# cp /usr/share/java/mysql-connector-java.jar /usr/share/tomcat/lib/
[root@was01 Packages]# systemctl restart tomcat
[root@was01 Packages]#

■ JSP 파일를 가지고 MariaDB 연결 테스트

WAS01 가상머신에서 아래와 같은 명령을 실행하여 [ mariadb_test.jsp ] 파일을 생성합니다. 아래 JSP 파일 내용은 이 게시물에 첨부된 파일을 참고하세요.

[root@was01 Packages]# cd /usr/share/tomcat/webapps/ROOT/
[root@was01 ROOT]#
[root@was01 ROOT]# vi mariadb_test.jsp

<html>
  <head>
  <title> MariaDB Connection Test</title>
  </head>
 <body>

<%@ page contentType="text/html" language="java" %>
<%@ page import="java.sql.*" %>

<%
 Connection con = null;
 PreparedStatement PS = null;
 ResultSet RS = null;

 try {

// MariaDB 접속을 위한 정보입력 시작

  String MARIADB_SERVER = "192.168.80.12:3306";
  String MARIADB_SERVER_USERNAME = "testuser";
  String MARIADB_SERVER_PASSWORD = "1234";
  String MARIADB_DATABASE = "test";
  String URL = "jdbc:mysql://" + MARIADB_SERVER + "/" + MARIADB_DATABASE;
  Class.forName("com.mysql.jdbc.Driver");
  con = DriverManager.getConnection(URL, MARIADB_SERVER_USERNAME, MARIADB_SERVER_PASSWORD);

// MariaDB 접속을 위한 정보입력 종료

  %>

  <%

// MariaDB 질의문처리 시작

  String query = "select * from test";
  PS = con.prepareStatement(query);
  RS = PS.executeQuery();

// MariaDB 질의문처리 시작

// 질의문 결과표출 시작

  int count=0;
  while(RS.next()) {
  String name = RS.getString("name");
  %>
  <p>Name : <%=name%></p>
  <%
  count++;
}

// 질의문 결과표출 시작

// 예외처리 시작

 } catch(Exception ErrMsg) {
  ErrMsg.printStackTrace();
  out.println("Unfortunately, Database connection failed");
 }
// 예외처리 시작

%>

 </body>
</html>

[root@was01 ROOT]# 

■ 웹브라우저를 사용하여 Apache Tomcat과 MariaDB 데이터베이스 연동 확인

호스트 운영체제(여러분들의 윈도우 운영체제)에 있는 웹브라우저를 사용하여 웹서버로 접속 테스트를 합니다.

HTTPD 웹서버로 mariadb_test.jsp 파일 서비스 요청을 하면 이를 Tomcat 웹 응용(WAS) 서버로 재요청하고 JSP 파일에 있는 DB 쿼리를 처리하기 위해 mysql-connector를 사용하여 MariaDB 데이터베이스에 접속, 데이터베이스 내에 있는 테이블을 확인하여 정보를 참조하여 역순으로 처리하여 클라이언트(웹브라우저)로 응답합니다.


성공적으로 잘 되었네요. 여기까지 MariaDB 설치 및 연동에 대해 알아보았습니다.



No comments:

Post a Comment