본문 바로가기

DevOps/Linux

[Linux] Linux DB서버 구축하기

MariaDB 설치

# DB서버를 구축할 VM에 해당 명령어를 통해 MariaDB를 설치

yum -y install mariadb-server mariadb
systemctl start mariadb

방화벽 설정

 

firewall-cmd --permanent --add-service=mysql
firewall-cmd --reload

 

# 이후 GUI 환경에서 방화벽을 설정해본다

firewall-config

# 이후 Permanent 설정후 mysql 체크, Opthion 탭에서 reoad firewall을 누른다


DB 실습

mysql -u root -p

# 해당명령어로 mysql 서버 접속 후 Database를 열람

SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

# 출력됨을 확인할 수 있다.

 

mysqladmin -u root password '1234'

# root 에게 1234의 패스워드를 부여한다.


Client 서버에서 DB 서버로 접속하기

# 2번 VM (Client) 서버에서도 MariaDB를 설치한다

yum -y install mariadb-server mariadb

# mysql 명령어를 사용하기위해 설치한다

 

mysql -h 192.168.56.20 -u root -p
ERROR 1130 (HY000): Host '192.168.56.21' is not allowed to connect to this MariaDB server

# 해당 명령어를 입력하여 DB서버 접속시 ERROR가 발생한다. 이유는 서버 1(DB서버)에서 외부 접속을 허용하지 않았기 때문에 이런 ERROR가 발생한것이다.


DB서버 외부접속 허용하기 및 계정생성

# 다시 1번서버로 접속을 한다.

mysql -u root -p

# 로그인 후 DATABASE를 확인한다

SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

# MariaDB를 생성하게되면 root 계정이 하나 생성되고 비밀번호는 없다. 로컬에서만 생성되기 때문에 외부(VM2)에서 접속이 불가능하다. 따라서 접속이 가능한 계정을 하나 생성할 것이다.

use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

# mysql 데이터베이스를 사용하는데 필요한 정보들이 들어있다.

show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
24 rows in set (0.00 sec)

# mysql 데이터베이스의 테이블들의 목록을 조회할수 있고 user에 사용자에 대한 정보가 있다.

 

select user, host from user where user NOT LIKE '';
+------+-----------+
| user | host      |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1       |
| root | host      |
| root | localhost |
+------+-----------+
4 rows in set (0.00 sec)

# 해석 : user, host(세로줄인 컬럼들) 을 user라는 테이블에서 검색을 하되 user 컬럼에서 공백인 부분은 검색하지 말라는 뜻이다.

 

GRANT ALL PRIVILEGES ON *.* TO test@'192.168.56.%' IDENTIFIED BY '1234'
Query OK, 0 rows affected (0.00 sec)

# GRANT 권한 부여. *.*의 의미는 데이터베이스와 모든 테이블에 권한을 주겠다는 뜻이다.

# TEST라는 계정이 접속할 수 있는 사람은 192.168.56.1~255 이다.

# 비밀번호는 1234로 부여하였다.

 

select user, host from user;
+------+--------------+
| user | host         |
+------+--------------+
| root | 127.0.0.1    |
| test | 192.168.56.% |
| root | ::1          |
|      | host         |
| root | host         |
|      | localhost    |
| root | localhost    |
+------+--------------+

# user 테이블에 test 계정이 추가됨을 확인할 수 있다.


데이터베이스 실습

# 2번 계정에 접속한다.

mysql -h 192.168.56.20 -u test -p

# 이후 test 1번 서버에서 생성한 test 계정을 접속하고 데이터 베이스를 확인해본다

SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.01 sec)

# 새로운 DATABASE인 member_db를 추가해보겠다

CREATE DATABASE member_db;
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| member_db          |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

# member_db가 추가됨을 확인할 수 있다.

 

use member_db;
Database changed

# 생성한 데이터베이스인 member_db를 선택하고 테이블을 확인한다

 

show tables;
Empty set (0.00 sec)

# 아무것도 생성하지 않았으니 아무것도 뜨지 않는다.

 

CREATE TABLE member (
-> id VARCHAR(12) NOT NULL PRIMARY KEY, # 가변형 문자 12문자 허용에 NULL허용 안하고 Primary 
-> name NVARCHAR(5),                                                        # KET 설정
-> age INT,
-> address NVARCHAR(5));

# 새로운 테이블인 member를 생성한다

# 값을 입력할때 ID, NAME, AGE, ADDRESS 순서로 입력하면 된다.

 

explain member;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | varchar(12) | NO   | PRI | NULL    |       |
| name    | varchar(5)  | YES  |     | NULL    |       |
| age     | int(11)     | YES  |     | NULL    |       |
| address | varchar(5)  | YES  |     | NULL    |       |
+---------+-------------+------+

# member에 대한 정보를 확인한다

# explain 테이블은 테이블의 구조를 보는 명령어이다 #DESC

 

INSERT INTO member VALUES ('kim','kimchulsu',35,'seoul');
INSERT INTO member VALUES ('lee','leehosung',30,'seoul');
INSERT INTO member VALUES ('park','parkjisung',20,'busan');
INSERT INTO member VALUES ('joe','joeinyoung',40,'daegu');

# member 테이블에 값을 입력한다.

 

# member 테이블의 모든 데이터를 확인해보자

select * from member;
+------+-------+------+---------+
| id   | name  | age  | address |
+------+-------+------+---------+
| joe  | joein |   40 | daegu   |
| kim  | kimch |   35 | seoul   |
| lee  | leeho |   30 | seoul   |
| park | parkj |   20 | busan   |
+------+-------+------+---------+
4 rows in set (0.00 sec)

# 모든 내용을 조회하라는 뜻이다. name이 5글자만 들어간 이유는 name세팅시 5글자만 허용했기 때문이다.


실습 1

문제

# member 테이블에서 아이디가 'kim'인 데이터를 조회

 

명령어

select * from member where id='kim';

 

출력결과

+-----+-------+------+---------+
| id  | name  | age  | address |
+-----+-------+------+---------+
| kim | kimch |   35 | seoul   |
+-----+-------+------+---------+
1 row in set (0.00 sec)

실습 2

문제

# member 테이블에서 나이가 30살 이상인 데이터를 조회

 

명령어

select * from member where age >30;

 

출력결과

+-----+-------+------+---------+
| id  | name  | age  | address |
+-----+-------+------+---------+
| joe | joein |   40 | daegu   |
| kim | kimch |   35 | seoul   |
+-----+-------+------+---------+

실습 3

문제

# 아이디가 kim인 사람의 나이를 검색하라

 

명령어

select age from member where id='kim';

 

출력결과

+------+
| age  |
+------+
|   35 |
+------+
1 row in set (0.00 sec)

실습 4

문제

# joe라는 아이디를 가진 사람의 나이를 50으로 세팅하시오

 

명령어

update member set age=50 where id ='joe';

 

출력결과

select * from member;
+------+-------+------+---------+
| id   | name  | age  | address |
+------+-------+------+---------+
| joe  | joein |   50 | daegu   |
| kim  | kimch |   35 | seoul   |
| lee  | leeho |   30 | seoul   |
| park | parkj |   20 | busan   |
+------+-------+------+---------+
4 rows in set (0.00 sec)

# joe 나이(age)가 50으로 바뀐것을 알 수 있다.


NVARCHAR와 VARCHAR의 차이

# VARCHAR는 영어만 입력이 가능하지만 NVARCHAR는 한글도 입력이 가능하다

# N은 유니코드를 뜻한다.

# 한글 데이터를 저장하고 싶다면 NVARCHAR를 이용한다.

'DevOps > Linux' 카테고리의 다른 글

[Linux] Linux 파일 전송 프로토콜  (0) 2021.08.25
[Linux] XE를 이용하여 웹서버 구축하기  (0) 2021.08.25
[Linux] SELinux  (0) 2021.08.24
[Linux] Linux 데이터베이스 기초  (0) 2021.08.24
[Linux] DNS 레코드  (0) 2021.08.23