일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- JWT 하드코딩
- ws 라이브러리
- 비동기파일업로드
- node.js path
- 시퀄라이즈 기본설정
- cookie-parser 만들어보기
- JWT 만들어보기
- JWT 로그인 기능 구현
- express실행
- useContext
- 라우터 분리
- 세션으로 로그인 구현
- useEffect clean up
- 아이디 중복체크기능
- express router
- express.static
- nodejs파일업로드
- 라우터미들웨어 분리
- 라우트 매개변수
- 블록 만들기
- express session
- css기초
- 라우터와 미들웨어
- next 매개변수
- Uncaught Error: could not find react-redux context value; please ensure the component is wrapped in a <Provider>
- mysql wsl
- javascript기초
- buffer.from
- OAuth 카카오
- FormData()
- Today
- Total
즐코
mySQL 초기설정/권한부여/웹서버와 DB서버 연결해주기 본문
1. mySQL ?!
2. mysql 설치 및 초기 설정
3. mySQL 내 계정에 권한 부여하기
4. 웹서버(node) - DB서버(mysql) 연결하기
1. mySQL ?!
DBMS - DataBase Management System
/ Database 내의 데이터에 접근할 수 있도록 해준다.
부동의 1위는 oracle이지만, 기업용 DB이며 유료다.
무료로는 mysql이 있지만 oracle이 인수합병해버렸고.. 거기서 mysql이 따로 나와서 만든게 mariaDB이다.
그래서 우리는 무료이고, mariaDB도 쓸수있게끔 mySQL로 배운다.
express를 활용해서 게시판 서버를 만들 때 사용자가 글작성을 하면 작성한 글이 게시판 리스트에 바로 업데이트되었지만, 서버를 껐다 키면 사라졌다. 근데 사실 정상적인 게시판 페이지라면 새로 쓴 글이 남아야 하는 게 맞음
그건 바로 휘발성 메모리에 데이터가 저장되기 때문
근데 이 DB에 저장하는 건 로컬 하드디스크에 저장되기 때문에 서버를 껐다 켜도 데이터가 사라지지 않는다.
하지만, 보통 프로세스들간에는 서로 자원 공유가 불가능하다.
우리가 서버-브라우저가 통신하는 거처럼 다른 프로세스들끼리도 통신이란 걸 해야 데이터 공유가 가능하다.
그게 바로 port연결인데, 서로 간의 연결통로를 만들어 주는 거라고 생각하면 된다.
웹서버-디비서버의 통신을 도와주는 라이브러리를 nodeJS에서 제공해준다.
원래는 윈도우에서 쓸 수 있는 mysql이 있는데 그건 설치가 쉽다고 한다.
하지만, 나중에 aws 배포하는 걸 어려워한다고 해서.. 그걸 미리 훈련하고, mySQL 구조에 대해 좀 익히기 위해서 우린 일단 어려운 방법으로 설치를 함, 즉 wsl안에 mysql을 설치함.
2. mysql 설치 및 초기 설정
sudo apt install mysql-server
오류나면? sudo apt update 또는 sudo apt upgrade 하고 다시 해보기
mysql --version MYSQL
: 설치 여부 확인
sudo service mysql start : mysql 시작이 가능함
wsl2는 systemctl을 지원하지 않아서 service 명령어로 mysql을 구동해야한다고 함(?)
wsl 호환성 커널이다 보니 다소 문제가 많다고한다..
- 초기 세팅하는 부분 시작
sudo mysql_secure_installation
1. validate password plugin 개발용, 테스트 이기 때문에 mysql 초기 비번 없게 해도 괜츈 (비활성화해주기)
2. root 계정 패스워드 ? Y (1번에서 root 계정 비번 활성화 안했으니까 상관 x / 활성화했다면 비번 2번 넣어주고 설정)
3. 익명사용자 삭제할거냐 (remove anonymous user)? Y 입력해서 삭제
4. 외부에서 root계정으로 DB 접근 허용 안해줄거 (disallow)? Y 입력해서 접근 못하게 해주기
5. TEST DB 삭제할거 (remove test db) ? Y 입력해서 삭제 허용
6. privileges table reload 할거냐? Y 입력
-> all done 나오면 끝
sudo mysql / 관리자로 mysql 연결하기
근데 난 이게 안 먹어서 sudo service mysql restart 먼저 치고, sudo mysql -uroot 로 치면 root 계정으로 접속됨
이후 설정을 위해 mySQL의 구조를 대충 그려보면 아래와 같다고 함
사용자 계정 중 가장 최고 관리자인 root가 있다고 그 외에 또다른 계정들을 만들수 있다.
그리고 그 안에 database라는 데이터 보관 장소가 있고 그 안에 각 표들(table)이 존재한다.
표안에는 표를 이루는 여러가지 항목들(field)이 존재한다.
엑셀로 따지면, 엑셀 파일 자체 (database) > 각 시트들 (table) > 시트 당 들어 있는 표의 항목들 이름(field)
아무튼 다시 본론으로 돌아와서
#1. show databases;
하면 database의 목록들이 보여짐 (원래는 기본적으로 4개가 뜸)
#2. USE 데이터베이스명;
USE mysql 하면 mysql 데이터베이스를 보겠다,사용할거다 라는 뜻
mysql 이라는 데이터베이스에 들어가야 기본값으로 설정 된 것들을 수정할 수 있다.
#3. SHOW tables;
mysql이 가지고 있는 모든 테이블들을 다 보여준다.
37개가 쫙 뜬다. 그중에서 user라는 table을 가장 많이 쓸거다.
user라는 table에서 user를 등록하거나 pw 변경할수도 있고 user의 권한을 조정할 수 있다.
#4. DESC 테이블명;
DESC user 치면, 가지고 있는 field 항목들이 쫙 나온다.
field엔 데이터 타입이 존재하는 것도 확인 가능하다.
#5. SELECT 필드명1, 필드명2, ... FROM 테이블명
우린 이 field들 중에서 user, host, plugin 이라는 field에 들어가서 설정을 바꿀 거다.
아래와 같이 필터링되서 출력됨
#6.UPDATE 테이블명 SET 필드명='바꿔주려는값' WHERE 바꾸려는 필드명='바꾸려는 필드값'
패스워드 저장하는 암호화에 대한 내용...? auto_socket인증방식을 caching_sha2_password방식으로 변경해야함
UPDATE user SET plugin='caching_sha2_password' WHERE User='root'
user라는 테이블을 업뎃할건데, User가 'root'인거를 찾아가지고 -> 걔만 plugin을 caching_sha2_password로 바꿔줘
#7. 이후 root 계정에 초기 비밀번호가 세팅되어있는지 알아보기
(근데 난 맨 처음 초기 설정할때 애초에 root계정 비번을 설정하지 않았기 때문에 빈값으로 나옴)
#8. 비밀번호변경하려면,
ALTER user 'root'@'localhost' identified BY '변경할 비번';
변경안되면? 패스워드 보안정책 이슈 때문이라고 함.
근데 뭐 지금은 개인 테스트용으로 하는거니까 그냥 보안 설정을 바꿔준다.
password_policy 낮추기 : SET global validate_password.policy=LOW;
password_length 줄이기 : SET global validate_password.length=4;
#9. 변경 확인해보려면,
show variables like 'validate_password%';
이렇게 하고,
ALTER user 'root'@'localhost' IDENTIFIED BY '변경할 비번'; 하면?
난 empty set이란 게 떴다.
#10. 그래서 아래 코드를 입력해준다.
install plugin validate_password soname 'validate_password.so';
select plugin_name, plugin_status from information_schema.plugins where plugin_name like 'validate%';
#11. 이제 root말고 내 계정을 생성해보자
CREATE user 'yjlee'@'%' IDENTIFIED WITH mysql_native_password BY '비번';
(% 넣으면 내 계정에 누구나 접속할수있게끔 설정한 것)
express와 mysql을 연결하는건 둘 사이의 통신을 만들어준다는것
통신해주는 라이브러리가 암호화 방식이 최신걸로 업데이트/구현이 안되어있어서 요즘 걸로 암호 설정을 하면 그 라이브러리가 해석을 못해서 접속이 안됨 -> 그래서 mysql_native_password가 최신 암호화가 아니긴하지만, 통신을 위해 우선 강제적으로 쓰는거다.
#12. 적용, 반영시키기 (git 으로 치자면, git commit)
FLUSH PRIVILEGES;
3. mySQL 내 계정에 권한 부여하기
#1. 위에서 내 계정을 만들었으니 내 계정으로 들어와보자.
sudo mysql -uyjlee -p 비번입력
#2. 현재 내 계정으로 mysql에 들어와 있는 상태에서, 데이터베이스를 만들어보자.
create database 데이터베이스명;
근데 이렇게 하면, 접근이 안된다고 뜸 -> 즉, 권한이 없다는 뜻
#3. 나갔다가 (exit) 다시 권한 부여해주기
sudo mysql -uroot -p 비번적기
GRANT ALL PRIVILEGES ON *.* TO 'yjlee'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO '권한 줄 계정명'@'권한범위' WITH GRANT OPTION;
#4. 다시 나갔다가 내 계정 (yjlee) 로 다시 접속
sudo mysql -uyjlee -p 비번적기
create database myfirtdb;
create database myhomepage;
두 데이터베이스 만들고 확인해보면 만들어짐
// mySQL 접속하는 방법 기억하기
4. 웹서버(node) - DB서버(mysql) 연결하기
맨 위에서 얘기한 서로 다른 프로세스로 돌아가고 있는 웹서버와 DB서버간의 연결이 필요하다.
우린 express의 mysql이라는 라이브러리를 사용할 거다.
1. mysql 라이브러리 사용할 때 필요한 정보
- IP 주소 / mysql 접속할 컴퓨터의 IP 주소 (나중에 다른 명령어로 다른 컴퓨터의 mysql에도 접속이 가능하다고함)
- 내 계정명
- 계정 패스워드
- 접속할 데이터베이스명
2. 외부 접속 설정하기
터미널로 돌아와서 명령어 쓰기
#1. sudo netstat -ntlp
어떤 소켓이 연결되어 있고 어떤 소켓이 수신 중인지 알 수 있다.
즉, 사용중인 포트와 사용중인 프로세스 알려줌
#2. 없다면 sudo apt install net-tools로 설치해주고,
다시 sudo netstat -ntlp 쳐보면, 아래와 같이 나옴
PID 프로세스 아이디 => 10052/mysqld 라는 하나의 프로세스만 돌고있다.
#3. sudo netstat -ntlp | grep mysqld
mysqld만 sorting해서 보여줌
이 때, 우리는 local adress IP를 0.0.0.0 으로 모든 IP를 허용할 수 있게끔 변경해줘야함
위의 캡쳐는 내가 이미 수정한 뒤라 0.0.0.0:3306 이지만 원래는 127.0.0.1:3306 이었다.
#4. mysqld.cnf 파일 찾기
아래 경로로 이동
#5. mysqld.cnf 파일 열기
sudo vi mysqld.cnf
쭉 내려가보면 아래 bind-address = 127.0.0.1 은 주석처리 (#) 해주고,
bind-address = 0.0.0.0 으로 바꿔주고 저장하고 종료해주기 (:wq!)
#6. service mysql restart 해주고
다시 sudo netstat -ntlp | grep mysqld 치면 바껴있음
#7. ifconfig 치면 IP 값이 나온다. 그 아이피값을 mysql 코드상에 넣어주기
#8. 실행해보면, node - mysql이 통신중이다.
'mySQL' 카테고리의 다른 글
Sequelize - 시퀄라이즈 기본 (모델 정의 및 옵션 설정) (0) | 2022.05.15 |
---|---|
mySQL - DB 데이터 가져오기 (0) | 2022.02.18 |