상세 컨텐츠

본문 제목

4. 서버 환경설정하기 (MySQL 설치)

개발 공부 (시니어코딩)/서비스 서버 구축

by letprogramming 2021. 10. 20. 21:47

본문

반응형

마지막으로 설치할 것은 MySQL이다.

별도의 데이터베이스 서버를 두지 않을 것이기 때문에 서비스 서버에 MySQL도 설치한다.

 

MySQL Server의 rpm 레포지토리 링크를 복사해 dnf install로 설치한다.

 

- 참고

********************************************************************************

레드햇 계열 리눅스, RHEL 7까지는 yum install과 yum localinstall에 차이가 존재했다고 한다.

install은 존재하는 레포지토리에 대한 설치만 지원했기 때문에 로컬 rpm 에 대해서는 localinstall을 이용해서 설치해야 했다.

 

8 버전부터는 dnf install이 localinstall을 대체하기 때문에 install 명령어로 처리가 가능해졌다.

CentOS 7버전 이하일 경우에는 localinstall을 이용해야 한다.

사실 install로 했을 때 안되면 localinstall로 해보면 된다,,

********************************************************************************

반응형

먼저 MySQL Server 다운로드 사이트로 이동하여 본인의 OS와 버전에 맞는 레포지토리를 찾는다.

https://dev.mysql.com/downloads/mysql/

 

MySQL :: Download MySQL Community Server

Select Operating System: Select Operating System… Microsoft Windows Debian Linux Ubuntu Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris macOS Source Code Select OS Version: All Windows (x86

dev.mysql.com

MySQL Server 설치 화면

사진에 있는 MySQL Server Download 버튼을 클릭하면 아래와 같은 화면으로 이동한다.

 

MySQL Server 링크 복사하기

위와 같이 오라클 로그인을 하라는 안내가 뜬다.

아래에 보면 No thanks, just start my download. 라는 버튼이 보인다.

이 버튼에 마우스를 올리고 오른쪽 마우스를 올린 다음 링크 주소 복사를 누른다.

이제 다시 터미널로 돌아가서 방금 복사한 rpm 레포지토리 링크를 dnf install을 이용해 설치한다.

 

dnf install https://dev.mysql.com/~(생략)

yum을 이용할 경우 yum localinstall, 혹시 dnf install이 안될 경우 localinstall 명령어를 이용해보자.

 

-참고

********************************************************************************

MySQL Server 설치 도중에 에러가 발생하면서 설치가 안되는 경우가 있다.

보통 에러가 나는 부분이 다른 MySQL 모듈이 설치가 안되어 있다는 경고가 뜬다.

 

그러한 경우에 없다는 패키지를 설치하면 된다.

https://dev.mysql.com/downloads/repo/yum/

 

MySQL :: Download MySQL Yum Repository

Support EOL for Fedora 32 Per the MySQL Support Lifecycle policy regarding ending support for OS versions that have reached end of life, we plan to discontinue building all MySQL binaries for the Fedora 32 platform as of May 25, 2021. See Fedora 32 End of

dev.mysql.com

여기서 CentOS 버전에 맞는 패키지를 먼저 설치한 후 MySQL Server를 다시 설치하면 아마 정상적으로 설치가 될 것이다.

만약 그럼에도 불구하고 안되는 경우

에러를 읽어보고 설치가 필요하다고 하는 패키지들을 설치하면된다.

꼬리에 꼬리를 물고 계속 설치하라고 하는데, 필요하다는거 계속 설치하다보면 언젠가 Complete! 가 뜬다..

********************************************************************************

 

 MySQL 환경설정

/etc/my.cnf

위 파일이 MySQL의 환경설정을 담당한다.

vi 에디터 등을 이용해 수정해보자.

 

vi /etc/my.cnf

이 파일에 다음의 내용을 추가한다.

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqldump]
default-character-set = utf8mb4

[mysqld]
skip-character-set-client-handshake
init_connect="SET collation_connection = utf8mb4_unicode_ci"
init_connect="SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"

character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

이 내용을 환경 설정에 추가하는 이유는

UTF-8을 MySQL에서 기본으로 편리하게 사용하기 위해서이다.

my.cnf 파일에 미리 설정해두면 이후에 데이터베이스나 테이블에 대한 별도의 지정없이도

UTF-8이 적용된다.

 

-참고

********************************************************************************

MySQL8에서 기본 캐릭터셋이 utf8이 되면서 utf8에 최적화되어 있고, 권장하고 있다.

mb4는 4바이트를 이용한다는 것이다.

4바이트를 이용하는 이유는 이모티콘을 표현하기 위함이다.

이모지를 포함한 거의 모든 언어, 특수문자를 표현할 수 있다.

********************************************************************************

 

my.cnf를 수정했으므로 mysqld (mysql 데몬)을 실행한다.

systemctl start mysqld

다음으로 MySQL의 임시 비밀번호를 알아야 한다.

최초에 MySQL을 설치하면서 임시 비밀번호는 mysql 로그에 저장되어있다.

 

grep 'temporary password' /var/log/mysqld.log

위 명령어를 치면 mysqld.log 파일에 기록되어 있는 로그 중에서

temporary password가 볼드처리 되어 진하게 표시되면서 찾아준다.

 

임시 비밀번호를 따로 복사해놓자.

/usr/bin/mysql_secure_installation

다음으로 위 명령어를 실행하면 mysql 접속을 위한 보안 설정을 할 수 있다.

위 명령어를 실행하면 최초 비밀번호를 입력하라고 한다.

이 때 방금 복사해놓은 temporary password를 입력한다.

 

입력한 이후에 새로운 비밀번호를 설정한다.

새로운 비밀번호를 설정할 때 규칙을 지키지 않아서 에러가 발생할 수 있다.

대/소문자, 숫자, 특수문자를 포함해야 하고 특정 길이(8자)이상이 되어야 한다.

다음 단계에서 4개의 질문을 한다. 수락한다면 y 나 Y, 거절한다면 다른 키를 눌러주면 된다.

1. Remove anonymous users? (테스트용 유저 삭제?)

2. Disallow root login remotely? (원격지에서 루트로 접속 허용?)

3. Remove test database and access to it? (테스트DB 삭제?)

4. Reload privilege tables now? (권한 테이블 갱신?)

 

불필요한 유저나 테이블은 삭제해주는 것이 좋다.

서비스 DB에 원격지에서 루트로 접근하는 것은 원래차단해놓는 것이 맞다고 한다.

권한 테이블은 암호 등을 담아놓는 테이블인데 변경했으니 갱신하는 것이 좋을 것이다.

 

MySQL 접속

MySQL을 설치했으니 이제 제대로 되는지 접속을 해본다.

mysql -u root -p

위 명령어를 통해 mysql에 root 유저로 비밀번호를 입력하여 접속한다.

-u root 는 root라는 유저

-p는 암호를 입력한다는 옵션이다.

 

아까 설정했던 비밀번호를 입력하면 접속할 수 있다.

mysql 접속 성공

위와 같은 화면이 나오면 접속에 성공한 것이다.

****************************************************************************************

AWS 프리 티어를 모두 사용해서 오라클 클라우드를 사용하고 있다. 그래서 앞에 opc 라고 되어 있다

****************************************************************************************

 

이제 MySQL을 이용할 수 있다.

 

show databases;

위 명령어로 전체 데이터베이스 목록을 조회할 수 있다.

CREATE DATABASE testdb;

위 명령어로 'testdb'라는 데이터베이스를 생성한다.

CREATE USER 'test_user'@'%' IDENTIFIED WITH mysql_native_password BY '*********';

GRANT ALL PRIVILEGES ON *.* TO 'test_user'@'%' WITH GRANT OPTION;

test_user 라는 이름의 MySQL 유저를 생성한다. root로 접속하는 것은 보안 상 위험하기 때문이다.

test_user라는 이름의 유저를 생성하고 @ 옆 '%' 는 접속을 허용하는 IP를 의미한다.

%는 전체를 의미하고, 만약 ' ' 안에 192.168.0.1 이런 식으로 IP가 명시되어 있다면 이 test_user는 해당 IP에서만 접근이 가능하다.

 

mysql_native_password BY '*********' 이 부분은 유저의 비밀번호를 설정하는 것이다. ' ' 안에 이 유저의 비밀번호를 적어주면 된다.

 

그 다음 명령어인 GRANT 명령어는 유저에게 권한을 부여하는 명령어이다.

ALL PRIVILEGES * . * 의 의미는 말 그대로 모든 권한이다. * . * 은 데이터베이스와 테이블이다.

앞에 *이 데이터베이스 . 뒤에 *이 테이블이다. 즉 * . *은 모든 데이터베이스의 모든 테이블에 대한 권한이라는 의미이다.

ALL PRIVILEGES는 모든 권한이다. 경우에 따라 권한을 명시할 수 있다. 리눅스의 읽기, 쓰기 권한 등과 비슷한 개념이다.

WITH GRANT OPTION은 의미 그대로 부여할 수 있는 권한이다.

즉, 권한을 부여받는 test_user가 다른 유저에게 자신의 권한을 부여할 수 있는 권한을 주는 것이다.

 

정리하자면,

모든 IP에서 접속하는('%') test_user에 대해서 모든 데이터베이스, 모든 테이블 (* . *)에 대한 모든 권한(ALL PRIVILEGES)을

부여한다(GRANT). test_user는 다른 유저에게 자신의 모든 권한을 부여할 수 있다.(WITH GRANT OPTION)

 

ALTER USER test_user IDENTIFIED WITH mysql_native_password BY '***';

위의 명령어는 유저의 비밀번호를 변경할 때 사용하는 명령어이다.

 

show variables like '%max_connection%';

set global max_connections=100;

max_connection 변수는 데이터베이스에 최대로 접속할 수 있는 connection의 개수를 의미한다.

 

밑에 set 은 connection의 개수를 변경하는 명령어이다.

당연히 max_connection이 크면 클수록 많은 사용자를 허용하므로 원활한 서비스 운영에 좋을 것이다.

 

그러나, 서버가 사용자가 집중되는 부하를 견딜 수 없다면 계속 사용자의 connection을 허용하다가 서버가 터질 수 있다.

서버가 좋다면 max_connection을 늘리고, 좋지 않다면 줄여야 서버를 지킬 수 있다.

반응형

관련글 더보기