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
- mysqlclient (python)
- WeSQL - S3를 저장소로 사용하는 혁신적인 MySQL 배포판
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
아래와 같은 방식으로 접속한다.
또는
PHP MYSQL
PHP에서 MYSQL을 사용하기 위해선 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 기본 인코딩 변경하기
- MySQL : MySQL 기본 character set 설정하기
- MariaDB 10.1 한글 입력이 되지 않을 때
- 마리아DB utf-8 설정
- MySQL 한글 깨짐 현상 해결하기(UTF8)
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
파일을 볼륨으로 추가하는 방법으로 선회할 수 있다.
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
- MySQL 접근 거부 오류: ERROR 1045 (28000): Access denied for user
- MySQL 패스워드 초기설정 실패 1
- MySQL에서 사용자와 데이터베이스 만들기 2
- MySQL 사용자 추가 삭제
- MySQL 사용자 관리(추가, 삭제, 권한 부여)
- Zetawiki: MySQL에 원격 접속 허용
- Zetawiki: MySQL 접근 거부 오류
- [추천] MySQL 데이터 타입
- MySQL Lock 상황 문제 해결 (INNODB_LOCK_WAITS Table)