[AWS] EC2에 MySQL 서버 구축하기

Moonlog·2020년 12월 22일
4

AWS

목록 보기
3/3
post-thumbnail

전 단계에서 ssh -i path/to/pem ubuntu@[public IP Address] 명령을 사용해서 인스턴스에 접속까지 해 보았다. 접속이 성공적으로 완료되면 아래와 같이 내 인스턴스의 정보들이 나온다.

그리고 접속 후, 먼저 로컬에서 EC2인스턴스에 접속 후 apt-get update를 실행 해 준다.

그 후, apt-get install mysql-server 명령으로 mysql-server를 다운 받는다.
성공적으로 다운 받았다면, mysql --version을 실행 했을 때 mysql의 현재 버전이 나타난다.
mysql -u root -p mysql에 접속한다. 초기에는 비밀번호가 설정돼있지 않아서 엔터를 한번 더 치면 접속이 가능하다.
이렇게 mysql> 커서가 보이면 성공적으로 mysql에 접속된 것이다.
그리고 우선 root 비밀번호가 없기 때문에 비밀번호를 먼저 설정해 준다.

  1. 비밀번호를 바꾸기 위해서 mysql 데이터베이스 사용
  2. 현재 암호 확인
// mysql 5.x 는 "password" 또는 "authentication_string"으로 확인.
mysql> select Host, User, Password from user;
mysql> select Host, User, authentication_string from user;

// mysql 8.x
mysql> select Host, User, authentication_string from user;
  1. 비밀번호 변경
    root계정의 비밀번호를 1234로 변경
// mysql 5.x
mysql> update user set password=password('1234') where user='root';
mysql> update user set authentication_string=password('1234') where user='root';

// mysql 8.x
mysql> alter user 'root'@'localhost' identified with mysql_native_password by '1234';
  1. 적용 후 종료
    변경사항을 적용하기 위해 아래 명령어를 실행한 후 종료하면 비밀번호 변경이 완료됩니다.
mysql> FLUSH PRIVILEGES;
mysql> exit
Bye

비밀번호를 설정 안하고, aws접속을 끊고 다시 접속 했을 때, mysql을 접속하지 못하는 상황이 발생했다.
이유는 자세히 찾지 못했는데, 비밀번호 없이 접속해서 초기화 하는 방법이 있었지만 내 경우는 잘 되지않아 mysql을 완전히 밀어버리고 다시 다운받아서 설정해줬다.

그리고 외부접속 허용을 위해 mysqld.cnf파일을 일부 수정해준다.

  1. sudo su 명령어로 root 권한을 부여한다.

  2. cd /etc/mysql/mysql.conf.d 명령으로 mysqld.cnf파일이 있는 디렉토리로 이동.

  3. vi mysqld.cnf vi 에디터로 mysqld.cnf 파일을 실행.

  4. bind-address를 찾아서 0.0.0.0으로 변경.

    # vi 에디터 수정 하는 방법 #
    	i 키 누르면 수정
    	ctrl + c 로 명령행
    	:wq로 저장후 vi 종료
  5. service mysql restart명령으로 mysql서버 재시작.

  6. 외부 접속을 위해 user를 만들고, 권한 부여.
    mysql> create user 'username'@'%' identified by 'password';
    mysql> grant all privileges on *.* to username@'%';
    (user를 생성하지 않고 root계정을 원격에서 사용하려면,
    mysql> update user set Host='%' where User='root';로 host를 변경.)

  7. 접속 확인.

    • MySQL Workbench로 접속 하기.
      - Hostname에 aws 인스턴스 ipv4 주소를 입력.
      - Store in Keychain ... 버튼을 눌러 비밀번호 입력.
      - Test Connection 버튼을 눌러 원격 접속이 되는지 확인.

    • 터미널에서 접속 하기.
      mysql -h [ec2_ip_address] -P 3306 -u [user] -p


고생했던 부분

  • mysql을 깔고 처음 루트계정으로 접속한 뒤 비밀번호를 바꿔주지않고 접속종료를 해서 root 계정 로그인이 되지않았던 부분. (제대로 알아내지 못함.)

  • mysqld.cnf 파일 설정을 해주고 service restart 해주지 않아, 왜 안되는지 헤맸던 부분.

  • 새로운 계정을 만들고, 권한을 주려고 했는데 무엇하나 되지 않았던 부분.
    (use user를 하지 않았었다...)

  • root 계정으로 원격접속을 시도 했을 때, Access denied for user오류가 떴던 부분. (root 는 localhost에서만 접근이 가능했기에 옵션 바꿔주고 해결.)


apt-get(Advanced Packaging Tool)은 우분투(Ubuntu)를 포함안 데비안(Debian)계열의 리눅스에서 쓰이는 팩키지 관리 명령어 도구입니다.

패키지 인덱스 인덱스 정보를 업데이트 : apt-get은 인덱스를 가지고 있는데 이 인덱스는 /etc/apt/sources.list에 있습니다. 이곳에 저장된 저장소에서 사용할 패키지의 정보를 얻습니다.
sudo apt-get update

설치된 패키지 업그래이드 : 설치되어 있는 패키지를 모두 새버전으로 업그래이드 합니다.
sudo apt-get upgrade
의존성검사하며 설치하기
sudo apt-get dist-upgrade

패키지 설치
sudo apt-get install 패키지이름

패키지 재설치
apt-get --reinstall install 패키지이름

패키지 삭제 : 설정파일은 지우지 않음
sudo apt-get remove 패키지이름
설정파일까지 모두 지움
sudo apt-get --purge remove 패키지이름

패키지 소스코드 다운로드
sudo apt-get source 패키지이름
위에서 받은 소스코드를 의존성있게 빌드
sudo apt-get build-dep 패키지이름

패키지 검색
sudo apt-cache search 패키지이름

패키지 정보 보기
sudo apt-cache show 패키지이름

apt를 이용해서 설치된 deb패키지는 /var/cache/apt/archive/ 에 설치가 됩니다.

sudo, su, root 란?

1. su

Substitute User의 약자입니다. 대체 가능한 권한을 갖는 유저를 뜻합니다. 리눅스 운영체제에서는 최고 관리 권한을 갖는 계정은 root 계정이므로, 터미널에서 su 명령어를 입력하면 해당 터미널 세션에 한해서 일시적으로 root 계정처럼 사용할 수 있도록 권한을 부여 합니다. 해당 터미널 외에 다른 프로그램이나 또 다른 터미널 실행시에는 root 권한을 가지지 않습니다.

2. sudo

Super User do의 약자 입니다. Super User와 조동사인 do를 합쳐서 최고 관리 권한으로 실행한다는 뜻입니다. 이 때는 세션에 대한 권한이 아닌 하나의 명령에 대해서 일시적으로 최고 관리 권한을 가집니다. sudo의 경우에는 리눅스 기본 명령어가 아니기 때문에 sudo 명령어가 지원되는지 확인하여야 합니다. 유명한 배포판인 우분투(Ubuntu)와 센토스(CentOS)의 경우에는 sudo를 지원합니다.

또한, sudo는 하나의 그룹으로 설정이 되어있는데, 일반 유저를 추가시에 sudo 그룹 안에 속하게 하면 sudo 명령어를 사용할 수 있습니다.

sudo 명령을 사용하는 경우 root 계정의 암호를 묻는 것이 아니라, 현재 로그인 된 계정(sudoer)의 암호를 묻습니다.


* 참고

profile
Start 20.12.10 ~ ing

1개의 댓글

comment-user-thumbnail
2022년 4월 5일

mysql 계정 create 마다 많이 부딪혔는데 좋은 글 감사합니다!

답글 달기