본문 바로가기
BackEnd

MySQL 설치방법에 대해서

by SoriKim 2023. 11. 29.
반응형

1. MySQL 설치 방법

▶︎ MacOS 설치 

1)  Homebrew package manager 설치 명령어(아래 사이트에서 자세하게 확인하실 수 있습니다.)

https://brew.sh/ko/

 

Homebrew

The Missing Package Manager for macOS (or Linux).

brew.sh

📌 Homebrew란?

Homebrew는 MacOS 운영체제에서 패키지 관리를 쉽게 할 수 있게 해주는 도구입니다. 

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 

2) Homebrew 설치 후 brew를 사용해 MySQL를 설치합니다. 

brew install mysql

 

3) MySQL 서비스 시작 

MySQL을 설치한 후 다음 명령어로 MySQL Server를 시작할 수 있습니다. 

mysql.server start

# 컴퓨터의 재부팅 여부와 관계없이 상시 mysql server를 실행하기 위해서는 아래 명령어를 사용할 수 있습니다. 
brew services start mysql # 서버 시작
brew services stop mysql  # 서버 종료
Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve securitNy. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:

 

4) 보안 설정

MySQL을 처음 설치하면 보안 설정을 해주어야 합니다. 다음 명령어를 실행해 설정을 시작합니다. 

mysql_secure_installation

명령어를 실행하면 몇 가지 보안 옵션을 설정하라는 안내가 나타납니다. 

  • 비밀번호 복잡도 검사 과정 설정 ( 복잡한 비밀번호 설정을 위한 과정을 거치겠는지 묻는 과정으로 개인이 사용하는 거라면 NO를 선택하시면 됩니다. )
Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve securitNy. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:

 

  • 비밀번호 입력 & 확인 단계 ( root 비밀번호 입력: 이 과정은 루트 비밀번호를 입력하는 과정으로 비밀번호와 비밀번호 확인란을 입력하게 됩니다. )
Please set the password for root here.
New password:
Re-enter new password:
  • 익명 사용자 삭제 ( 익명 사용자를 삭제할 것인지 묻는 것으로 Yes를 입력하면 됩니다. )
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL 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? (Press y|Y for Yes, any other key for No) : y
  • 원격 접속 허용 여부 확인( 원격 접속을 허용할 것인지 묻는 것으로 로컬에서만 개발 예정이라면 Yes를 선택하면 됩니다. )
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? (Press y|Y for Yes, any other key for No) : y
  • testDB 삭제 여부(no 선택) 
By default, MySQL 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? (Press y|Y for Yes, any other key for No) :
  • previlege 테이블을 다시 로드할 것인가? ( 이 메시지는 MySQL 서버가 변경된 권한을 즉시 적용하도록 유도하는 것입니다. 새로운 권한을 추가하거나 변경한 경우, 이를 반영하기 위해 테이블을 다시 로드해야 하므로 변경된 권한을 즉시 적용하려면 Yes  선택 하시면 됩니다. )
Reload previlege tables now? (Press y|Y for Yes, any other key for No) :

 

5) MySQL 접속 

MySQL 서버가 실행 중이면 다음 명령어로 MySQL에 접속할 수 있습니다. 

mysql -u root -p

 

 

▶︎ Linux 설치 (Ubuntu) 

MySQL 8.0 버전을 기준으로 설명 

1) 패키지 업데이트 

sudo apt update

 

2) MySQL 설치 

sudo apt install mysql-server

 

3) MySQL 서비스 시작

MySQL 설치가 완료되면 서비스를 시작합니다. 

sudo systemctl start mysql

 

4) 부팅 시 MySQL 자동 시작 설정(옵션) 
만약 시스템 부팅 시 MySQL을 자동으로 시작하도록 설정하려면 다음 명령어를 사용합니다. 

sudo systemctl enable mysql

 

5) 보안 설정

sudo mysql_secure_installation

이 명령어를 실행하면 몇 가지 보안 옵션을 설정하라는 안내가 나타납니다. 사용자 비밀번호를 설정하고, 익명 사용자를 삭제하고, root 로그인을 비활성화하거나 활성화하는 등의 선택을 할 수 있습니다. 

명령어를 실행하면 몇 가지 보안 옵션을 설정하라는 안내가 나타납니다.

  • 비밀번호 복잡도 검사 과정 설정 ( 복잡한 비밀번호 설정을 위한 과정을 거치겠는지 묻는 과정으로 개인이 사용하는 거라면 NO를 선택하시면 됩니다. )
Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve securitNy. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:

 

  • 비밀번호 입력 & 확인 단계 ( root 비밀번호 입력: 이 과정은 루트 비밀번호를 입력하는 과정으로 비밀번호와 비밀번호 확인란을 입력하게 됩니다. )
Please set the password for root here.
New password:
Re-enter new password:
  • 익명 사용자 삭제 ( 익명 사용자를 삭제할 것인지 묻는 것으로 Yes를 입력하면 됩니다. )
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL 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? (Press y|Y for Yes, any other key for No) : y
  • 원격 접속 허용 여부 확인( 원격 접속을 허용할 것인지 묻는 것으로 로컬에서만 개발 예정이라면 Yes를 선택하면 됩니다. )
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? (Press y|Y for Yes, any other key for No) : y
  • testDB 삭제 여부(no 선택) 
By default, MySQL 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? (Press y|Y for Yes, any other key for No) :
  • previlege 테이블을 다시 로드할 것인가? ( 이 메시지는 MySQL 서버가 변경된 권한을 즉시 적용하도록 유도하는 것입니다. 새로운 권한을 추가하거나 변경한 경우, 이를 반영하기 위해 테이블을 다시 로드해야 하므로 변경된 권한을 즉시 적용하려면 Yes  선택 하시면 됩니다. )
Reload previlege tables now? (Press y|Y for Yes, any other key for No) :

 

 

6) MySQL 접속

MySQL 서버가 실행 중이라면 다음 명령어로 MySQL에 접속할 수 있습니다. 

mysql -u root -p

비밀번호를 요청하면 보안 설정 단계에서 설정한 비밀번호를 입력하세요. 

 

▶︎ MySQL 서버 연결 테스트 

MySQL 서버의 설치와 설정을 완료했습니다. 다음은 시작된 MySQL 서버에 접속하는 방법을 알아보도록 하겠습니다. MySQL 서버에 접속하는 방법은 MySQL 서버 프로그램(mysqld)과 함께 설치한 MySQL 기본 클라이언트 프로그램인 mysql을 실행하면 됩니다. 다음과 같이 여러 가지 형태의 명령행 인자를 추가해 mysql 클라이언트가 서버(mysqld)에 접속을 시도할 수 있습니다. 

 

1) MySQL socket 파일을 이용한 접속 

mysql(클라이언트)로 mysqld(서버)에 접속하는 첫 번째 방법은 소켓 파일(/tmp/mysql.sock)을 이용해 접속하는 방법입니다. 

mysql -u root -p --host=localhost --socket=/tmp/mysql.sock

 

여기서, -u root 옵셥은 root 사용자로 서버 프로그램에 접속한다는 것을 의미합니다. -host=localhost 옵션을 사용해 mysql(클라이언트 프로그램)은 항상 소켓 파일(/tmp/mysql.sock)을 통해 MySQL 서버에 접속하게 되는데, 이는 'Unix domain socket'을 이용하는 방식으로 TCP/IP를 통한 통신이 아닌 유닉스의 프로세스 간 통신(IPC, Inter Process Communication)으로 접속합니다. 

추가로, 아래 명령어와 같이 호스트 주소와 포트를 명시하지 않고도 MySQL socket 파일을 이용해 접속할 수 있습니다. 

mysql -u root -p

 

이 경우 기본(default)으로 호스트는 localhost가 되며 MySQL 서버의 설정 파일(my.cnf)에서 소켓 파일의 위치를 읽어 접속하게 됩니다. 위에서 소개한 두 가지 명령어를 사용해 MySQL 서버에 접속하면 다음과 같이 MySQL 프롬포트가 표시됩니다. 이후 SHOW DATABASES; 명령으로 데이터베이스의 목록을 확인할 수 있습니다. 정상적으로 MySQL 서버에 접속한 경우 아래와 같은 결과가 출력됩니다. 

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 178
Server version: 8.0.23 Homebrew

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| mysql               |
| performance_schema  |
| sys                 |
+---------------------+
4 rows in set (0.01 sec)

 

여기서, mysql.socket이란 Unix Domain Socket"으로 유닉스의 프로세스 간 통신이 가능한 소켓을 말합니다. 

mysql(클라이언트 프로세스)가 mysqld(서버 프로세스)는 서로 다른 프로세스에서 실행되는데, 둘 사이에서 통신할 때 사용됩니다. mysql은 통신에서 TCP/IP 소켓과 Unix Domain Socket 둘 다 사용할 수 있습니다. 

TCP/IP 소켓이 통신을 위해 IP와 PORT를 이용해 접속 하듯이 Unix Domain Socket은 소켓 파일(/tmp/mysql.sock)을 이용해 통신합니다. 

 

2) TCP/IP를 통해 호스트에 접속

두 번째 방법은 TCP/IP를 통해서 127.0.0.1(로컬 호스트)로 접속하는 방법입니다. 이 경우 -port=3306 옵션을 통해 포트를 명시하는 것이 일반적입니다. MySQL 서버 프로그램에 접속할 때는 호스트를 -host=localhost로 명시하는 것과 -host=127.0.0.1로 명시하는 것이 각각 다른 방식으로 동작합니다. 

mysql -u root -p --host=127.0.0.1 --port=3306

즉, 호스트를 127.0.0.1로 명시해 접속하는 경우에는 서버 자신을 가리키는 IP 이기는 하지만 TCP/IP 통신 방식을 사용합니다. 마찬가지로 MySQL 서버에서 접속해서 접속 가능 여부를 확인할 수 있습니다. 

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 178
Server version: 8.0.23 Homebrew

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| mysql               |
| performance_schema  |
| sys                 |
+---------------------+
4 rows in set (0.01 sec)

 

3) Unix Domain Socke과 TCP/IP Socket 접속 방식 차이점

아래는 두 소켓 유형 간의 주요 차이점을 설명한 것입니다. 

 

1. 주소 및 경로:

Unix Domain Sockets: 파일 시스템에서 파일 경로를 통해 접근됩니다. 주소로 파일 경로를 사용하므로 네트워크 계층이 필요하지 않습니다.

TCP/IP Sockets: IP 주소와 포트 번호를 사용하여 네트워크 상에서 통신합니다.

 

2. 보안 및 권한:

Unix Domain Sockets: 파일 시스템의 권한 및 접근 제어가 적용됩니다. 파일의 소유자 및 허가에 따라 접근이 제한됩니다.

TCP/IP Sockets: 네트워크 레벨에서 암호화 및 인증을 구현해야 합니다.

 

3. 퍼포먼스:

Unix Domain Sockets: 로컬 통신이므로 데이터 전송이 TCP/IP Sockets보다 더 효율적입니다. 커널 내부에서 직접 데이터를 전달할 수 있습니다.

TCP/IP Sockets: 네트워크를 통한 통신이므로 데이터 전송에 더 많은 오버헤드가 발생할 수 있습니다.

 

4. 사용 용도:

Unix Domain Sockets: 동일한 시스템 내에서 프로세스 간 통신이 필요한 경우에 주로 사용됩니다.

TCP/IP Sockets: 네트워크를 통해 여러 시스템 간에 통신할 때 사용됩니다.

 

5. 클라이언트/서버 모델:

Unix Domain Sockets: 주로 로컬 시스템에서 동작하는 서버와 클라이언트 간의 통신에 사용됩니다.

TCP/IP Sockets: 네트워크를 통해 서로 다른 시스템 간에 클라이언트와 서버 간 통신에 사용됩니다.

 

6. 멀티플렉싱 및 비동기 통신:

Unix Domain Sockets: Select, Poll, epoll 등을 사용하여 멀티플렉싱 및 비동기 통신을 지원합니다.

TCP/IP Sockets: 네트워크 소켓 통신은 보통 비동기적인 I/O 모델을 사용하며, select, poll, epoll과 같은 시스템 호출을 통해 멀티플렉싱을 지원합니다.

 

이러한 차이점을 고려하여 적절한 상황에서 적절한 소켓 유형을 선택해야 합니다.

 

반응형

댓글