[database] mysql 정리

업데이트:

mysql 정리

참고링크

운영체제 프론트엔드 백엔드 데이터베이스 인프라
리눅스구조 js필터 아파치에러로그 행삭제 아파치스쿱
프로세스 헬로월드 웹서버개념 ES기초 로그분석
네임스페이스 프로젝트생성 아파치설치 MySQL기초 beeline
디렉토리 헤더생성 flask연동 큐브리드 하둡기초
리다이렉션 async-get 장고MsSQL연결 null공백 나이파이
쓰레드 async-post 장고MySQL연결 MySQL설치(win) 백본
라즈베리파이설치 로그인페이지 장고inpectdb MySQL테이블생성 제플린
OSI7계층소개   장고read   SSL인증
OSI1계층   장고insert   커버로스
OSI2계층   장고put   도커개념
OSI3계층   장고del   도커설치
OSI4계층   flask한글요청   도커기초
OSI5,6,7계층       도커이미지
DNS서버       컨테이너네트워크
DHCP       도커API
bashrc       도커컴포즈
bash       도커볼륨
ifconfig       장고이미지
소켓프로그래밍       도커postgre
리눅스유저생성       도커이미지삭제
netstat포트열기       도커Redis
컴파일러       k8s구조
운영체제vs커널       k8s설치
작업스케쥴링       k8s서비스배포
디스크추가       POD네트워크
aws유저추가       퍼시스턴트볼륨
기초명령어       k8s에러
포트번호        

관련 링크

jdbc url

jdbc:mysql://IP주소:포트/DB명

1. Mysql 설치하기

mysql 버전확인

$ mysql --version

1.1 맥에서 Mysql 설치하기

$ brew install mysql

비밀번호 설정

$ mysql_secure_installation

Mysql실행

$ mysql.server start

상태확인

$ mysql.server status

mysql실행정지

$ mysql.server stop

1.2 우분투에서 Mysql 설치하기

$ sudo apt update
$ sudo apt install mysql-server

비밀번호 설정

$ sudo mysql_secure_installation

mysql서버 실행

$ service mysql start

mysql서버 상태확인

$ service mysql status
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-03-23 08:00:07 KST; 5min ago
 Main PID: 8182 (mysqld)
    Tasks: 29 (limit: 4915)
   CGroup: /system.slice/mysql.service
           └─8182 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid

 3월 23 08:00:07 cheolwon-910S3L-911S3L systemd[1]: Starting MySQL Community Server...
 3월 23 08:00:07 cheolwon-910S3L-911S3L systemd[1]: Started MySQL Community Server.

mysql 서버 종료

$ service mysql stop

종료후 상태확인

$ service mysql status
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Mon 2020-03-23 08:06:50 KST; 2s ago
 Main PID: 8182 (code=exited, status=0/SUCCESS)

 3월 23 08:00:07 cheolwon-910S3L-911S3L systemd[1]: Starting MySQL Community Server...
 3월 23 08:00:07 cheolwon-910S3L-911S3L systemd[1]: Started MySQL Community Server.
 3월 23 08:06:49 cheolwon-910S3L-911S3L systemd[1]: Stopping MySQL Community Server...
 3월 23 08:06:50 cheolwon-910S3L-911S3L systemd[1]: Stopped MySQL Community Server.

2. mysql 기본 명령어

mysql접속

$ sudo mysql
# 또는
$ sudo mysql -u root -p 

2.1 DB 관련

DB목록보기

mysql> show databases; 

DB 선택

mysql> use db명;

DB 생성

mysql> create database db명;

DB 삭제

mysql> drop database db명;

선택중인 DB확인

mysql> select database();

선택중인 user확인

mysql> select user(); 

2.2 테이블 관련

테이블 목록 확인

mysql> show tables;

테이블 구조 확인

mysql> desc 테이블명;
mysql> describe 테이블명;
mysql> explain 테이블명;

테이블 이름 변경

mysql> rename table 테이블명1 to 테이블명2;

테이블 삭제

mysql> drop table 테이블명; 

mysql MMM 구조

MMM이란 Multi-Master replication Manager for MySQL의 줄임말로, 기본적으로 한쪽이 마스터, 다른쪽이 슬레이브이지만 이슈발생시 슬레이브가 마스터가 될 수 있는 이중화 구조 중 하나.

mysql 인덱스(index)

책의 찾아보기와 비유

책의 마지막에 있는 “찾아보기”가 인덱스에 비유된다면 책의 내용은 데이터 파일에 해당한다고 볼 수 있다.

  • 찾아보기 : 페이지번호 = 인덱스 : 데이터파일에 저장된 레코드 주소
  • DBMS도 데이터베이스 테이블의 모든 데이터를 검색해서 원하는 결과를 가져오려면 시간이 오래걸림.
  • 시간이 오래걸리므로, 칼럼값과 해당레코드가 저장된 주소를 키-값쌍(Key-Value pair)으로 인덱스를 만듦.
  • 찾아보기와 인덱스의 공통점 = 정렬

자료구조와 비유

  • 인덱스
    SortedList와 같은 자료구조, 저장되는 값을 항상 정렬된 상태로 유지하는 자료구조, 데이터가 저장 될때마다 항상 값을 정렬해야 하므로, 저장하는 과정이 복잡하고 느리지만, 이미 정렬돼 있어서 아주 빨리 원하는 값을 찾아올 수 있음. 즉, INSERT, UPDATE, DELETE 문장의 처리는 느리지만 SELECT 문장은 매우 빠르게 처리할 수 있다. 결국, INSERT, UPDATE, DELETE 성능을 희생하는 대신 데이터 읽기 속도를 높이는 기능. 즉, 인덱스 하나를 추가할 지 말지는 데이터의 저장 속도를 어디까지 희생할 수 있는지, 읽기 속도를 얼마나 더 빠르게 만들어야 하는지에 따라 결정되야 한다.

  • 데이터파일
    ArrayList와 같은 자료구조, 저장되는 순서대로 유지하는 자료구조

인덱스의 구분

  • 프라이머리 키(Primary key)
    레코드를 대표하는 칼럼의 값으로 만들어진 인덱스를 의미. 이 칼럼은 테이블에서 해당 레코드를 식별할 수 있는 기준값이 되기 때문에 이를 식별자라고 부른다. 프라이머리키는 NULL값과 중복을 허용하지 않는다.

  • 보조 키(Secondary key)

참고자료 : real mysql