MySQL 데이터베이스 설치 구성 및 아키텍처 심층 분석

데이터베이스 기술 개요

현대 소프트웨어 아키텍처에서 데이터 관리는 핵심 요소입니다. 데이터베이스 시스템은 방대한 양의 정보를 체계적으로 저장하며, 효율적인 조회와 안전한 접근을 보장합니다.

  • 데이터 무결성 확보: 복잡한 애플리케이션에서도 일관된 상태 유지가 가능합니다.
  • 구조화 저장: 정해진 스키마를 통해 검색 속도를 극대화하고 중복 데이터를 최소화합니다.
  • 시스템 통합: 다양한 사용자 권한 설정을 지원하여 보안을 강화합니다.

핵심 용어 정의

  • 데이터(Data): 숫자, 텍스트, 멀티미디어 등 실체를 표현하는 기록 단위로, 논리적 테이블에 저장됩니다.
  • 테이블(Table): 행과 열로 구성된 데이터 저장 단위입니다.
  • DBMS: 데이터를 생성, 수정, 삭제, 조회할 수 있게 하는 중간管理软件입니다.

주류 데이터베이스 유형

초기 계층 모델과 네트워크 모델을 거쳐 관계형 데이터베이스 (RDB) 가 표준으로 자리 잡았습니다. IBM 의 DB2 를 필두로 Oracle 이 시장의 주도권을 장악했으나, 최근에는 Open Source 오픈소스 솔루션인 MySQL 이 저비용 고효율의 대안으로 부각되고 있습니다. 비관계형 (NoSQL) 은 Redis 나 MongoDB 처럼 고부하 트래픽 처리나 유연한 스키마가 필요한 경우에 활용됩니다.

운영체제 환경 세팅

CentOS 기반 리눅스에 서비스를 배포하기 전 필수 보안 정책 조정이 필요합니다.

# 방화벽 서비스 중지
systemctl stop firewalld
systemctl disable firewalld

# SELinux 강제 해제
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config

# 노드 식별자 변경
hostnamectl set-hostname db-primary

MariaDB 가 기존에 로드되어 있는 경우 호스트 충돌을 방지하기 위해 제거 프로세스가 선행되어야 합니다.

# 의존성 확인 및 제거
rpm -qa | grep maria
yum -y remove mariadb*

구축에 필요한 컴파일러 도구 모음을 설치합니다.

yum -y install gcc gcc-c++ ncurses-devel openssl-devel libaio

소스코드 컴파일 방식 구현

최신 기능을 직접 빌드하거나 커스터마이징된 기능이 필요할 때 사용됩니다.

전제 조건

Boost 라이브러리 버전 (1.59 이상) 과 CMake 도구를 먼저 확보해야 합니다. 이를 위한 사전 설치 단계가 수행되어야 오류 발생을 예방할 수 있습니다.

# boost 압축 풀기 및 경로 이동
tar zxf boost_1_59_0.tar.gz
mv boost_1_59_0 /usr/local/boost

# cmake 설치
tar zxf cmake-3.16.2.tar.gz
cd cmake-3.16.2
./configure --prefix=/usr/local/cmake
gmake
gmake install

메인 컴파일 설정

사용자 그룹과 계정을 먼저 생성하여 권한 문제를 해결합니다.

groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql

설치 경로를 지정하는 CMake 플래그를 설정합니다. 문자셋은 UTF-8 로 고정하고 인스턴스 이름을 관리합니다.

# 디렉토리 생성
mkdir /usr/src/mysql-src
cd /usr/src/mysql-src
tar zxf mysql-5.7.28.tar.gz
cd mysql-5.7.28

# 빌드 명령어 실행
cmake \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_BOOST=/usr/local/boost \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DUSER=mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock

make && make install

설정 파일 및 초기화

# my.cnf 생성
cat > /etc/my.cnf << EOF
[mysqld]
port = 3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock
skip-name-resolve
max_connections = 2048
log-error=/var/log/mysqld.log
character-set-server=utf8mb4
EOF

# 데이터 초기화
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

이후 환경 변수 등록과 서비스 등록을 진행합니다.

echo "export PATH=\$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile

cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
systemctl start mysqld

최초 로그인 후 안전장치로서 루트 비밀번호를 재설정합니다.

mysql_secure_installation

バイ너리 배포 방식

컴파일 없이 직접 실행 파일을 사용하므로 시간 절감이 가능합니다.

패키지 준비

# 다운로드된 타르 볼 압축 해제
tar xzf mysql-5.7-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.* /usr/local/mysql

권한 및 디렉토리 설정

chown -R mysql:mysql /usr/local/mysql
mkdir /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql/data

서비스 동작

서비스 파일 생성 시 systemd 의 표준 규격에 맞춰 작성합니다.

# /lib/systemd/system/mysqld.service 정의
[Unit]
Description=MySQL Server
After=network.target

[Service]
Type=forking
PIDFile=/var/run/mysqld/mysqld.pid
ExecStart=/usr/local/mysql/bin/mysqld_safe --user=mysql
ExecStop=/usr/local/mysql/bin/mysqladmin shutdown

[Install]
WantedBy=multi-user.target

daemon_reload 후 서비스 활성화 및 로그 확인을 실시합니다.

systemctl daemon-reload
systemctl enable mysqld
systemctl status mysqld

데이터베이스 접속 테스트는 클라이언트 모듈을 사용하여 수행합니다. 암호는 복잡성을 갖춘 문자열로 변경하는 것이 권장됩니다.

mysql -u root -p
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('SecurePass123!');

자동화 스크립트 개발

반복되는 배포 작업을 단순화하기 위해 셸 스크립트를 활용합니다.

#!/bin/bash
# 환경 점검 및 패키징 스크립트

MGR_VERSION=5.7.28
INSTALL_DIR=/usr/local/mysql

if [ $(id -u) -ne 0 ]; then
    echo "Root user required"
    exit 1
fi

# 의존성 패키지 설치
yum install -y gcc wget vim net-tools

# 계정 생성
id mysql &>/dev/null || useradd -r -s /sbin/nologin mysql

# 압축 파일 추출
tar xf mysql-${MGR_VERSION}-linux-glibc2.12-x86_64.tar.gz
mv mysql-${MGR_VERSION}*.linux-glibc2.12-x86_64 ${INSTALL_DIR}

# 데이터 디렉토리 생성
mkdir -p ${INSTALL_DIR}/data
chown -R mysql:mysql ${INSTALL_DIR}

# 초기화 및 시작
${INSTALL_DIR}/bin/mysqld --initialize --user=mysql
systemctl start mysqld

태그: MySQL CentOS7 ShellScript systemd LinuxServer

9월 1일 18:08에 게시됨