linux
-
[AWS] EC2 인스턴스에 MySQL 및 redis 설치2023.04.16
-
[Mac OS] permission denied 에러2022.11.16
[AWS] EC2 인스턴스에 MySQL 및 redis 설치
본문에서 사용된 인스턴스는 프리티어이며 Ubuntu Server 20.04 LTS를 사용하고 있습니다.
MySQL 설치
1. 패키지 업데이트
sudo apt update
2. MySQL 설치
sudo apt install mysql-server
3. MySQL Secure 초기화
sudo mysql_secure_installation
이후 Yes | No는 본인의 선택에 따라 하면 된다.
나는 처음 강력함 암호키 사용을 제외하고 모두 Yes를 선택했다.
비밀번호는 영문 대문자 + 영문 소문자 + 숫자 + 특수문자를 포함하여 8자리 이상으로 설정한다.
+ 비밀번호 변경하는 방법
-- MySQL 5.7 이전
UPDATE USER SET password=password('비밀번호') WHERE USER = '계정';
-- MySQL 5.7 이후
ALTER USER '계정'@'localhost' IDENTIFIED WITH mysql_native_password BY '비밀번호';
-- 변경사항 적용
FLUSH PRIVILEGES;
4. 외부 접속 허용을 위한 mysqld.cnf 수정
- root 계정으로 전환
sudo -i
혹은
sudo su
root 계정을 탈출할 때는 exit를 입력하면 된다.
- 디렉토리 이동
cd /etc/mysql/mysql.conf.d
- Vi 에디터로 파일 실행
vi mysqld.cnf
- bind-address를 찾아서 0.0.0.0으로 변경 혹은 bind-address, mysqlx-bind-address 주석 처리
vi 에디터 사용법
/ 를 누르고 하단에 검색할 내용을 입력한 뒤 엔터를 누른다.
n 을 누르면 해당 단어가 포함된 내용을 순차적으로 검색한다.
i 를 누르면 insert 모드로 변경되어 수정할 수 있다.
esc 혹은 ctrl+c 를 통해 해당 모드를 빠져나올 수 있다.
:wq 를 입력하여 vi 에디터를 종료할 수 있다.
5. MySQL 서버 재시작
sudo systemctl restart mysql
혹은
sudo service mysql restart
(Option) MySQL 워크벤치 사용을 위한 사용자 계정 생성
- 먼저 MySQL 서버로 접속을 한다.
mysql -uroot -p
- 외부 접근을 위한 계정 생성
CREATE USER '계정'@'%' identified by '비밀번호';
@'%' : 어떤 클라이언트에서든 접근 가능하다.
@'localhost' : 해당 컴퓨터에서만 접근 가능하다.
- 데이터베이스에 권한 추가
GRANT ALL ON DB명.* TO '계정'@'%' WITH GRANT OPTION;
-- 아래와 같이 모든 DB에 대한 권한을 줄 수도 있다.
GRANT ALL ON *.* TO '계정'@'%' WITH GRANT OPTION;
-- 변경사항 적용
FLUSH PRIVILEGES;
+ root 계정을 외부 접근이 가능하도록 설정하는 방법
UPDATE USER SET Host='%' WHERE User='root';
redis 설치
1. 패키지 업데이트
sudo apt update
2. redis 설치
sudo apt install redis-server
3. 외부 접속 허용 및 Redis 설정을 위한 redis.conf 수정
- root 계정으로 전환
sudo -i
혹은
sudo su
- 디렉토리 이동
cd /etc/redis
- Vi 에디터로 파일 실행
vi redis.conf
vi 에디터 사용법
/ 를 누르고 하단에 검색할 내용을 입력한 뒤 엔터를 누른다.
n 을 누르면 해당 단어가 포함된 내용을 순차적으로 검색한다.
i 를 누르면 insert 모드로 변경되어 수정할 수 있다.
esc 혹은 ctrl+c 를 통해 해당 모드를 빠져나올 수 있다.
:wq 를 입력하여 vi 에디터를 종료할 수 있다.
1. 외부 접속 허용
- bind를 찾는다.
- bind 127.0.0.1 ::1 부분을 bind 0.0.0.0 으로 변경한다.
2. 비밀번호 변경 (Option)
- requirepass를 찾는다.
- requirepass foobared 부분의 주석을 해제하고 foobared 자리에 원하는 비밀번호를 입력한다.
3. Max 메모리 설정
- maxmemory를 찾는다.
- maxmemory <bytes> 부분의 주석을 해제하고 <bytes> 자리에 max 메모리 값을 입력한다.
byte 단위의 숫자로 입력해도 되고,
500mb, 1gb 등 단위를 포함하여 원하는 메모리 값을 설정할 수 있다. (개인의 인스턴스 성능에 따라)
💡 참고 : 프리티어 인스턴스는 1GB 메모리를 가지고 있어 500mb 정도만 설정하는 것을 추천
4. 데이터 교체 알고리즘 설정
- policy를 찾는다.
- maxmemory-policy noeviction 부분의 주석을 해제하고 noeviction 자리에 원하는 데이터 교체 알고리즘을 입력한다.
데이터 교체 알고리즘은 redis 문서의 Eviction Policy에서 확인 가능하다.
나는 사용된 지 가장 오래된 데이터를 삭제하는 allkeys-lru 알고리즘을 선택했다.
5. redis 서버 재시작
sudo systemctl start redis-server
6. EC2 포트 개방
- 인스턴스 상세 설정에서 [보안] > 보안 그룹을 클릭
- [인바운드 규칙 편집] 클릭
- 아래와 같이 규칙 설정 후 저장
참고 자료
[Mac OS] permission denied 에러
permission dinied
Gradle task를 터미널에서 실행하기 위해 프로젝트 경로에서 아래 명령을 실행했더니
./gradlew build
아래와 같은 에러가 발생했다.
zsh: permission denied: ./gradlew
단순히 해당 파일에 대한 권한이 부여되지 않아 생기는 문제이며,
아래 명령을 실행하여 리스트를 출력하면 권한(Permission)을 확인할 수 있다.
ls -al
왼쪽부터 파일 종류 및 권한 / 링크 수 / 사용자 이름 / 그룹 / 파일 크기 / 수정된 시간 / 파일 이름을 나타내며,
이 중 파일 종류 및 권한은 4부분으로 나눌 수 있다.
d / rwx / r-x / r-x : 파일, 디렉토리 구분 / 사용자(user) 권한 / 그룹(group) 권한 / 다른 사용자(other) 권한
d, - : 디렉토리(d), 파일(-)을 구분
r : 읽기(read) 권한
w : 쓰기(write) 권한
x : 실행(execute) 권한
위의 사진에서 gradlew 파일의 권한은 -rw-r--r-- 이므로 실행 권한이 없어서 permission denied 에러가 발생한 것이다.
간단하게 해당 파일의 권한을 변경해주면 해당 파일을 실행할 수 있다.
chmod u+rwx gradlew
chmod 명령어
chmod (u g o)+(r w x) 파일명
ex) 그룹(g)과 다른 사용자(o)에게 읽기(r) 권한을 부여한다.
chmod go+r test.txt
chmod 000 파일명
r은 4, w는 2, x는 1로 계산하며, 각 자리수는 사용자, 그룹, 다른 사용자를 뜻한다.
ex) 사용자에게는 모든 권한을 부여하며, 그룹과 다른 사용자에게는 읽기 권한만 부여한다.
chmod 744 test.txt