데이터베이스 이론 및 MySQL 설치
2023-2-27 업데이트
5.7 버전 MySQL 다운로드
다운로드 및 압축 해제
설치 패키지를 다운로드한 후 적절한 폴더에 압축을 해제합니다.
my.ini 설정 파일 생성
5.7 버전의 MySQL은 기본적으로 설정 파일과 data 폴더가 없으므로 초기화 과정에서 수동으로 생성해야 합니다:
[mysqld] port = 3306 basedir=C:\MySQL\mysql-5.7.40-winx64 datadir=C:\MySQL\mysql-5.7.40-winx64/data max_connections=200 character-set-server=utf8 default-storage-engine=INNODB sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysql] default-character-set=utf8
참고: 실제 MySQL 경로에 따라 basedir과 datadir을 지정해야 합니다.
환경 변수 설정
관련 블로그 참조
mysqld 서비스 시작
관리자 권한의 cmd에서 다음 명령어를 순서대로 실행합니다:
mysqld --initialize # data 데이터베이스 초기화 mysqld -install # 시스템 서비스 등록 net start mysql # 서비스 시작
데이터베이스 연결
일부 버전에서는 MySQL 클라이언트의 root 계정이 비밀번호 없이 연결되지 않을 수 있습니다. 이 경우 검증을 건너뛰고 비밀번호를 수정해야 하며, 이전 블로그의 [비밀번호 잊음] 섹션을 참조하세요.
데이터베이스 발전 과정
데이터 저장 방식의 발전
- 사용자 정의 파일, 다양한 형식으로 저장
- 소프트웨어 개발 디렉토리 규칙의 db 폴더
- 데이터베이스 서비스: 저장 경로와 데이터 조작 방식을 통일
이는 학습 비용을 낮추며, 각 프로젝트에서 유사한 방식으로 데이터를 처리할 수 있습니다.
데이터베이스 소프트웨어 발전
- 로컬 파일: 초기 단일 기기 게임 및 비 네트워크 애플리케이션
- 네트워크에 데이터 저장
현재 많은 소프트웨어는 C/S 아키텍처와 B/S 아키텍처를 채택하며, 모든 사용자의 데이터가 서버에 저장됩니다.
클라이언트는 서버 서비스를 요청하여 데이터를 조작합니다. 명백한 장점은 사용자가 계정을 통해 다양한 기기와 위치에서 데이터에 접근할 수 있다는 것입니다.
- 데이터베이스 서비스 클러스터: 모든 사용자의 데이터 보안을 확보하기 위해 데이터베이스 내용은 백업됩니다.
데이터베이스 이론
데이터베이스 본질
- 하위 원리 관점: 데이터를 조작하는 프로세스(일련의 코드)
- 실제 응용 관점: 시각적 조작 인터페이스(일부 소프트웨어)
일반적으로 데이터베이스는 데이터베이스 소프트웨어를 의미합니다.
데이터베이스도 C/S 아키텍처 프로그램이며, 데이터베이스 클라이언트를 통해 명령을 입력하여 데이터베이스 서버가 실제 데이터를 조작하도록 할 수 있습니다.
데이터베이스 분류
관계형 데이터베이스
관계형 데이터베이스의 특징:
- 고정된 테이블 구조(필드명, 필드 타입 등)
- 테이블 간에 데이터베이스 수준의 관계를 설정할 수 있음(코드 수준이 아닌 데이터 간의 연관성)
| 관계형 데이터베이스 | 특징 |
|---|---|
| MySQL | 오픈소스 사용, 가장 널리 사용됨, 기능이 균형 잡혀 있고 포괄적 |
| Oracle | 유료 현재 가장 높은 보안, 대기업 선호 |
| PostgreSQL | 오픈소스 무료, 2차 개발 지원, 호환성 높음 |
| MariaDB | MySQL과 동일한 개발자, 여전히 오픈소스 무료 |
| SQLite | 소형 데이터베이스, 주로 로컬 테스트용 |
이외에도 SQL Server, DB2, Access 등 다양한 데이터베이스 소프트웨어가 시장에 있습니다.
비관계형 데이터베이스
비관계형 데이터베이스의 특징:
- 고정된 테이블 구조가 없으며, 키-값 쌍 방식으로 데이터를 저장 및 검색
- 데이터 자체에는 관계가 없으며, 코드를 통해 데이터 간의 논리적 관계를 작성해야 함
| 비관계형 데이터베이스 | 특징 |
|---|---|
| Redis | 가장 많이 사용되는 비관계형 데이터베이스, 캐시 데이터베이스 |
| MongoDB | 문서형 데이터베이스, 주로 웹 스크래핑 및 빅데이터 분야 사용(관계형과 가장 유사한 비관계형) |
| Memcache | Redis에 의해 점차 도태됨, 기능이 부족 |
데이터베이스 소프트웨어는 많지만, 모든 인기 있는 데이터베이스의 데이터 조작 방식은 매우 유사하며, MySQL이 가전형적입니다.
MySQL 다운로드
최신 버전은 이미 8.x에 이르렀으며, 더 새로운 버전일수록 학습 비용이 낮습니다. 본문에서 설치하는 MySQL 버전은 5.6 버전입니다.
다운로드 절차
MySQL 공식 사이트: https://www.mysql.com/
다양한 버전의 다운로드 주소: https://downloads.mysql.com/archives/community/
- 버전 선택 후 압축 파일 다운로드
- 압축 파일을 적절한 폴더에 해제
- 디렉토리 확인
설치 완료.
MySQL 시작
- bin 폴더를 시스템 환경 변수에 추가
- 관리자 cmd 명령 프롬프트에서 mysqld 시작
> mysqld # 환경 변수에 추가했다면 mysqld를 직접 실행
- mysqld가 실행된 창은 그대로 두고 다른 cmd에서 mysql을 시작, 두 가지 시작 모드가 있습니다.
이제 mysql 명령을 통해 데이터를 조작할 수 있습니다(주로 data 폴더 조작).
시스템 서비스 생성
매번 수동으로 mysqld 프로세스를 시작하는 것은 번거롭습니다. mysqld를 시스템 백그라운드 서비스로 설정하고 부팅 시 자동 시작하도록 할 수 있습니다.(다음 작업을 수행하기 전에 이전에 시작한 데이터베이스 서버와 클라이언트를 종료해야 합니다)
- mysql을 시스템 서비스에 추가
시스템 서비스 보기 방법: 실행 창에 `services.msc` 입력
프로그램을 시스템 서비스에 추가: 관리자 cmd에 `mysqld --install` 입력
- 첫 추가 시 수동 시작 필요
위 그림의 MySQL을 마우스 오른쪽 버튼으로 클릭하여 시작할 수 있습니다.
또는 명령 프롬프트로 시작: `net start mysqld`
참고: MySQL 제거
1. 먼저 서버 종료 net stop mysql 2. 시스템 서비스 제거 mysqld --remove
MySQL 로그인 비밀번호 변경
- `mysqladmin -u사용자명 -p기존비밀번호 password 새비밀번호`
위 형식은 명문 비밀번호 형식이며, 명문을 직접 따르지 않을 경우 프로그램이 암호 입력을 요구합니다.
여기서 기존 비밀번호가 없으므로 바로 새 비밀번호를 입력합니다.
- 관리자 root 계정으로 로그인 후 사용자 데이터를 저장하는 테이블 `mysql.user` 직접 수정(MySQL 문장 필요)
비밀번호 잊음
제거 후 재설치(권장하지 않음) 외에도 스킵 권한 테이블 방식으로 데이터베이스를 열 수 있습니다.
- 실행 중인 서버 종료: `net stop mysql`
- 권한 테이블을 건너뛰는 방식으로 mysqld 서버 재시작: `mysqld --skip-grant-tables`
- 관리자 권한으로 로그인: `mysql -uroot -p`
- 비밀번호 직접 수정(mysql 라이브러리의 user 테이블의 root 비밀번호 수정)
update mysql.user set authentication_string=password('123') where Host='localhost' and User='root';
문자 인코딩 및 설정 파일
`\s`로 MySQL 관련 정보 확인
현재 사용자, 버전, 인코딩, 포트 번호 등을 볼 수 있습니다.
문자 인코딩이 네 항목이 있으며, Db characterset은 자체적으로 설정한 것을 제외하고 다른 항목은 MySQL 5.6 이전 버전의 기본 문자 인코딩입니다. 이는 현재 문자 인코딩 요구 사항에 더 이상 적합하지 않습니다.
하지만 이후 버전은 모두 수동 설정할 필요 없이 기본적으로 utf 계열 인코딩 형식입니다.
영구적으로 인코딩 구성을 수정하려면 설정 파일을 조작해야 합니다.
기본 설정 파일은 my-default.ini
이 파일을 열면 내부에 많은 주석과 간단한 설정 파일이 있습니다.
설정 파일 설명에서 수정 및 추가할 경우 이 파일에서 직접 변경하지 말고 동일한 디렉토리에 새 파일 `my.ini`를 작성하고 새 구성을 작성하라고 언급하고 있습니다.
문자 인코딩 관련 구성은 다음 구성을 복사하기만 하면 됩니다.
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
참고:
- utf8mb4는 이모지를 저장할 수 있으며 기능이 더 강력합니다.
- utf8과 utf-8은 차이가 있으며, MySQL에는 utf8만 있습니다.
[mysqld] 관련 구성을 수정한 후 서버를 다시 시작해야 합니다. mysqld가 시작될 때만 이 구성을 로드하기 때문입니다.
net stop mysql net start mysql
수정 후 `\s`로 구성을 확인하면 기본 문자 인코딩 변경이 적용된 것을 볼 수 있습니다.
구성 수정 후 발생할 수 있는 문제
my.ini 파일을 동일 디렉토리에 작성하여 my_default.ini의 구성을 덮어썼습니다. 원래 기본 구성 파일에는 mysqld 구성 중 하나가 원래 적용되었습니다.
따라서 이 구성을 추가해야 합니다: `sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES`
마지막으로 my.ini에 원래 구성과 새 문자 인코딩 구성을 추가하면 다음과 같아야 합니다:
[mysqld]
port = 3306
basedir=C:\MySQL\mysql-5.7.40-winx64
datadir=C:\MySQL\mysql-5.7.40-winx64/data
max_connections=200
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
default-storage-engine=INNODB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4