#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 접속
#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 디렉토리에 저장한다.
이후 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
'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 |