Maria DB 소스 컴파일 설치(CentOS 7)

이정빈·2022년 12월 7일
0

Mariadb CentOS7 소스 설치

필수 라이브러리 및 도구 설치

# yum install gcc gcc-c++ libtermcap-devel gdbm-devel zlib* libxml* freetype* libpng* libjpeg* iconv flex gmp ncurses-devel libaio perl -y

cmake 설치 필요(3.25버전 이상)

CMake란 여러 환경(window , linux 등)에 맞는 build process를 작성한 것으로, CMakeLists.txt에 기술된 내용을 바탕으로 각 확경에 맞는 Makefile을 생성해 주는 빌드 프로그램이다.

CMake를 통해 Makefile을 만들게 되면, 추가적인 파일이 추가되지 않는 한 Makefile을 수정하지 않고, 자동으로 생성해준다는 장점이 있지만, 단순히 Makefile을 생성해 주는 것이기 때문에 Make를 추가로 해야한다.

MariaDB 계정 및 그룹 생성

groupadd -g mysql
useradd -G mysql

MariaDB 공식홈페이지에 들어가 원하는 버전의 source 파일 다운하여 리눅스로 옮겨준다.(https://mariadb.org/download/?t=mariadb&p=mariadb&r=10.10.2&os=windows&cpu=x86_64&pkg=msi&m=blendbyte)

다운받은 파일 압축해제 및 디렉토리 지정

# tar xvfz mariadb-10.5.9.tar.gz
# cd mariadb-10.5.9
# mkdir /'원하는 디렉토리'/mariadb-10.5.9/build
# cd /'원하는 디렉토리'/mariadb-10.5.9/build

cmake를 사용하여 컴파일

cmake ../ \

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
= mysql을 설치할 기본 경로 지정
-DMYSQL_DATADIR=/usr/local/mysql/data \
= MySQL 데이터 디렉토리 위치 지정
-DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/socket/mysql.socket \
= 기본은 /tmp/mysql.sock 이며, Unix socket 파일 경로는 서버에 소켓 연결할 때 지정된다.
-DINSTALL_SYSCONFDIR=/etc \
= my.cnf 옵션 파일 디렉토리 위치 지정
-DINSTALL_SYSCONF2DIR=/etc/my.cnf.d \
= my.cnf 옵션 파일 디렉토리 위치 지정
-DMYSQL_TCP_PORT=3306 \
= TCP/IP 연결시 사용하는 포트 번호 지정. 기본 3306.
-DDEFAULT_CHARSET=utf8 \
= 언어셋을 utf8로 지정
-DDEFAULT_COLLATION=utf8_general_ci \
= 콜레이션을 utf8_general_ci 로 설정.
-DWITH_EXTRA_CHARSETS=all \
= all이 기본이며, 모든 문자열 셋을 포함한다는 의미
-DENABLED_LOCAL_INFILE=1 \
= MySQL 문법 중에 load data infile이라는 것이 있다. txt 파일 등을 mysql data로 가져오는 문법이라 편리하지만 보안상의 문제가 동시에 발생하기 때문에 1로 지정해준다.

서버에서 스토리지 엔진을 정적으로 컴파일한다면, 아래와 같은 설정들을 할 수 있다.
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARIA_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATEDX_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DWITH_ZLIB=system \
 system으로 할 경우에 시스템에 설치된 Library를 이용
-DWITH_READLINE=1 \
readline 지원여부
-DWITH_SSL=system \
MySQL은 SSL 라이브러리를 무조건 사용해야하는데, 특정 옵션(yes, bundled, system)을 정하여 사용한다. MySQL5.7 에서는 bundled가 기본.

완료 후 
make && make install

소스 컴파일

MariaDB 초기 데이터 생성 및 권한 설정

cp -arpf /'압축해제한 디렉토리'/mariadb-10.5.9/build/scripts/mysql_install_db /'설치 디렉토리'/mysql/scripts/mysql_install_db

cd /'설치 디렉토리'/mysql

rm -rf /'설치 디렉토리'/mysql/data

perl /'설치 디렉토리'/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

mkdir -p /'설치 디렉토리'/mysql/lnnoDB/redoLogs

mkdir -p /'설치 디렉토리'/mysql/lnnoDB/undoLogs

chown -R mysql /'설치 디렉토리'/mysql/data

chgrp -R mysql /'설치 디렉토리'/mysql

mkdir /'설치 디렉토리'/mysql/logs

mkdir /'설치 디렉토리'/mysql/tmp

chown mysql:mysql /'설치 디렉토리'/mysql/tmp

chown mysql:mysql /'설치 디렉토리'/mysql/logs

chown -R mysql:mysql /'설치 디렉토리'/mysql/data

MariaDB 설정파일 생성

[client]

#password = your_password

port = 3306
socket = /mariadb/mysql/tmp/socket/mysql.socket


[mysqld]

bind-address=0.0.0.0
port = 3306
socket = /mariadb/mysql/tmp/socket/mysql.socket
skip-external-locking
key_buffer_size = 384M
max_allowed_packet = 1M
table_open_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
thread_concurrency = 8
log-bin=mysql-bin
server-id = 1

[mysqldump]

quick
max_allowed_packet = 16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]

interactive-timeout

MariaDB 서비스 데몬 생성

vi /usr/lib/systemd/system/mysqld.service

[Unit]
Description=MariaDB Database Server
After=syslog.target
After=network.target

[Service]
KillMode=process
KillSignal=SIGTERM
SendSIGKILL=no

User=mysql
Group=mysql

LimitNOFILE=infinity
LimitNPROC=4096
LimitCORE=infinity
PermissionsStartOnly=true
PrivateTmp=true
OOMScoreAdjust=-1000
ExecStart=/mariadb/mysql/bin/mysqld --defaults-file=/etc/my.cnf --plugin-dir=/mariadb/mysql/lib/plugin
Restart=always
RestartSec=1
TimeoutSec=300

MariaDB 환경변수 경로

/etc/profile로 전역변수 설정 혹은 각 user의 home/.bash_profile 파일 내에 PATH경로 입력
:/'mariadb 설치경로'/mysql/bin:
source '파일'

MariaDB 시작

systemctl start mysqld.service
systemctl status mysqld.service
systemctl enable mysqld.service -> 재시작시 서비스가 자동 시행되도록 서비스 등록

MariaDB root 비밀번호 설정(MariaDB 서버에 접속하여 변경)

mysql -u root

myslq>use mysql;

myslq>alter user ‘root’@’localhost’ identified by ‘password’;

myslq>select user,host,password from mysql.user;

mysql>flush privileges;

mysql>quit

mysql -u root -p

MariaDB 명령어

1. MySQL 명령어
[](대괄호)는 명령어와 식별자들을 구분하고자 사용한 기호이며 없애거나 ‘(작은 따움표) 로 대체하여 사용해도 된다.
MySQL 문법의 마지막에는 꼭 ;(세미콜론)을 사용해야한다.
1.1 기본 명령어
DB 접속
mysql -u [계정ID] -p;
mysql -u [계정ID] -p [DB 이름];
mysql -u [계정ID] -p [계정PW];
mysql -u [계정ID] -p [계정PW] [DB 이름];

로그아웃
exit;
quit;

기본 정보 확인
status;

에러, 경고 메세지 재확인
show errors;
show warnings;

1.2 DB 생성, 보기, 삭제 관련
DB 생성
create database [DB 이름];

DB 목록 확인
show databases;

사용중인 DB 출력
select database();

DB 선택하기
use [DB 이름];

DB 삭제
drop database [DB 이름];

1.3 테이블 생성, 보기, 삭제 관련
테이블 생성
create table [테이블 이름]([열 이름] INT(5), [열 이름] VARCHAR(10), 데이터 타입 참조하기);
create table [테이블 이름](colmun_name1 INT(5), colmun_name2  VARCHAR(10));


CREATE TABLE userTBL	-- userTBL 테이블 생성
( userID  char(8) NOT NULL PRIMARY KEY,	-- 기본키
   name    varchar(10) NOT NULL, 
   birthYear   int NOT NULL,  
   addr	  char(2) NOT NULL,
   mobile1	char(3) NULL, 	-- 널값 허용
   mobile2   char(8) NULL, 	-- 널값 허용
   height    smallint NULL,	-- 널값 허용
   mDate    date NULL 	-- 널값 허용
);





테이블 목록 확인
show tables;

테이블 구조 확인
explain [테이블 이름];
describe [테이블 이름];
desc [테이블 이름];
show index from [테이블 이름];

테이블 이름 변경
rename table [테이블 이름] to [변경할 테이블 이름];

테이블 삭제
drop table [테이블 이름];

1.4 테이블 데이터 관리
데이터 입력
insert into [테이블 이름] values(값1, 값2, ...);
insert into [테이블 이름](colmun_name1, colmun_name2, ...) values(값1, 값2, ...);

데이터 수정
update [테이블 이름] set [열 이름2]='값2' where [열 이름1]='값1';
* [테이블 이름]의 [열 이름1] 값이 ‘값1’ 인 데이터의 [열 이름2] 값을 ‘값2’로 수정
* where 조건식이 없으면 해당 열에 모든 값이 바뀜

데이터 삭제
delete from [테이블 이름];
* 데이터 전체 삭제
delete from [테이블 이름] where [조건 열]='조건 데이터 값';
* 조건에 맞는 데이터 삭제

데이터 검색
select * from [테이블 이름];
select [필드 이름1, 필드 이름2] from 테이블명;

데이터 검색 조건
select * from 테이블명 where 조건;
select * from [테이블 이름] where [필드 이름] = '10';
* [필드 이름] 값이 10 인 데이터 검색
select * from [테이블 이름] where [필드 이름] <'10'
* [필드 이름] 값이 10 이상인 데이터 검색
select * from [테이블 이름] where [필드 이름] >'10' and [필드 이름2] <'20';
* [필드 이름] 값이 10 이상, [필드 이름2] 값이 20 이하인 데이터 검색
select * from [테이블 이름] where [필드 이름] = '10' and [필드 이름2] = 'Bug' and [필드 이름2] = 'Wahle';
select * from [테이블 이름] where [필드 이름] like 'A%';
* A 로 시작하는 데이터 검색
select * from [테이블 이름] where [필드 이름] like '%A';
* A 로 끝나는 데이터 검색
select * from [테이블 이름] where [필드 이름] like '%A%';
* A 를 포함하는 데이터 검색

데이터 정렬
select * from [테이블 이름] order by [필드 이름]
* 필드 이름 기준 오름차순 정렬
select * from [테이블 이름] order by [필드 이름] desc
* 필드 이름 기준 내림차순 정렬

일정 데이터만 출력하기
select * from [테이블 이름] [필드 이름] asc limit [시작 번호], [검색할 데이터 개수];

1.5 유저 관련 명령어
유저 리스트 출력
select user, host from mysql.user;

유저 추가
create user '유저ID'@'localhost' identified by '유저암호';

유저 권한 부여
grant all on *.* to '유저ID'@'localhost';
grant all on [DB이름].* to '유저ID'@'localhost';
grant all on [DB이름].* to '유저ID'@'%'; // 외부 호스트

유저 삭제
delete from user where user = '유저ID';
flush privileges;

MySQL 호스트 IP 주소 찾기
show variables where Variable_name = '호스트이름';
profile
WAS Engineer, Cloud Engineer(지망)

0개의 댓글