사악미소
현대마법의 공방
사악미소
전체 방문자
오늘
어제
  • 분류 전체보기
    • Document
    • JavaScript
    • jQuery
    • Spring Web
      • Spring Framework
      • Spring Boot
    • Android
      • Java Code
      • Setting
    • iOS
      • Swift Code
      • Setting
    • PHP
      • Code
      • Setting
    • AWS
    • LINUX
      • Rocky Linux
      • CentOS
    • Node.js
    • Developer Tool
    • GIT
    • MAC
    • Scraping Document
    • MariaDB
    • WYSIWYG
    • Scouter
    • Docker
    • Planning
    • 용어정리
반응형

인기 글

최근 댓글

Programmer 사악미소.
사악미소

사악미소의 현대마법의 공방

[Linux] MariaDB 설치 및 세팅
LINUX/CentOS

[Linux] MariaDB 설치 및 세팅

2023. 2. 23. 13:21
728x90

 

 

#1. MariaDB 설치 및 설정 변경하기

 

1) MariaDB 설치하기

 

 

MairaDB 설치하기

$ sudo yum install -y mariadb-server

      ~~ 설 치 중 ~~

=================================================================================================================================================================
 Package                                          Arch                            Version                                    Repository                     Size
=================================================================================================================================================================
Installing:
 mariadb-server                                   x86_64                          1:5.5.68-1.el7                             base                           11 M
Installing for dependencies:
 mariadb                                          x86_64                          1:5.5.68-1.el7                             base                          8.8 M
 perl-Compress-Raw-Bzip2                          x86_64                          2.061-3.el7                                base                           32 k
 perl-Compress-Raw-Zlib                           x86_64                          1:2.061-4.el7                              base                           57 k
 perl-DBD-MySQL                                   x86_64                          4.023-6.el7                                base                          140 k
 perl-DBI                                         x86_64                          1.627-4.el7                                base                          802 k
 perl-Data-Dumper                                 x86_64                          2.145-3.el7                                base                           47 k
 perl-IO-Compress                                 noarch                          2.061-2.el7                                base                          260 k
 perl-Net-Daemon                                  noarch                          0.48-5.el7                                 base                           51 k
 perl-PlRPC                                       noarch                          0.2020-14.el7                              base                           36 k

Transaction Summary
=================================================================================================================================================================

      ~~ 이 하 생 략 ~~

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

Dependency Installed:
  mariadb.x86_64 1:5.5.68-1.el7     perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7 perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7 perl-DBD-MySQL.x86_64 0:4.023-6.el7
  perl-DBI.x86_64 0:1.627-4.el7     perl-Data-Dumper.x86_64 0:2.145-3.el7        perl-IO-Compress.noarch 0:2.061-2.el7       perl-Net-Daemon.noarch 0:0.48-5.el7
  perl-PlRPC.noarch 0:0.2020-14.el7

 

 

 

MariaDB 설치 확인

$ rpm -qa | grep mariadb
mariadb-connector-c-config-3.2.6-1.el9_0.noarch
mariadb-common-10.5.22-1.el9_2.x86_64
mariadb-connector-c-3.2.6-1.el9_0.x86_64
mariadb-errmsg-10.5.22-1.el9_2.x86_64
mariadb-gssapi-server-10.5.22-1.el9_2.x86_64
mariadb-backup-10.5.22-1.el9_2.x86_64
mariadb-10.5.22-1.el9_2.x86_64
mariadb-server-10.5.22-1.el9_2.x86_64
mariadb-server-utils-10.5.22-1.el9_2.x86_64

 

 

 


 

 

2) MariaDB 시간( KST ) 및 문자셋( UTF-8 ) 변경

 

설치를 완료하면 MariaDB의 시간 및 문자설정을 변경하여준다.

 

해당 경로로 이동하여 mariadb-server.cnf 혹은 server.cnf 파일을 찾아준다.

$ ls /etc/my.cnf.d/ -al
total 36
drwxr-xr-x.  2 root root  148 May 29 15:44 .
drwxr-xr-x. 97 root root 8192 May 29 15:30 ..
-rw-r--r--.  1 root root   42 Oct 13  2023 auth_gssapi.cnf
-rw-r--r--.  1 root root  295 May 27  2022 client.cnf
-rw-r--r--.  1 root root  763 Aug 11  2023 enable_encryption.preset
-rw-r--r--.  1 root root 1798 Apr 26 11:36 mariadb-server.cnf
-rw-r--r--.  1 root root  232 Aug 11  2023 mysql-clients.cnf
-rw-r--r--.  1 root root  120 Aug 11  2023 spider.cnf

 

버전 경로 파일
MariaDB 10.4 이하  /etc/my.cnf 혹은 /etc/mysql/my.cnf server.cnf
MariaDB 10.5 이상 /etc/my.cnf.d/ mariadb-server.cnf

※ 버전에 따라 server.cnf나 mariadb-server.cnf 일수도 있다.

 

 

MariaDB 데이터 베이스의 서버 설정 파일을 수정하여 준다.

$ sudo vim /etc/my.cnf.d/mariadb-server.cnf

※ 해당 포스팅은 mariadb-server.cnf 로 진행한다.

 

 

▶ 한국 KST 시간 설정

[mysqld]
default-time-zone='+9:00'

 

▶ 문자셋 UTF-8 변경

[mysqld]
init_connect=SET collation_connection=utf8_general_ci
init_connect=SET NAMES utf8
character-set-server=utf8 
collation-server=utf8_general_ci

 

※ 전체 코드

$ sudo vim /etc/my.cnf.d/mariadb-server.cnf
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#

      ~~ 이 하 생 략 ~~

# This group is only read by MariaDB servers, not by MySQL.
# If you use the same .cnf file for MySQL and MariaDB,
# you can put MariaDB-only options here
[mariadb]

# KST 한국 표준시 설정
default-time-zone='+9:00'

# UTF-8 문자셋 변경
init_connect=SET collation_connection=utf8_general_ci
init_connect=SET NAMES utf8
character_set_server=utf8
collation_server=utf8_general_ci

      ~~ 이 하 생 략 ~~

 

 


 

 

 

 

관리자 계정 설정( Password 변경 )

 

 

MariaDB 실행

$ sudo systemctl start mariadb

 

 

실행 확인

$ netstat -anp | grep 3306
(No info could be read for "-p": geteuid()=1000 but you should be root.)
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      -

포트는 3306, 데몬이름은 mysqld 이다.

 

 

 

MariaDB 보안 설정을 수행하는 Shell Script 실행한다.

 $ sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
주의: 이 스크립트의 모든 부분을 실행하는 것이 생산 환경에서 모든 MariaDB 서버에 권장됩니다!
각 단계를 주의 깊게 읽어주세요!

MariaDB에 로그인하여 보안을 설정하려면 root 사용자의 현재 비밀번호가 필요합니다.
MariaDB를 방금 설치했고 root 비밀번호를 아직 설정하지 않았다면 
비밀번호가 비어 있으므로 여기에서 그냥 엔터를 누르면 됩니다.

 

 

 

MariaDB 설치 과정에서 관리자( root ) 사용자의 계정의 권한을 설정한다.

Enter current password for root (enter for none): ENTER
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
root 계정의 현재 비밀번호를 입력하세요 (없으면 그냥 ENTER를 누르세요): ENTER
확인, 비밀번호를 성공적으로 사용했습니다. 계속 진행합니다...

root 비밀번호를 설정하면 적절한 권한 없이 MariaDB root 사용자로 로그인할 수 없게 됩니다.

아직 비밀번호를 설정하지 않았기에, Enter 키를 눌러서 설정을 진행한다.

 

 

 

먼저 MariaDB의 관리자( root ) 계정에 비밀번호를 지정하여 준다.

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

① Set root password? [Y/n] Y
② New password : 관리자_비밀번호
③ Re-enter new password : 관리자_비밀번호
Password updated successfully!
Reloading privilege tables..
 ... Success!
root 비밀번호를 설정하면 MariaDB의 root 사용자로의 로그인이 적절한 인증 없이는 불가능해집니다.

① root 비밀번호 설정하시겠습니까? [Y/n] Y
② 새 비밀번호: 관리자_비밀번호
③ 새 비밀번호를 다시 입력하세요: 관리자_비밀번호
비밀번호가 성공적으로 업데이트되었습니다!
권한 테이블을 다시 로드하는 중...
 ... 성공!

 

 

 

아래 메시지는 MariaDB 설치 시 익명 사용자가 있어 테스트를 위해 사용되었으나,

 

제품 환경에서는 제거해야 한다는 내용을 안내하고 있다.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!
기본적으로 MariaDB 설치에는 익명 사용자가 있어서
사용자 계정을 만들지 않고도 누구나 MariaDB에 로그인할 수 있습니다.
이는 테스트 용도로만 사용되며 설치를 좀 더 원활하게 진행하기 위한 것입니다.
제품 환경으로 전환하기 전에 이들을 제거해야 합니다.

익명 사용자를 제거하시겠습니까? [Y/n] Y
 ... 성공!

'Y'를 입력하여 익명 사용자를 제거하여 준다.

 

 

 

보안을 강화하기 위해 관리자( root )가 원격으로 로그인 할 수 없도록 설정하는 것을 안내하고 있다.

 

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!
보통 root는 'localhost'에서만 연결할 수 있어야 합니다.
이렇게 함으로써 네트워크에서 누군가가 root 비밀번호를 추측할 수 없도록 보장됩니다.

원격으로 root 로그인을 허용하지 않겠습니까? [Y/n] Y
 ... 성공!

'Y'를 입력하여 원격으로 root 로그인을 할 수 없도록 설정한다.

 

 

 

 

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
기본적으로 MariaDB에는 누구나 접근할 수 있는 'test'라는 데이터베이스가 포함되어 있습니다.
이 또한 테스트 용도로만 사용되며 제품 환경으로 전환하기 전에 제거해야 합니다.

테스트 데이터베이스와 해당 데이터베이스에 대한 접근 권한을 제거하시겠습니까? [Y/n] Y
 - 테스트 데이터베이스 삭제 중...
 ... 성공!
 - 테스트 데이터베이스에 대한 권한 제거 중...
 ... 성공!

 

 

 

 

MariaDB에 기본적으로 제공되는 'test' 데이터베이스를 제거할 것을 권하고 있다.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
권한 테이블을 다시 로드하면 지금까지 수행한 모든 변경 사항이 즉시 적용됩니다.

지금 권한 테이블을 다시 로드하시겠습니까? [Y/n] Y
 ... 성공!

정리 중...

모든 작업이 완료되었습니다! 위의 모든 단계를 완료했다면, MariaDB 설치가 이제 안전하게 되었을 것입니다.

MariaDB를 이용해주셔서 감사합니다!

 'Y'를 입력하여 'test' 데이터베이스와 접근 권한을 제거하여 준다.

 

 

 

 

3) 관리자 계정 계정 접속

 

 

관리자( root ) 비밀번호를 변경및 설정을 완료 했다면 MariaDB를 실행한다.

$ sudo systemctl start mariadb
$ netstat -anp | grep 3306
(No info could be read for "-p": geteuid()=1000 but you should be root.)
tcp6       0      0 :::3306                 :::*                    LISTEN      -

포트는 3306, 데몬이름은 mysqld 이다.

 

 

관리자 계정으로 MariaDB에 접속한다.

$ sudo mysql -u root -p
Enter password: 관리자_비밀번호
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.4.28-MariaDB MariaDB Server

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

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

MariaDB [(none)]>

 

 

위에서 MariaDB의 시간 설정과 문자셋을 변경하였다.

 

해당 내용이 잘 적용 되었는지 한번 확인해 보자.

 

 

한국 KST 시간 변경 확인

MariaDB> SHOW VARIABLES WHERE Variable_name LIKE '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | KST    |
| time_zone        | +09:00 |
+------------------+--------+
2 rows in set (0.016 sec)

 

UTF-8 문자셋 변경 확인

MariaDB> SHOW VARIABLES LIKE 'c%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
| collation_connection     | utf8_general_ci            |
| collation_database       | utf8_general_ci            |
| collation_server         | utf8_general_ci            |
| completion_type          | NO_CHAIN                   |
| concurrent_insert        | AUTO                       |
| connect_timeout          | 10                         |
+--------------------------+----------------------------+
14 rows in set (0.00 sec)

 

 


 

4) 부팅시 MariaDB 자동 재시작 설정

 

 

MariaDB 설치가 완료되었다면 CentOS7 재부팅 시 자동 실행되게 설정을 적용한다.

$ sudo systemctl enable mariadb
Created symlink from /etc/systemd/system/mysql.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/mysqld.service to /usr/lib/systemd/system/mariadb.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

 

부팅시 자동 시작 확인

$ sudo systemctl is-enabled mariadb
enabled

enabled 라고 나타나면 CentOS7 재부팅시 MariaDB가 자동 시작된다.

 

 

 


 

 

#3. 사용자 계정 추가

 

 

관리자 계정으로 MariaDB에 접속한다.

$ sudo mysql -u root -p
Enter password: 관리자_비밀번호

 

접속하면 아래 작업을 순서대로 하나씩 진행해 나간다.

 

1) DataBase 생성

MariaDB> CREATE DATABASE 데이터_베이스;
Query OK, 1 row affected (0.000 sec)

 

2) DataBase 생성 확인

MariaDB> SHOW Databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| 데이터_베이스      |
+--------------------+

 

3) MariaDB 사용자 계정 생성

MariaDB> CREATE USER '사용자_계정'@'%' IDENTIFIED BY '사용자_비밀번호';
Query OK, 0 rows affected (0.002 sec)
MariaDB> CREATE USER '사용자_계정'@'localhost' IDENTIFIED BY '사용자_비밀번호';
Query OK, 0 rows affected (0.002 sec)

 

4) 사용자 계정 권한 설정

 

생성한 DataBase에 대한 사용자 계정의 접근을 포함한 CRUD등의 모든 권한 부여 한다.

 

 

※ 참고

DataBase의 사용자 계정은 CRUD 및 기타 권한을 가진다.
평소 개발을 진행할때는 "ALL PRIVILEGES" 모든 권한을 전부 준 계정을 사용하는 편이지만
상황에 맞추어 권한을 변경하게 된다.

예로 실운영될 완성된 프로젝트에서는 DataBase의 SELECT, INSET, UPDATE, DELETE 권한만을 부여하고
접근 가능한 HOST 설정은 "%"가 아닌 "127.0.0.1( localhost )"를 사용하여
보안성을 강화하는 형태로 사용할 수 있다.

예) 보안 등급 지정 참고 예시
① DBA : ALL PRIVILEGES
② 설계자 : CREATE, DROP, ALTER, INDEX, INSERT, SELECT, INSERT, UPDATE, DELETE
③ 개발자, 실운영 : SELECT, INSERT, UPDATE, DELETE

 

 

① DBA

MariaDB> GRANT ALL PRIVILEGES ON 데이터_베이스.* TO '사용자_계정'@'%' WITH GRANT OPTION;

 

② 설계자

MariaDB> GRANT CREATE, DROP, ALTER, INDEX, SELECT, INSERT, UPDATE, DELETE ON 데이터_베이스.* TO '사용자_계정'@'%' WITH GRANT OPTION;

 

③ 개발자, 실운영

MariaDB> GRANT SELECT, INSERT, UPDATE, DELETE ON 데이터_베이스.* TO '사용자_계정'@'%' WITH GRANT OPTION;

 

 

5) 사용자 계정 생성 및 설정 변경사항 저장

MariaDB> FLUSH PRIVILEGES;

 

변경사항 적용 유무 확인

MariaDB> SELECT Host, User, Password, Super_priv FROM mysql.user;
+-----------+-------------+-------------------------------------------+------------+
| Host      | User        | Password                                  | Super_priv |
+-----------+-------------+-------------------------------------------+------------+
| localhost | mariadb.sys |                                           | N          |
| localhost | root        | *712B69033BB2C08B8E1243774687F3DE968DBBF4 | Y          |
| localhost | mysql       | invalid                                   | Y          |
| %         | 사용자_계정 | *712B69033BB2C08B8E1243774687F3DE968DBBF4 | N          |
| localhost | 사용자_계정 | *712B69033BB2C08B8E1243774687F3DE968DBBF4 | N          |
+-----------+-------------+-------------------------------------------+------------+

 

 

 


 

 

#4. DB관리 Tool을 이용한 원격지에서 MariaDB 접속

 

Download | DBeaver Community

Download Tested and verified for MS Windows, Linux and Mac OS X. Install: Windows installer – run installer executable. It will automatically upgrade version (if needed). MacOS DMG – just run it and drag-n-drop DBeaver into Applications. Debian package

dbeaver.io

 

 

 

 


 

 

#5. Cron을 사용한 MariaDB 데이터 베이스 자동 백업 프로세스

 

1) MariaDB 덤프 파일 Backup 디렉토리 생성

 

DataBase 백업 쉘 스크립트를 실행할 유틸티티( utility ) 디렉토리를 생성한다.

$ sudo mkdir /home/utility
$ ls /home -al
drwxr-xr-x.  5 root     root      49  7월 26 18:21 .
dr-xr-xr-x. 17 root     root     224  7월 26 16:23 ..
drwxr-xr-x.  3 root     root      60  7월 26 17:55 utility

 

 

utility 디렉토리아래 database_backup 디렉토리를 추가한다.

$ sudo mkdir /home/utility/database_backup
$ ls /home/utility -al
drwxr-xr-x. 3 root root   60  7월 26 17:55 .
drwxr-xr-x. 5 root root   49  7월 26 18:21 ..
drwxr-xr-x. 2 root root 4096  7월 26 17:55 mariadb_backup

 

 

2) 백업 Shell Script 작성 및 실행

 

먼저 MariaDB 데이터 베이스를 백업하는 쉘 스크립트를 작성한다.

$ sudo vim /home/utility/database_backup_script.sh

 

『 database_backup_script.sh 』 라는 이름의 쉘 스크립트를 생성한다.

#!/bin/bash

# 날짜 포맷
NowTime=$(date +%Y%m%d%H%M)

# home 디렉토리 경로
HomeDirPath="/home"

# DataBase 백업 디렉토리 경로
BackDirPath="/home/utility/database_backup"

# mysqldump 덤프 파일(*.sql) 생성
# mysqldump -u사용자_계정 -p사용자_비밀번호 데이터베이스_이름 > 백업_디렉토리_경로/"데이터베이스_이름_"날짜_포맷.sql
mysqldump -usaakmiso -p1q2w3e example_database > ${BackDirPath}/"example_database_"${NowTime}.sql
mysqldump -uwicked -p1q2w3e magicworkshop_database > ${BackDirPath}/"magicworkshop_database_"${NowTime}.sql

# DB 백업 파일 -15일 경과 후 삭제 
find ${BackDirPath} -type f -name "*.sql" -mtime +15 -exec rm -f {} \;

 

위 『 database_backup_script.sh 』 쉘 스크립트는

지정한 2개의 데이터 베이스에 대하여 mysqldump 명령을 사용하여

*.sql 확장자를 사용하는 덤프 파일을 만들고 /home/utiltiy/database_backup 디렉토리에 저장한다.

 

mysqldump 명령

 

이후 15일이 경과되면 /home/utiltiy/database_backup 경로에 존재하는 15일 이전에 생성된 *.sql 파일을 삭제한다.

 

 

이제 작성한 『 database_backup_script.sh 』 파일을 실행한다.

$ sudo bash /home/utility/database_backup_script.sh

 

쉘 스크립트를 실행 하였다면 데이터베이스의 덤프(*.sql)파일이 잘 생성 되었는지 확인해보자.

$ ls /home/utility/database_backup/ -al
drwxr-xr-x. 2 root root     238  7월 26 18:57 .
drwxr-xr-x. 4 root root      84  7월 26 18:57 ..
-rw-r--r--. 1 root root    4501  7월 26 18:57 첫번째_데이터베이스_YYYYMMDDHHMM.sql
-rw-r--r--. 1 root root    3439  7월 26 18:57 두번째_데이터베이스_YYYYMMDDHHMM.sql

 

위와 같이 데이터베이스_YYYYMMDDHHMM.sql 파일이 생성된 것을 확인 할 수 있다.

 

 

 

3) Cron을 사용하여 반복 수행 설정

 

먼저 크론 탭 입력창을 오픈한다.

$ sudo crontab -e

 

매일 자정에 데이터베이스 백업 작업을 반복 수행한다.

# 매일 자정에 DataBase 백업 Shell Script 실행
0 0 * * * /bin/bash /home/utility/database_backup_script.sh

 

 

 

 

 

728x90

'LINUX > CentOS' 카테고리의 다른 글

[LINUX] CentOS7 - MediaWiki 설치 및 사용  (0) 2023.08.07
[CentOS7] 사용자 계정 생성 및 Directory 만들기  (0) 2023.07.31
[Linux] CentOS7 - MySQL / MariaDB 데이터 베이스 자동 백업 프로세스  (0) 2023.01.27
[Linux] CentOS7 - HTTPS 접속을 위한 Apache 웹 서버의 Mod_Proxy 설정  (0) 2022.11.15
[Linux] CentOS7 - GIT을 이용한 버전관리 시스템 구축  (0) 2021.07.04
    'LINUX/CentOS' 카테고리의 다른 글
    • [LINUX] CentOS7 - MediaWiki 설치 및 사용
    • [CentOS7] 사용자 계정 생성 및 Directory 만들기
    • [Linux] CentOS7 - MySQL / MariaDB 데이터 베이스 자동 백업 프로세스
    • [Linux] CentOS7 - HTTPS 접속을 위한 Apache 웹 서버의 Mod_Proxy 설정
    사악미소
    사악미소

    티스토리툴바