임시비밀번호 변경

ALTER USER '[user명]'@'localhost' IDENTIFIED BY '[변경할 비밀번호]';

 

USER 생성, 권한 부여

user 생성

CREATE USER '[user명]'@'[접근가능범위]' IDENTIFIED BY '[비밀번호]';

# 내부 접근을 허용하는 user 생성
CREATE USER '[user명]'@'localhost' IDENTIFIED BY '[비밀번호]';

# 외부 접근을 허용하는 user 생성
CREATE USER '[user명]'@'%' IDENTIFIED BY '[비밀번호]';

# 특정 IP만 허용하는 user 생성
CREATE USER '[user명]'@'192.168.188.122' IDENTIFIED BY '[비밀번호]';

# 특정 IP 대역을 허용하는 user 생성
CREATE USER '[user명]'@'192.168.%' IDENTIFIED BY '[비밀번호]';

접근가능범위

  1. localhost : 내부 IP만 접근 가능
  2. % : 외부에서 접근 가능
  3. 특정 IP : 정해진 IP에서만 접근 가능

user 권한 부여

# 계정이 이미 존재하는데 'identfied by '비밀번호'' 부분을 추가하면 비밀번호가 변경된다.
GRANT ALL PRIVILEGES ON [database명].[table명] TO [user id]@host IDENTIFIED BY '비밀번호';
# 모든 원격지에서 접속 권한 추가
GRANT ALL PRIVILEGES ON [database명].[table명] TO [user명]@'%' IDENTIFIED BY '비밀번호';
# host에 '200.100.%' 로 하면 IP주소가 200.100.X.X 로 시작되는 모든 IP에서 원격 접속을 허용한다는 의미
# host에 '200.100.100.50' 으로 하면 IP주소가 200.100.100.50 인 곳에서만 원격 접속을 허용한다는 의미

변경된 내용을 메모리에 반영(권한 적용)

flush privileges;

 

DB 조회 및 생성

DB 조회

SHOW DATABASES;

DB 생성

CREATE DATABASE [database명];

 

Table 생성

CREATE TABLE [table명] (column1 datatype1, column2 datatype2, ...);

 

데이터 입출력

데이터 삽입

INSERT INTO [table명] (column1, column2, ...) VALUES (value1, value2, ...), (value1, value2, ...), ...;

데이터 조회

SELECT [column명] FROM [table명];

 

MySQL config 내용 확인

# 압축파일 설치
cat /home/centos/mysql/my.cnf

# yum 설치
cat /etc/my.cnf

✅ 공식문서

https://docs.nhncloud.com/ko/TOAST/ko/Overview/

 

⬇️ MySQL 설치 전에 인스턴스 생성하는 방법 ⬇️

2023.01.08 - [인프라/NHN Cloud] - NHN Cloud 인스턴스 생성하기


인스턴스 환경

  • OS : CentOS 7.9
  • 아키텍쳐: x86_64

 

0. 설치 전 확인

인스턴스에 MySQL을 처음 설치한다는 가정으로 설치를 진행한다.

  • 설치 여부 확인
rpm -qa | grep mysql


아래와 같이 나오면 설치가 되어 있는 것이다.

재설치를 하기 위해서는 삭제를 먼저 하고 설치를 진행한다.

yum remove mysql-server

 

1. 설치 과정

( 1 / 8 ) 인스턴스에 SSH 방식으로 접속

ssh -i [키페어이름.pem] centos@[플로팅IP]

 

( 2 / 8 ) yum을 통해 다운로드

sudo yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-4.noarch.rpm
  • yum repository에 다운 받은 MySQL이 추가되었는지 확인
yum repolist enabled | grep "mysql.*-community.*"

💡 yum이란?

2023.01.13 - [프로그래밍/Linux] - Yum이란? 개념, 사용법 및 동작방식에 대해서

 

( 3 / 8 ) MySQL 설치

sudo yum install mysql-community-server

 

( 4 / 8 ) MySQL version 확인

mysql --version

 

( 5 / 8 ) MySQL 시작

sudo systemctl start mysqld

 

( 6 / 8 ) 임시비밀번호 확인

sudo grep '임시비밀번호' /var/log/mysqld.log

 

( 7 / 8 ) root 계정에 임시비밀번호로 MySQL 접속

mysql -u root -p

 

( 8 / 8 ) root 계정의 임시비밀번호 변경

ALTER USER 'root'@'localhost' IDENTIFIED BY '[변경할 비밀번호]';

 

2. 설치 결과

sudo systemctl start mysqld
sudo systemctl status mysqld

✅ 공식문서

https://docs.nhncloud.com/ko/TOAST/ko/Overview/

 

⬇️ MySQL 설치 전에 인스턴스 생성하는 방법 ⬇️

2023.01.08 - [인프라/NHN Cloud] - NHN Cloud 인스턴스 생성하기


인스턴스 환경

  • OS : CentOS 7.9
  • 아키텍쳐: x86_64

 

0. 설치 전 확인

인스턴스에 MySQL을 처음 설치한다는 가정으로 설치를 진행한다.

  • 설치 여부 확인
mysql --version

아래와 같은 형식으로 나오면 설치가 되어 있는 것이다.

재설치를 하기 위해서는 삭제를 먼저 하고 설치를 진행한다.

rm -rf /var/lib/mysql

데이터 파일이나 config 파일까지 삭제해야 한다.

1. 설치 과정

( 1 / 12 ) 인스턴스에 SSH 방식으로 접속

ssh -i [키페어이름.pem] centos@[플로팅IP]

 

( 2 / 12 ) wget 다운로드

sudo yum install wget

💡 wget이란?
'web get'의 줄임말로, 네트워크 상에서 데이터를 다운로드하는 기능을 수행한다. HTTP, HTTPS, FTP 프로토콜을 지원하며, HTTP proxy에서 데이터를 가져올 수도 있다.

( 3 / 12 ) MySQL 바이너리 버전 압축파일 다운로드

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz

 

( 4 / 12 ) 편리하도록 mv를 이용하여 폴더 이름 변경

mv mysql-8.0.27-linux-glibc2.12-x86_64/ mysql

 

( 5 / 12 ) mysql 폴더 소유자 지정

# sudo chown -R [사용자명]:[실행OS명] [지정할 폴더명]
sudo chown -R centos:centos mysql
  • -R : 폴더와 폴더 내부 파일까지 전부 소유자와 그룹이 변경됨

 

( 6 / 12 ) mysql 폴더에 my.cnf 파일 생성 및 내용 추가

💡my.cnf 파일이란?
Unix 계열 MySQL 엔진에서 사용하는 configure 파일. Windows 계열에서는 my.ini 라는 이름으로 사용된다.

cd mysql
touch my.cnf
vi my.cnf
## 내용 ##
[client]
port=3306  # 접속시 사용할 Port 설정
socket=/home/centos/mysql/mysql.sock  # 사용할 소켓 파일 설정
[mysqld]
socket=/home/centos/mysql/mysql.sock
basedir=/home/centos/mysql  # base directory 설정
datadir=/home/centos/mysql/data  # data directory 설정
user=mysql  # 접속 유저명
key_buffer_size=64M  # 메모리에 있는 인덱스 블록에서 사용되는 버퍼의 크기, MyISAM 테이블에서 사용하고 있는 모든 쓰레드에서 공유하는 버퍼 크기
max_allowed_packet=32M  # 가장 크게 생성될 수 있는 packet 1개 크기(바이트) 설정
#query_cache_size=32M
max_connections=2625  # 동시에 접근 가능한 커넥션 수 설정
max_connect_errors=2000000  # 발생할 수 있는 최대 에러 개수
wait_timeout=60  # API를 이용한 client 프로그램(PHP, JDBC, ODBC...) 상에서 최대 연결시간
explicit_defaults_for_timestamp = 1
pid-file=/home/centos/mysql/mysqld.pid
log-error=/home/centos/mysql/logs/mysqld.log
bulk_insert_buffer_size=0

설정할 variable을 그룹별로 모아서 중괄호로 기술하는 것을 원칙으로 한다.

 

variable 작성 규칙

  1. 주석은 # 으로 처리한다.
  2. variable과 value 사이에는 공백이 있어도 무방하다.
  3. variable 앞에 -, --는 사용하지 않는다.
  4. my.cnf에 기술된 variable은 처음 서버가 로드 될때만 적용된다.
  5. my.cnf에 기술되지 않은 variable은 default값으로 설정된다.
  6. 모든 varaiable은 그룹 안에 속해야 한다.

 

( 7 / 12 ) libaio 다운로드

mkdir data
mkdir logs
sudo yum install libaio -y

💡 libaio이란?
데이터베이스 서버에 필수인 비동기 라이브러리.
libaio가 설치되어 있지 않으면 intialization 단계나 이후 서버 시작 단계에서 실패할 수 있으니 설치를 진행한다.

 

( 8 / 12 ) my.cnf 파일 경로 지정

/home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf --initialize

--default-file= 옵션을 사용하면 지정된 파일만 읽기 때문에 주의해야 한다.

참고) my.cnf 외에 다른 cnf 파일을 지정하여 사용하고 싶을 경우 --defaults-extra-files로 설정할 수 있다.
예를 들면 여러 대의 MySQL 서버를 운영하는 경우, 기본적인 설정은 my.cnf를 사용하여 설정하고, 서버별 특이 사항은 다른 cnf 파일을 생성하여 configuration 내용을 관리하는 경우이다.

 

( 9 / 12 ) mysql 실행

/home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf &

 

( 10 / 12 ) logs/mysqld.log 에서 임시비밀번호 찾기

cd logs
cat mysqld.log

 

( 11 / 12 ) mysql 폴더에서 실행

cd ..
/home/centos/mysql/bin/mysql -uroot -p '임시비밀번호' -S/home/centos/mysql/mysql.sock

 

( 12 / 12 ) 다운로드 받은 압축파일 삭제

rm mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz

 

✋🏻 여기서 잠깐 ! PATH 설정하기


⭐️ 경로를 등록하고 사용하는 것이 편리합니다.⭐️

  1. /etc/profile 수정하기
# pwd 했을 때 / 인 상태에서
sudo vi /etc/profile
  1. GG 이용해서 파일 맨 끝으로 가서 추가하고 저장하기(:wp)
export PATH="$PATH:/home/centos/mysql/bin"
  1. 변경된 파일 적용하기
    source /etc/profile


참고) PATH에 넣을 경로는 my.cnf 에 basedir 경로에 bin만 추가한 것과 같다.

2. 설치 결과

분명 설치 잘 돼서 데이터 입출력까지 하고, 다시 켰는데

mysql --version 도 안되고 그냥 mysql 커맨드가 다 안 됐다.

 

에러는 Error - bash: mysql: command not found 라고 났다.

 

뭐지 싶어서 구글링 엄청 했는데

검색했을 때 보통 PATH에 추가하라고 나오는 경로가 있는데

나는 mysql이 설치된 경로가 달라서 맞지 않았다.

 

이런 경우 본인의 mysql이 어느 경로에 설치되어 있는지 확인해보는걸 추천한다.

 

참고) PATH에 넣을 경로는 my.cnf 에 basedir 경로에 bin만 추가한 것과 같다.

 

🧐 압축파일로 설치했을 때만 문제가 있었고, yum으로 설치한거는 따로 설정없이도 잘 동작했다. 왜일까?


⭐️ 이 과정을 거쳐야 mysql 커맨드를 사용할 수 있습니다. ⭐️

예) mysql --version , mysql -u [사용자이름] -p

 

1. /etc/profile 수정하기

#pwd 했을 때 / 인 상태에서
sudo vi /etc/profile

2. GG 이용해서 파일 맨 끝으로 가서 추가하고 저장하기(:wp)

export PATH="$PATH:/home/centos/mysql/bin"

3. 변경된 파일 적용하기

source /etc/profile

4. 결과

잘 되는 것을 확인할 수 있다!

 

 

+ Recent posts