Skip to content

MySql

MySQL(공식적 발음: play /maɪ ˌɛskjuːˈɛl/, /maɪ ˈsiːkwəl/로도 종종 발음된다.)은 세계에서 가장 많이 쓰이는 오픈 소스의 관계형 데이터베이스 관리 시스템(RDBMS)이다. 다중 스레드, 다중 사용자 형식의 구조질의어 형식의 데이터베이스 관리 시스템으로서 MySQL AB가 관리 및 지원하고 있으며, Qt처럼 이중 라이선스가 적용된다. 하나의 옵션은 GPL이며, GPL 이외의 라이선스로 적용시키려는 경우 전통적인 지적재산권 라이선스의 적용을 받는다.

위와 같은 지원 방식은 자유 소프트웨어 재단이 프로젝트에 저작권을 적용하는 방법과 비슷한 JBoss의 모델과 유사하다. 그러나 기반코드가 개인의 소유자에게 저작권이 있고 커뮤니티에 의해 개발되는 아파치 프로젝트와는 다르다.

MySQL AB는 MySQL 라이선스에 의한 판매 지원 및 서비스 계약 시스템을 개발, 유지한다. 그리고 또한 인터넷을 통한 전 세계의 협력자들을 고용한다. MySQL AB는 David Axmark, Allan Larsson 그리고 Michael "Monty" Widenius에 의해 설립되었다.

MySQL AB는 또한 MaxDB라고 불리는 MySQL AB와는 기반코드가 다른 데이터베이스 관리 시스템을 판매하고 있다. 썬 마이크로시스템즈에 10억 달러에 인수되었으나, 썬 마이크로시스템즈가 오라클에 인수되며 같이 넘어갔다.

MYSQL 데이터베이스가 사용하는 기본포트(port)번호는 3306번입니다.

Category

  • MySql:User: 사용자 관리.
  • MySql:Drop: DROP 문에 대한 설명.
  • MySql:Select: SELECT 문에 대한 설명.
  • MySql:Create: CREATE 문에 대한 설명.
  • MySql:Insert: INSERT 문에 대한 설명.
  • MySql:Grant: GRANT 문에 대한 설명.

Projects

mysql program command-line

  • mysql -u root -p mysql: MySQL 초기 Root 사용자 및 비밀번호 설정. (직후, 비밀번호를 입력하라고 할 경우 비밀번호가 없으므로 그냥 Enter)
  • service mysqld start: MySQL 서비스 시작.
  • service mysqld stop: MySQL 서비스 중지.
  • service mysqld restart: MySQL 서비스 재시작.
  • mysql < text_file: 쿼리를 적용한다.

List of MySQL Command

mysql 프로그램 사용방법은 아래와 같다. (프로그램의 실행 명령어 인자가 아닌, mysql>로 시작되는 명령어에 대하여 정리한다.)

create database DB이름;
DB 생성문.
flush privileges;
데이터베이스 재 로딩.
drop database DB이름;
DB 삭제.
DESCRIBE TABLE이름;
테이블정보 출력.
source 파일명;
MySQL에서 텍스트 파일의 SQL문 실행시키기 (source명령어의 파일명을 쓸때는 반드시 "\"대신에 "/"를 써주어야된다.)
show databases;
데이터베이스 목록 출력
show tables;
선택된 데이터베이스의 테이블 목록 출력.

mysql dump

mysqldump -u[userId] -p[password] --all-databases > dump.sql
서버에 있는 모든 것의 논리 백업 생성
mysqldump -u[userId] -p[password] --databases [DB명] > dump.sql
특정 데이터베이스만의 논리 백업 생성
mysqldump -u[userId] -p[password] [DB명] [테이블명]
특정 데이터베이스의 특정 테이블 논리 백업 생성.

Options

  • -A, --all-databases : 모든 DB 덤프
  • -B, --databases : 특정 DB를 덤프
  • --opt : 버퍼링을 비확성화 하고, 많은 데이터를 덤프에 있는 소량의 SQL구문에 기록해 더효율적으로 동작하다록 한다.
  • --allow-keywords, --quote-names : 예약어를 사용하는 테이블을 덤프하고 복원할 수 있게 한다.
  • --lock-alltables : 전역적으로 일관된 백업을 만들도록 "FLUSH TABLES WITH READ LOCK"을 사용한다.
  • --tab : "SELECT INTO OUTFILE"로 파일을 덤프하여, 덤프 및 복원 속도가 매우 빠르다.
  • -d, --no-data : 데이터는 제외하고 스키마만 덤프
  • -t, --no-create-info : 스키마는 제외하고

Connecting to the MySQL Server

My.cnf

/etc/my.cnf에서 bind-address가 존재한다면 #를 사용하여 주석처리한다.

Access

아래와 같은 방식으로 접속한다.

$ mysql --host=localhost --user=myname --password=mypass mydb

또는

$ mysql -h localhost -u myname -pmypass mydb

PHP MYSQL

PHP에서 MYSQL을 사용하기 위해선 php-mysql를 설치해야 한다.

## CentOS install:
$ sudo yum install php php-mysql

Tips

MySQL 쓰면서 하지 말아야 할 것 17가지

  • MySQL 쓰면서 하지 말아야 할 것 17가지 – Lael's World
  • 작게 생각하기
  • EXPLAIN 안 써보기
  • 잘못된 데이터 타입 선택
  • PHP에서 pconnect 쓰는 짓
  • 너무 과도한 DB 추상화 계층을 두는 것
  • 스토리지 엔진 이해 못 하는 것
  • 인덱스 레이아웃 이해 못 하는 것
  • 쿼리 캐시 이해 못 하는 것
  • Stored Procedure를 쓰는 것
  • 인덱스 컬럼에 함수 쓰는 것
  • 인덱스 빼먹거나 쓸모없는 인덱스 만들어 놓는 것
  • Join 안 쓰는 짓
  • Deep Scan 고려하지 않는 것
  • InnoDB 테이블에서 WHERE 조건절 없이 SELECT COUNT(*) 하는 짓
  • 프로파일링이나 벤치마킹 안 하는 것
  • AUTO_INCREMENT 안 쓰는 것
  • ON DUPLICATE KEY UPDATE를 안 쓰는 것

MySQL 기본 인코딩 변경하기

UTF-8 로 변경:

[mysqld]
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect=SET NAMES utf8
character-set-server = utf8

Docker settings

version: '3.1'

services:

  db:
    image: mariadb
    restart: always
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --init-connect='SET NAMES UTF8;' --innodb-flush-log-at-trx-commit=0
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=example
      - MYSQL_DATABASE=test
      - MYSQL_USER=testuser
      - MYSQL_PASSWORD=testpassword

Troubleshooting

Docker command error

--init-connect='SET NAMES UTF8;'와 같은 공백이 포함된 아규먼트를 Docker-compose의 command로 전달하면 문제가 발생된다.

참고로 명령행으로 전달할 때 그레이브(`)문자를 사용하면 해결된다: e.g. --init-connect=`SET NAMES UTF8;`

이것도 안될 경우 /etc/mysql/conf.d/폴더에 *.cnf파일을 볼륨으로 추가하는 방법으로 선회할 수 있다. services:

db:
image: mariadb
deploy:
replicas: 1
restart_policy:
condition: any
networks:
- net
secrets:
- portus-db-pw
environment:
MYSQL_DATABASE: portus_production
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/portus-db-pw
#command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci --init-connect='SET NAMES UTF8;' --innodb-flush-log-at-trx-commit=0
command: mysqld
volumes:
- /opt/opm/portus/db/portus.cnf:/etc/mysql/conf.d/portus.cnf:ro

</syntaxhighlight>

Favorite site

Documentation

Tutorials

Guide

Tip

Performance

References


  1. MySQL-mysql_install_db-example.pdf 

  2. MySQL-create_user_and_database.pdf 

  3. 50-Tips-for-Boosting-MySQL-Performance-CON2655.pdf