Ubuntu 18.04 에 MySQL을 설치해보겠습니다.
Chapter01. mysql 설치
우선, 버젼 확인을 하고 목록을 소프트웨어 목록을 최신으로 업데이트 하겠습니다.
$ sudo apt-get install mysql-server
설치 명령어를 통해서 mysql-server를 설치합니다.
그리고 포트를 열어줘야 되는데요.
만약 iptable이 실행되고 있다면 외부에서 접속할 수 있도록 mysql 포트(3306)를 열어줘야 합니다.
+) iptable 이란?
"""
iptables는 시스템 관리자가 리눅스 커널 방화벽(다른 넷필터 모듈로 구현됨)이 제공하는 테이블들과 그것을 저장하는 체인, 규칙들을 구성할 수 있게 해주는 사용자 공간 응용 프로그램이다. 각기 다른 커널 모듈과 프로그램들은 현재 다른 프로토콜을 위해 사용되는데, iptables는 IPv4에, ip6tables는 IPv6에, arptables는 ARP에, ebtables는 이더넷 프레임에 적용된다.
쉽게 말하면? 리눅스상에서 방화벽을 설정하는 도구로서 커널 2.4 이전 버전에서 사용되던 ipchains를 대신하는 방화벽 도구이다. iptables는 커널상에서의 netfilter 패킷필터링 기능을 사용자 공간에서 제어하는 수준으로 사용할 수 있다.
패킷필터링이란 지나가는 패킷의 해더를 보고 그 전체 패킷의 운명을 결정하는 것을 말한다. 일반적으로 패킷은 해더와 데이터를 가진다. 해더에 필터링할 정보인 출발지IP:PORT, 도착지IP:PORT, checksum, 프로토콜 옵션등을 가지며 데이터는 각각의 전송데이터가 들어간다.
특정 조건을 가지고 있는 패킷에 대해 허용(ACCEPT)과 차단(DROP)등을 지정할 수 있으며, 특정 조건등을 통해 다양한 방식의 패킷 필터링과 처리 방식을 지원한다.
iptables 정책은 여러 구분으로 나눠지며 중요한 부분은 Chain이다.
Chain은 패킷이 조작될 상태를 지정하며 iptables에 내장된 기본 Chain은 다음과 같다.
(기본 Chain은 영구적이며 삭제가 불가능하다. 이외에 -N 옵션으로 지정하는 사용자 정의 Chain이 있다.)
"""
좀 더 자세한 설명은 출처에 밝힌 블로그 링크에서 확인해주세요~
$ sudo systemctl start mysql
: mysql 이 실행해줍니다.
$ sudo systemctl enable mysql
: Ubuntu 서버가 재시작되어도 mysql이 자동 시작되도록 등록합니다.
root 계정으로 접속하였습니다.
sql prompt 가 보이네요!
mysql에 접속할때 root 계정에 패스워드 없이 접속했습니다. root 계정에 패스워드를 추가해 보겠습니다.
$ ALTER USER 'root'@'localhost' IDENTIFIED BY 'dhj7503';
패스워드를 추가했습니다! 이번에 새로운 계정을 만들어 보려고하느데 그전에 기존의 user 를 확인해보겠습니다.
그리고 db를 만들고 거기에 맞는 권한을 갖는 계정을 만들어보겠습니다.
sikaleo_01 이라는 db를 만들고 이를 확인해보았습니다!
이제 계정을 만들게요!
계정은 robert이고 Host는 localhost, 그리고 패스워드는 dhj7503로 만들었습니다.
mysql의 user 테이블에 추가하거나 변경이 있을 경우 flush privileges 쿼리를 실행해 줍니다.
아래 쿼리가 대문자인 것은 mysql의 예약어(select, update 등)은 대문자로 하는 것이 관례(convention)입니다.
+) FLUSH PRIVILEGES 명령어?
"""
MySQL이나 MariaDB를 사용하다보면 FLUSH PRIVILEGES라는 명령어를 자주 사용하게 됩니다. 대체 무슨 의미일까요?.
보통은 INSERT, DELETE, UPDATE를 통해 사용자를 추가, 삭제, 권한 변경 등을 수행하였을 때 이 변경 사항을 반영하기 위하여 사용합니다. 이 때 FLUSH PRIVILEGES는 grant 테이블을 reload함으로서 변경 사항을 즉시 반영하도록 합니다.
"""
다시 본론으로!
계정이 추가된 걸 확인할 수 있습니다!
이제 robert 계정에 sikaleo_01 DB를 사용하도록 권한을 주겠습니다.
$ GRANT ALL PRIVILEGES ON DB명.* to 계정@localhost;
라는 명령어로 권한을 주고 FLUSH PRIVILEGES; 로 변경사항 반영해줍니다.
위 쿼리 결과로 나온 두 건 중 첫 번째에 GRANT USAGE ON *.* TO가 있습니다. 이건 *.* 는 아무 권한이 없다는 의미 입니다. 현제 robert 계정은 sikaleo_01 DB만 모든 권한을 가지고 있고 mysql의 admin이나 system을 접근할 수 있는 권한은 없다는 것을 의미합니다. (이게 나중에 workbench 접속할 때 귀찮아지는 문제가 됩니다. 뒤에서 설명해드릴게요~)
계정 뒤에 붙은 @localhost는 해당 계정이 localhost 즉 mysql이 설치된 pc에서만 접속할 수 있다는 의미입니다. 만약 다른 서버(remote)에서 접속하고 싶다면 접속하려는 서버의 IP로 계정을 새로 만들어 줘야 합니다.
예를 들어 192.168.0.10에서 접속하고 싶다면 아래와 같이 쿼리를 실행하면 됩니다.
CREATE USER 'root'@'192.168.0.10' IDENTIFIED BY 'dhj7503';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.0.10' WITH GRANT OPTION;
FLUSH PRIVILEGES;
만약 특정 PC(192.168.0.10)이 아닌 어디서든 접속하려면 IP대신 %로 해주면 됩니다.
CREATE USER 'root'@'%' IDENTIFIED BY 'dhj7503';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
마찬가지로 robert 계정도 remote 접속이 필요하다면 아래와 같이 쿼리를 실행해 줍니다.
CREATE USER 'robert'@'%' IDENTIFIED BY 'dhj7503';
GRANT ALL PRIVILEGES ON ngletutor.* TO 'robert'@'%';
FLUSH PRIVILEGES;
참고로 저는 저 명령어들을 실행 안했습니다~!
이렇게 mysql 설치하고 DB, 계정 생성을 해보았습니다.
이제, 다시 나갔다고 재접속하고 workbench를 설치해보겠습니다!
Chapter02. mysql-workbench 설치 + 에러 잡기
지금부터 workbench 설치부터 위에서 만든 계정으로 접속하고, mysql 공식문서에서 sample 로 주는 sql 파일을
읽어보는 작업을 진행해보겠습니다. (위에서 하는대로 쭉 진행해 왔다면 이 단계에서 에러가 몇 개 발생합니다. 것도 잡아야 sample sql 다 읽어집니다.) 시작하겠습니다.
exit 명령어 쳐서 mysql 종료해주시구요.
재접속 할 때는
$ mysql -ur robert -p
명령어 친 뒤에 enter password:
에서 아까 만든 password 입력해주면 접속이 됩니다!
자, 만든 계정으로 재접속 잘 된다는 것을 확인한 뒤에 다시 터미널로 돌아와주세요.
mysql-workbench 을 설치해주시구요.
mysql-workbench 라는 돌고래 gui가 보일 겁니다. 실행시키면 됩니다.
위 캡쳐 화면에서 Local instance 3306 위에서 오른쪽 마우스를 클릭하면 Edit Connection 이라고 하는 옵션이 있습니다.
이를 실행시켜주세요. 위 캡쳐에서는 robert 라고 나오지만 최초에는 root 라고 나와 있습니다. root 패스워드를 입력하면 되야되는데 저의 경우는 안됐습니다.
위와 같은 에러가 발생했었습니다.
user 를 새로 만든 게정인 robert 로 해서 접속하니깐 됐네요. 하지만 그 다음에 또 문제가 생깁니다. ㅠㅠ
https://www.mysqltutorial.org/getting-started-with-mysql/mysql-sample-database-aspx/
mysql 공식문서 튜토리얼입니다. 위에서 sample db를 다운받아서 Workbench에서 시행하려고 하는데요.
Error Code: 1044. Access denied for user 'robert'@'10.%' to database 'classicmodels'
와 같은 에러가 발생합니다.
robert 라고 하는 계정은 sikaleo_01 에 대한 db 권한 밖에 없어서 발생하는 에러로 보이는데요. root 계정으로 재접속해서 robert 계정에 모든 권한을 줘서 실행하면 에러가 해결됩니다. 근데...
root 계정에 문제가 생겼는데요.
분명히 비밀번호를 잘 만들었다 생각했는데 자꾸 접속 에러가 발생합니다.
(여러 실습대로 따라하는데 에러가 뜨는 것은 많은 분들이 익숙할텐데요. 그치만 약간의 딥빡이 오는건...후...ㅠㅠ)
뭐가 문제인걸까요?
+) 에러 잡기
위처럼 root의 plugin이 auth_socket으로 설정되어있는것을 확인할 수 있다.
이 값을 mysql_native_password로 변경해주면 일반적인 로그인이 가능하다고 합니다.
root 계정의 plugin 상태를 바꿔주었습니다.
root 계정에 다시 재접속이 이루어짐을 확인할 수 있습니다.
근데, 갑자기 root 계정에 접속을 왜 다시 하려고 했을까요?
root 계정으로 접속을 해야 robert 계정에 권한을 줄 수 있습니다. root 계정은 말 그대로 root 니깐요.
자, robert 계정에 모든 권한을 줬습니다.
다시 workbench 로 돌아가보겠습니다.
mysql 공식문서에서 받은 Sql 파일은
File - Open SQL script 눌러주신 다음에 해당 sql 파일을 더블 클릭해주면 위와 같이 보입니다.
그 다음에 그 밑에 메뉴바에 제일 왼쪽에 깔끔한 번개 마크 눌러주시면 실행됩니다. Limit row는 10000 으로 해주세요.
저 스크립트가 8천줄 정도 되거든요.
실행하고 나면 왼쪽 하단에
schemas 에
classicmodels 라고 하는 SCHEMA 가 형성됩니다.
---------
이걸로 MYSQL 설치, MYSQL-Workbench 설치, 워크벤치에서 mysql sample db 읽어서 스키마 형성
까지 진행해보았습니다.
아래는 참고한 블로그 링크들입니다.
좀 더 깔아야하는 schema 들이 있는데 그건 다음 시간에 다루고,
mysql 에서 데이터 전처리 하는법을 좀 다뤄보겠습니다.
--참고--
https://dejavuqa.tistory.com/317
https://sarc.io/index.php/mariadb/355-mysql-flush-privileges
https://donghwa-kim.github.io/mysql.html
https://stackoverflow.com/questions/31123685/error-code-1044-access-denied-for-user
'CS+ > SQL' 카테고리의 다른 글
Mysql - LIKE , IF, CASE (0) | 2020.02.08 |
---|---|
Mysql - 수치 연산, 문자 연산, IFNULL (0) | 2020.02.08 |
Mysql - 복수의 열 정렬, 행수 제한(LIMIT,OFFSET) (0) | 2020.02.02 |
Mysql - DML 01 - select, desc, where , order by (0) | 2020.02.01 |
우분투 18.04 MYSQL workbench 에서 csv import 하기 (0) | 2020.01.19 |