OS 버전 | 아키텍처 |
---|---|
CentOS 7.9 | x86_64 |
#접속
ssh -i [키 페어 이름.pem] centos@1[floating IP]
2) 알맞는 버전의 설치 파일 가져오기
MySQL설치에서 CentOS는 Red Hat Linux의 버전을 따르고 있다.
3) 설치 및 설정
#3-1) 설치하기
# wget은 웹에서 파일 다운로드하기 위한 리눅스 커맨드라인 유틸리티이다.
$ wget (tar 설치파일 링크)
#3-2) 압축해제
$ tar -xvf (tar파일)
#3-3) libaio 설치
# mysql은 libaio 라이브러리 dependency가 존재하므로 서버 시작단계에서 실패하지 않기 위해 설치가 필요하다.
$ sudo yum install libaio
#3-4) 이름변경
$ mv mysql-8.0....(mysql폴더명) mysql
#3-5) mysql 파일 소유권 변경
# NHN cloud(CentOS Instance) 사용자 centos가 파일의 소유권한을 갖게 한다.
$ chown -R centos:centos mysql
#3-6) mysql 설정파일 설정
#mysql폴더 안에 my.cnf를 생성한다
$ cd mysql
$ vi my.cnf
#설정파일 작성 mysql 실행시 파일 경로에 접근할 수 있게끔 설정한다.
[client]
port=3306
socket=/home/centos/mysql/mysql.sock
[mysqld]
socket=/home/centos/mysql/mysql.sock
basedir=/home/centos/mysql
datadir=/home/centos/mysql/data
pid-file=/home/centos/mysql/mysqld.pid
log-error=/home/centos/mysql/mysql-logs/mysqld.log
:wq
#3-7) 데이터, 로그 폴더 생성
# 데이터 파일과 로그가 기록될 수 있게끔 폴더, 파일을 생성한다.
$ mkdir data
$ mkdir mysql-logs
$ cd mysql-logs
$ touch mysqld.log
#3-8) 설정파일 경로 지정
# mysql 실행시 필요한 설정파일의 경로를 지정 해준다.
$ /home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf --initialize
4) MySQL 실행
#4-1) mysql 실행
$ /home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf &
#4-2) 임시 비밀번호 찾기
# mysql을 실행하면 root에 초기 임시 비밀번호가 생성되어 로그에 남게된다. 해당 비밀번호를 가지고 루트에 로그인 한다.
$ cat mysql-logs/mysqld.log
# 4-3) 루트 계정으로 로그인
$ /home/centos/mysql/bin/mysql -u root -p --socket
/home/centos/mysql/mysql.sock
임시 비밀번호 추출 커맨드(파일 경로 주의)
grep 'temporary password' /home/centos/mysql/mysql-logs/mysqld.log | cut -d ':' -f4 | sed 's/^ *//' | tail -1
Error
mysql 로그인시 소켓에러가 발생할때 default socket위치(/tmp/mysql.sock)으로 소켓을 찾기 때문에 --socket 옵션을 통해 로그인시에 소켓의 경로를 넣어주면 해결 가능하다.
5) PATH 설정
mysql의 명령어를 찾아 일일이 경로를 적어주는 것 보다는 경로를 한번 등록하고 사용하는 것이 편하다.
# .bashrc 파일 끝(shift+g)에 경로를 등록한다.
vi ~/.bashrc
export PATH=$PATH:/home/centos/mysql/bin/
- 셸 상에서 ~(물결)은 로그인 한 유저의 홈 디렉토리를 의미한다.
- bashrc : bash가 수행될 때 실행되는 함수 (해당 사용자에게만 한정됨)
- RPM
RPM은 리눅스 소프트웨어 패키지를 설치, 삭제, 관리등을 수행하는 프로그램입니다,- yum
yum은 CentOs에서 패키지를 관리해주는 명령어로 RPM설치 시 발생하는 의존성 문제를 해결해줍니다.
1) NHN Cloud 인스턴스 생성 및 접속
2) 알맞는 버전의 설치 파일 가져오기
3) mysql 설치 및 실행
#3-1) mysql yum repository 추가
# yum -y 옵션을 통해 패키지 설치 과정에 묻는 모든 질문에 yes를 입력하도록 한다.
$ sudo yum -y install [mysql version].noarch.rpm
#3-2) 설치 확인 및 설치 가능한 패키지 목록 확인
$ yum repolistenabled | grep "mysql.*-community.*"
#3-3) 설치할 패키지 및 버전 설정
$ yum repolit all | grep mysql
$ sudo yum-config-manager (--disable | --enable) mysql(version)-community
#3-4) mysql 설치
$ sudo yum -y install mysql-community-server
#3-5) mysql 서버 실행
$ systemctl start mysqld
#3-6) mysql 서버 상태 확인
$ systemctl status mysqld
#3-7) root 계정 임시 비밀번호 확인
$ sudo grep 'temporary password' /var/log/mysqld.log
#3-8 ) root 계정 로그인
$ mysql -uroot -p
#3-9 ) root 비밀번호 변경
mysql> alter user 'root'@'localhost' identified by '[비밀번호]'
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 관련 해결법
1) systemctl status mysql
확인
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: inactive (dead)
삭제 후 재 설치시 서버가 구동되어 있지 않을 경우
2) sudo systemctl status mysqld
명령어로 서버 재실행
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running)
서버 동작 확인후 root 계정 로그인 실행
yum 설치 임시 비밀번호 추출 커맨드(파일 경로 주의)
sudo grep 'temporary password' /var/log/mysqld.log | cut -d ':' -f4 | sed 's/^ *//' | tail -1
1) db 생성
mysql> create database [database 이름];
2) user 생성, 권한 부여
#2-1) user 생성
mysql> create user '[user 이름]'@'[접근 허용 범위]' identifed by '[password]'
#2-2) 권한 부여
grant [권한] [database 이름].[테이블] to [user 이름]@[접근 허용 범위];
# 테이블이 .*로 표시될 경우 db안 모든 테이블에 해당 권한 부여
접근 허용 범위
접근 허용 범위 | 설명 |
---|---|
localhost | 내부(mysql이 설치된 로컬 환경) IP만 접근 허용 |
% | 외부의 접근 허용 |
IP | 특정 IP에서 접근 허용 |
3) 테이블 생성
#테이블 생성
create table [table 이름] (칼럼이름 및 설정);
4) 데이터 입출력
#데이터 입력
insert into [table 이름] (column1, column2 ...) values (value1, value2), (value1, value2)...;
#데이터 출력(확인)
select [column 이름] from [table 이름];
5) mysql config 내용 확인
#yum으로 설치할 경우
cat /etc/my.cnf
buffer pool은 inno DB에서 인덱스 데이터나 테이블을 캐싱하기 위해 사용되는 메인메모리 안의 영역이다.
자주 사용하는 데이터를 메모리에 직접 액세스 할 수 있게 하여 속도를 높히는 캐시와 같은 역할을 수
행한다.
다른 프로세스들이 쓸만큼의 공간은 남겨준체 대부분의 메모리 공간을 innodb의 버퍼 풀로 할당하는 것이 가장 좋고 버퍼풀의 크기가 크면 in-memory db처럼 innodb가 동작하게 된다.
MySQL은 SSL을 사용해 암호화된 연결을 지원하고 암호화되지 않은 연결에서 RSA을 사용하여 보안 암호를 교환할 수 있게끔 하는 SSL 인증서 및 키파일과 RSA의 키파일을 생성할 수 있도록 기능을 제공한다.
mysql_ssl_rsa_setup
커맨드를 사용하면 수동으로 SSL 및 RSA파일을 생성할 수 있다.
SHOW STATUS LIKE 'Ssl_server-not%';
쿼리를 통해 SSL 인증서 만료 정보도 확인할 수 있다.초기 비밀번호 없이 root 비밀번호를 변경하는 방법
mysqld_safe : 안전모드로 Mysql 데몬을 실행한다.
--skip-grant-tables : 인증 과정을 생략한다
& : 백그라운드로 커맨드를 실행한다.
Error : mysqld_safe: command not found
최신 버전의 MySQL에서 mysqld_safe 유틸리티를 제공하지 않아서 발생하는 에러
해결 순서
nhn cloud centOS 7.9환경 기준
#mysqld 데몬 종료후 --skip-grant-tables옵션 추가 후 실행
$ sudo systemctl stop mysqld
$ sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
$ sudo systemctl start mysqld
#mysql 접속 후 권한을 불러온 후(flush privileges) 비밀번호 변경
$ mysql -u root
mysql> flush privileges;
mysql> alter user 'root'@'localhost' identified by [password];
mysql> flush privileges;
mysql> quit
#서버 종료 후 mysqld 설정 초기화(--skip-grant-tables 옵션 제거)
$sudo systemctl stop mysqld
$sudo systemctl unset-environment MYSQLD_OPTS
#mysql 재시작
$ mysql -u root -p
flsuh privileges : 사용중인 MySQL 서버의 캐쉬를 삭제하고 grant tabl을 reload한다.
isolation(격리성) : 데이터 조작을 다수의 사용자가 동시에 실행해도 모순 없이 실행 되는 것을 보장하는 것.
고립수준은 직렬화(Serializable)에서 커밋되지 읽기(Read uncommitted) 쪽으로 갈수록 완화되는 구조를 가지고 있다.
1)Serializable
2)Repeatable read
3)Read committed
4)Read uncommitted
트랜잭션이 다른 트랜잭션이 커밋하지 않고 변경한 데이터들을 읽을 때 발생한다.
트랜잭션이 이전에 읽어 들인 데이터를 다시 읽어 들일 때 결과가 다른 현상이다
트랜잭션이 읽을 때 선택할 수 있는 데이터가 나타나거나 사라지는 현상이다
"O" : 해당 현상이 나타날 수 도 있다.
transaction isolation level | Dirty Reads | Nonrepeatable Reads | phantoms |
---|---|---|---|
Read uncommitted | O | O | O |
Read committed | O | O | |
Repeatable read | O | ||
Serializable |
MySQL 공식 문서 : https://dev.mysql.com/doc/mysql-installation-excerpt/8.0/en/linux-installation.html
mysqld_safe 명령어가 없을 때 : https://www.infracody.com/2022/06/mysql-root-password-reset.html
권한 변경 관련 공식 문서 : https://dev.mysql.com/doc/refman/8.0/en/privilege-changes.html
트랜잭션 isolation level : https://learn.microsoft.com/en-us/sql/odbc/reference/develop-app/transaction-isolation-levels?view=sql-server-ver16
데이터베이스 첫걸음 : http://www.yes24.com/Product/Goods/32613394