MySQL 이해 및 실습

이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, IT 컨텐츠를 공유하고자, 자체 온라인 사이트와, 다음 두 채널도 오픈하였습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
●  잔재미코딩 뉴스레터 오픈 [구독해보기]
●  잔재미코딩 유투브 오픈 [구독해보기]

2. MySQL 이해 및 실습

  • MySQL(마이에스큐엘)은 세계에서 가장 많이 쓰이는 오픈 소스 관계형 데이터베이스 관리 시스템
  • MySQL는 오라클사가 소유. 불확실한 라이선스 정책으로 인해, 동일 소스를 기반으로 MariaDB 가 파생됨 (거의 유사, MariaDB가 오픈소스 라이센스를 따르고 있다고 보면 됨)
2.1 MySQL 설치 - 실습1
1. sudo apt-get update
2. sudo apt-get install mysql-server
- 설치 중간에 비밀번호 설정 주의!!
- 참고: 만약 vi 명령이 없다면, 다음과 같이 vi 설치 및 사용법 숙지
- sudo apt-get install vim
3. sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
- 다음 설정을 [mysqld] 에 추가
1. mysql 원격 접속 허용
- bind-address 0.0.0.0 로 변경
2. mysql 한글 설정 추가
- collation-server = utf8_unicode_ci
- character-set-server = utf8
- skip-character-set-client-handshake
4. sudo service mysql start
- mysql 서비스 시작
참고:
 Usage: /etc/init.d/mysql start|stop|restart|status
 
5. 모든 호스트에서 mysql 접속 허용하기
 # mysql -u root -p 후 비밀번호 입력
 mysql> use mysql;
 mysql> GRANT ALL PRIVILEGES ON *.* to 'root'@'%' IDENTIFIED BY 'korea123';
 mysql> flush privileges;
 mysql> exit
 # sudo service mysql restart
 
/etc/mysql/mysql.conf.d/mysqld.cnf 파일의 [mysqld] 설정 예

[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
collation-server = utf8_unicode_ci
character-set-server = utf8
skip-character-set-client-handshake
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0
참고1: use mysql;
use 데이터베이스명; 으로 mysql 데이터베이스는 mysql 설정을 저장하고 있는 데이터베이스임. 해당 데이터베이스에서 작업을 하겠다는 의미임.

참고2: mysql 접속 허용 관련 설정 (5장 참고)
1) 로컬에서만 접속 허용
mysql> GRANT ALL PRIVILEGES ON DATABASE.TABLE to 'root'@localhost identified by "korea123";

2) 특정 호스트에만 접속 허용
mysql> GRANT ALL PRIVILEGES ON DATABASE.TABLE to 'root'@www.blim.co.kr identified by "korea123";

3) 모든 호스트에서 접속 허용
mysql> GRANT ALL PRIVILEGES ON DATABASE.TABLE to 'root'@'%' identified by "korea123";

옵션 상세
(1) ALL – 모든 권한 / SELECT, UPDATE – 조회, 수정 권한등으로 권한 제한 가능
    예) GRANT INSERT,UPDATE,SELECT ON *.* TO 'username'@'localhost' IDENTIFIED BY '비밀번호';
(2) database.table – 특정 데이터베이스에 특정 테이블에만 권한을 줄 수 있음 / *.* – 모든 데이터베이스에 모든 테이블 권한을 가짐
(3) root – 계정명
(4) korea123 – 계정 비밀번호

참고3: flush privileges; (5장 참고)
- user, db 같은 grant table을 INSERT, UPDATE 등을 써서 직접 데이터 입력/수정을 할 경우, grant tables를 다시 읽어야 권한 설정이 적용됨.
- 서버를 재기동하지 않고, grant table을 새로 읽으라는 명령이 flush privileges 이지만, INSERT, UPDATE 가 아닌 GRANT 명령을 사용했을 경우에는 해당 명령 생략 가능 (하지만 확실하게 하기 위해 일반적으로 사용)
2.2 mysql workbench 설치 - 실습2
- mysql 서버에 접속해서 SQL 명령을 통해, mysql 데이터베이스 조회 및 조작을 할 수 있는 클라이언트 소프트웨어
- 프로그래머들은 mysql workbench를 사용하기보다는 직접 CLI(Command line interface)를 사용하는 경우가 많음
- workbench 사용법 및 CLI 사용법 둘다 익혀둘 것

- 다운로드 및 설치:
- https://dev.mysql.com/downloads/workbench/ 에서 workbench 다운로드
- 설치 및 mysql 서버 연결 참고, 상세 인터페이스 (https://help.iwinv.kr/manual/read.html?idx=349)

- docker에 mysql 서버를 설치한 경우는 3306 mysql 포트 추가 오픈이 필요함
- 추가 포트 오픈 방법
http://1004jonghee.tistory.com/entry/%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EC%82%AD%EC%A0%9C%ED%95%98%EC%A7%80-%EC%95%8A%EA%B3%A0-%ED%8F%AC%ED%8A%B8-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0![image.png](attachment:image.png)

- 예: commit 후 새로운 image로 기존 옵션에 -p 3306:3306 추가해서 docker 실행
docker run -Pit -i -t -p 8888:8888 -p 8787:8787 -p 8022:22 -p 3306:3306 --name dave_ubuntu ubuntu /bin/bash

- 윈도우10의 경우 workbench 연결 설정의 Hostname을 127.0.0.1 로 하면 접속 성공
- 맥의 경우 workbench 연결 설정의 Hostname을 0.0.0.0 으로 하면 접속 성공

mysql 접속 명령

# mysql -h host -u user -p [password] dbname
  host: mysql 서버 주소 (관련 옵션 사용 안하면, 현재 PC)
  user: mysql ID
  password: mysql ID의 암호

예)
  # mysql -u root -p
  현재 PC에 root ID로 별도 데이터베이스를 지정하지 않고, 접속
본 자료 보다 업데이트된 자료와 함께 온라인 강의로 익히면 체계적으로 이해할 수 있습니다!
퀄러티가 다른 온라인 강의로 차근차근 익혀보세요
실습3 - 데이터베이스, 테이블 목록 보기
# mysql -u root -p
# show databases;
# use mysql;
# show tables;
# use information_schema;
# show tables;
# exit
참고: https://dev.mysql.com/doc/refman/5.7/en/