MariaDB 10.5.8 컴파일 설치
MariaDB 10.5.8 컴파일 설치를 해보도록 한다. 컴파일 설치를 위한 환경은 다음과 같다.
- CentOS 8(x86_64) Latest version
- 최소 설치(Minimal Installation) 환경
CentOS 8 에 최소 설치 환경이 매우 중요 하다. 최소 설치 환경이 아니라면 이 문서 내용 그대로 할 수는 없을 수도 있다.
컴파일 환경 구축
CentOS 8 을 최소설치하게 되면 패키지 저장소 또한 최소한으로 활성화가 된다. CentOS 8 은 패키지를 위한 저장소를 많이 분할해 놨는데 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
]# ls -lh /etc/yum.repos.d/ total 48K -rw-r--r--. 1 root root 719 Nov 10 09:32 CentOS-Linux-AppStream.repo -rw-r--r--. 1 root root 704 Nov 10 09:32 CentOS-Linux-BaseOS.repo -rw-r--r--. 1 root root 1.2K Nov 10 09:32 CentOS-Linux-ContinuousRelease.repo -rw-r--r--. 1 root root 318 Nov 10 09:32 CentOS-Linux-Debuginfo.repo -rw-r--r--. 1 root root 731 Jan 24 20:47 CentOS-Linux-Devel.repo -rw-r--r--. 1 root root 704 Nov 10 09:32 CentOS-Linux-Extras.repo -rw-r--r--. 1 root root 719 Nov 10 09:32 CentOS-Linux-FastTrack.repo -rw-r--r--. 1 root root 740 Nov 10 09:32 CentOS-Linux-HighAvailability.repo -rw-r--r--. 1 root root 693 Nov 10 09:32 CentOS-Linux-Media.repo -rw-r--r--. 1 root root 706 Nov 10 09:32 CentOS-Linux-Plus.repo -rw-r--r--. 1 root root 723 Jan 24 20:48 CentOS-Linux-PowerTools.repo -rw-r--r--. 1 root root 898 Nov 10 09:32 CentOS-Linux-Sources.repo |
최소설치한 후 활성화된 저장소는 다음과 같다.
1 2 3 4 5 |
]# dnf repolist repo id repo name appstream CentOS Linux 8 - AppStream baseos CentOS Linux 8 - BaseOS extras CentOS Linux 8 - Extras |
RedHat 배포판의 경우 프로그래밍 라이브러리들은 devel 패키지로 불린다. 이런 devel 패키지는 powertools 저장소에 존재한다. 따라서 이 저장소를 다음과 같이 활성화 시켜준다.
1 |
]# dnf config-manager --set-enabled powertools |
이제 컴파일을 위한 컴파일러와 라이브러리를 다음과 같이 설치 한다.
1 2 |
]# dnf clean all ]# dnf install gcc.x86_64 gcc-c++.x86_64 wget.x86_64 bzip2-devel.x86_64 pkgconf-pkg-config.x86_64 openssl-devel.x86_64 make.x86_64 man-db.x86_64 nasm.x86_64 readline-devel.x86_64 ncurses-devel.x86_64 automake* autoconf* pcre-devel.x86_64 cmake.x86_64 libaio-devel.x86_64 libevent-devel.x86_64 bison.x86_64 bison-devel.x86_64 numactl-devel.x86_64 cracklib-devel.x86_64 pam-devel.x86_64 systemd-devel.x86_64 |
설치 작업시에 필요한 유틸리티 프로그램도 함께 설치해 준다.
1 |
]# dnf install tar vim-enhanced |
Configure, Make, Install
컴파일을 위해 Configure 를 해준다. Configure 를 하기전에 소스 압축을 해제한 디렉토리에 build_target 디렉토리를 만들고 그 안에 다음의 내용을 기반으로 하는 build.sh 스크립트 파일을 작성해 준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
]# tar xvzf mariadb-10.5.8.tar.gz ]# cd mariadb-10.5.8 ]# mkdir build_target ]# cd build_target ]# vim build.sh export CFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fPIC -fno-delete-null-pointer-checks' export CXXFLAGS='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fPIC -fno-delete-null-pointer-checks' export LDFLAGS=' -pie -Wl,-z,relro,-z,now' cmake .. \ -DCMAKE_INSTALL_PREFIX=/opt/mariadb-10.5.8 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DMYSQL_DATADIR=/opt/mariadb-10.5.8/data \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_FEDERATEDX_STORAGE_ENGINE=1 \ -DWITH_ARIA_STORAGE_ENGINE=1 \ -DWITH_XTRADB_STORAGE_ENGINE=1 \ -DWITH_QUERY_CACHE_INFO=ON \ -DWITH_QUERY_RESPONSE_TIME=ON \ -DWITH_SAFEMALLOC=AUTO \ -OPENSSL_ROOT_DIR=/usr \ -OPENSSL_INCLUDE_DIR=/usr/include \ -OPENSSL_LIBRARIES=/usr/lib \ -DWITH_LOCALES=ON \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_READLINE=1 \ -DWITH_SYSTEMD=yes \ -DWITH_SSL=system \ -DWITH_ZLIB=system |
build.sh 파일을 작성한 후에 다음과 같이 실행 퍼미션을 주고 실행해 준다.
1 2 3 4 5 6 |
]# chmod +x build.sh ]# ./build.sh -- Found BISON: /usr/bin/bison (found suitable version "3.0.4", minimum required is "2.0") -- Configuring done -- Generating done -- Build files have been written to: /root/mariadb-10.5.8/build_target |
아무런 오류 없이 실행이 됐다면 컴파일과 설치를 해준다.
1 2 |
]# make ]# make install |
이상 없이 컴파일과 정상적으로 설치가 되었다면 설치후 작업을 진행한다.
설치 후 작업
Mariadb 는 정상적으로 작동하기 위해서는 시스템 계정이 반드시 필요하다. 다음과 같이 시스템 계정을 생성해 준다.
1 2 |
]# /usr/sbin/groupadd -g 27 -o -r mariadb ]# useradd -M -g mariadb -o -r -d /opt/mariadb/logs -s /bin/false -c "MariaDB Server" -u 27 mariadb |
계정 생성이 되었다면 이제 데이터베이스가 사용할 데이터 디렉토리를 생성해 준다.
1 2 3 4 5 6 7 8 9 10 11 |
]# mkdir /opt/mariadb/run ]# mkdir -p /opt/dbstorage/tmp ]# mkdir -p /opt/dbstorage/maria ]# mkdir -p /opt/dbstorage/logs ]# mkdir -p /opt/dbstorage/InnoDB ]# mkdir -p /opt/dbstorage/InnoDB/redoLogs ]# mkdir -p /opt/dbstorage/InnoDB/undoLogs ]# chown -R mariadb: /opt/dbstorage ]# cd /opt/mariadb ]# chown -R root:mariadb . ]# chown -R mariadb:mariadb run |
MariaDB 의 라이브러리를 인식시켜준다.
1 2 |
]# echo "/opt/mariadb/lib" > /etc/ld.so.conf.d/mariadb10.conf ]# ldconfig |
이제 간단하게 데이터베이스를 초기화 해야 하는데, 그러기 위해서 my.cnf 파일을 다음과 같이 생성.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# vim /etc/my.cnf [mariadbd] server_id = 1 user = mariadb character_set_server = utf8 collation_server = utf8_general_ci default_time_zone='+9:00' port = 3306 basedir = /opt/mariadb # 이 디렉토리의 소유권과 그룹은 user 에서 지정한 사용자와 그룹이어야 한다. datadir = /opt/dbstorage/maria # 이 디렉토리는 Mysql 서버가 내부적 작업을 할때 임시로 사용하게 된다. # 예를들어 대량의 select 처리를 위해서 임시 테이블을 만들거나 할 경우에 여기에 임시로 파일이 생성될 수 있다. tmpdir = /opt/dbstorage/tmp socket = /opt/mariadb/run/mariadb.sock pid-file = /opt/mariadb/run/mariadb.pid log_error = /opt/dbstorage/logs/mariadb_error.log general_log_file = /opt/dbstorage/logs/general_query_all.log slow_query_log_file = /opt/dbstorage/logs/slow_query.log innodb_data_home_dir = /opt/dbstorage/InnoDB innodb_log_group_home_dir = /opt/dbstorage/InnoDB/redoLogs innodb_undo_directory = /opt/dbstorage/InnoDB/undoLogs [client] socket = /opt/mariadb/run/mariadb.sock ]# chown root:mariadb /etc/my.cnf |
이제 시스템 데이터베이스를 생성해준다.
1 2 |
]# cd /opt/mariadb ]# ./scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mariadb |
galera_recovery 파일 수정
galera_recovery 라는 명령어가 있다. 이 파일을 쉘 스크립트 파일인데, mariadb.service 파일에도 이 명령어가 사용되고 있다. 그런데, 이 파일에는 사용지로 mysql 로 하드코딩되어 있어서 오류를 낸다. 바꿔준다.
1 2 |
- user=mysql + user=mariadb |
systemd 등록
Mariadb 에서는 systemd 등록을 위한 서비스 유닛 파일을 제공한다. 이 파일은 설치 디렉토리에 support-files/systemd 에 mariadb.service 파일로 존재한다. 이 파일을 열어서 mariadb 실행 계정과 그룹을 다음과 같이 바꿔 준다.
1 2 3 4 5 |
]# vim /opt/mariadb/support-files/systemd/mariadb.service - User=mysql + User=mariadb - Group=mysql + Group=mariadb |
systemd 를 사용할 경우에 Max file open 갯수를 mariadb.service 에서 바꿔줄 수 있다. 물론 /etc/security/limits.conf 파일을 수정해야하는 경우도 있다.
1 2 3 |
]# vim /etc/systemd/system/mariadb.service # Number of files limit. previously [mysqld_safe] open-files-limit LimitNOFILE=65535 |
이제 systemd 에 등록하고 활성화 해준다.
1 2 |
]# cp /opt/mariadb/support-files/systemd/mariadb.service /etc/systemd/system/ ]# systemctl enable mariadb.service |
Mariadb 시작/중지
이제 제대로 설치가 되었는지 Mariadb 를 시작/중지 해보자.
1 2 |
]# systemctl start mariadb.service ]# systemctl stop mariadb.service |
아무런 에러가 없다면 정상적으로 작동하는 것이다.