전 단계에서 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 비밀번호가 없기 때문에 비밀번호를 먼저 설정해 준다.
// 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;
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';
mysql> FLUSH PRIVILEGES;
mysql> exit
Bye
비밀번호를 설정 안하고, aws접속을 끊고 다시 접속 했을 때, mysql을 접속하지 못하는 상황이 발생했다.
이유는 자세히 찾지 못했는데, 비밀번호 없이 접속해서 초기화 하는 방법이 있었지만 내 경우는 잘 되지않아 mysql을 완전히 밀어버리고 다시 다운받아서 설정해줬다.
그리고 외부접속 허용을 위해 mysqld.cnf
파일을 일부 수정해준다.
sudo su
명령어로 root 권한을 부여한다.
cd /etc/mysql/mysql.conf.d
명령으로 mysqld.cnf
파일이 있는 디렉토리로 이동.
vi mysqld.cnf
vi 에디터로 mysqld.cnf
파일을 실행.
bind-address
를 찾아서 0.0.0.0
으로 변경.
# vi 에디터 수정 하는 방법 #
i 키 누르면 수정
ctrl + c 로 명령행
:wq로 저장후 vi 종료
service mysql restart
명령으로 mysql서버 재시작.
외부 접속을 위해 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를 변경.)
접속 확인.
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)의 암호를 묻습니다.
* 참고
mysql 계정 create 마다 많이 부딪혔는데 좋은 글 감사합니다!