centOS7 mysql 설치
root 로 명령어 실행
yum으로 설치하기 전에 아래 명령어를 설치 환경에 맞게 선택해서 실행해줘야 한다.
############ RHEL / centOS7 ###############
mysql 5.7
# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
mysql 5.6
# rpm -ivh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
############ RHEL6 / centOS6 / Amazon Linux ###############
mysql 5.7
# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el6-11.noarch.rpm
mysql 5.6
# rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum 으로 설치
# yum -y install mysql-community-server
설치 완료 후 MySQL을 구동한다.
# systemctl start mysqld.service
재시작 시 mysql 이 실행 되도록 설정
# systemctl enable mysqld.service
MySQL 서버의 상태를 확인
# systemctl status mysqld.service
######################################################################################
MySQL 서버 초기화 (MySQL 5.7 전용) : 서버의 초기 시작시, 서버의 데이터 디렉토리가 비어 있다면 다음과 같은 일이 발생합니다 :
+ 서버가 초기화됩니다.
+ SSL 인증서 및 키 파일은 데이터 디렉토리에 생성됩니다.
+ validate_password 플러그인을 설치하고 사용할 수 있습니다.
+ 수퍼 유저 계정 'root'@'localhost' 이 생성됩니다. 수퍼 유저의 암호가 설정되어 오류 로그 파일에 저장됩니다. 이를 표시하려면 다음 명령을 사용하십시오.
shell> sudo grep 'temporary password' /var/log/mysqld.log
생성 된 임시 암호로 로그인하여 가능한 한 빨리 루트 암호를 변경하고 수퍼 유저 계정의 사용자 정의 암호를 설정하십시오.
shell> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
*** 노트 ***
MySQL의 validate_password 플러그인은 기본적으로 설치됩니다. 이렇게하려면 암호에 적어도 하나의 대문자, 소문자 한 자, 한 자릿수 및 한 개의 특수 문자가 포함되어 있어야하며 총 암호 길이는 8 자 이상이어야합니다.
mysql root password : 6y5t4r#E@W!Q
#######################################################################################
mysql까지 들어가면 프롬프트가 mysql>로 바뀌면 설치가 완료
# mysql
quit 명령으로 mysql에서 빠져 나옵니다.
mysql>quit
reboot 명령으로 재시작합니다.
# reboot
재시작 후 mysql 이 정상 실행 되면 정상적으로 설치가 완료된것입니다.
# mysql -uroot -p
설정한 패스워드 입력하여 로그인
mysql에서 명령을 입력합니다.
mysql> status
설정값에서 Server characterset, Db characterset 값이 utf8 이 아닐 경우
mysql의 charaterset 을 utf8로 통일 시키도록 합니다.
my.cnf 파일을 편집
# vi /etc/my.cnf
############ 기존에 있는것은 놔두고 없는것은 추가 ###############
[client]
default-character-set = utf8
[mysql]
default-character-set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8
collation-server=utf8_general_ci
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
character-set-client-handshake = FALSE
skip-character-set-client-handshake
[mysqldump]
default-character-set=utf8
========================================= /etc/my.cnf =======================================================
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
collation-server=utf8_general_ci
init_connect=SET collation_connection = utf8_general_ci
init_connect=SET NAMES utf8
character-set-client-handshake = FALSE
skip-character-set-client-handshake
[client]
default-character-set = utf8
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8
=======================================================================================================
저장 후 mysql을 재시작
# systemctl restart mysqld
# mysql -uroot -p
mysql을 실행하고 status 명령으로 charcterset이 utf8 로 변경되었는지 확인
mysql> status
기본적으로 MySQL은 내부(Local)에서만 접속할 수 있다.
때문에 외부 접속은 개별적으로 등록해주어야하는데
mysql> SELECT HOST, USER FROM MYSQL.USER;
우선 위와같이 쿼리를 날려보면
접근이 허가된 사용자와 호스트 내역을 보여준다.
Localhost에서 접속할 수 있는 root계정은 기본적으로 등록되어 있을거고
자신이 접근하고자 하는 계정과 호스트를 다음과 같이 등록해준다.
1. 특정 IP에서만 접속 할 경우 (ex. 111.222.33.44 IP에서만 접근)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'111.222.333.44' identified by '비밀번호';
mysql> FLUSH PRIVILEGES;
2. 특정 IP 대역에서 접속 할 경우 (ex. 111.222.로 시작하는 IP대역)
mysql> GRANT ALL PRIVILEGES ON *.* TO '계정'@'111.222.%' identified by '비밀번호';
mysql> FLUSH PRIVILEGES;
3. 모든 IP를 허용 할 경우
mysql> GRANT ALL PRIVILEGES ON *.* TO '계정'@'%' identified by '비밀번호';
mysql> FLUSH PRIVILEGES;
%는 '모든 것'이라는 의미를 가지며
만약 root 계정을 어디서나 접속할 수 있도록하고 계정 비밀번호가 1234라면
다음과 같이 쿼리를 날리면 된다.
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' identified by '1234';
mysql> FLUSH PRIVILEGES;
완료하였다면 아래 select문을 실행하여 접근 허용 내역에 잘 등록되었는지 꼭 확인한다.
mysql> SELECT HOST, USER FROM MYSQL.USER;
방화벽에서 3306포트 접속 허용
# firewall-cmd --permanent --zone=public --add-port=3306/tcp
방화벽 변경사항적용
# firewall-cmd --reload
방화벽 목록
# firewall-cmd --list-all
포트 변경되었을 경우 방화벽 재실행
# systemctl restart firewalld
참고 URL
https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/#repo-qg-yum-installing
https://opentutorials.org/module/1701/10229
http://blog.naver.com/writer0713/221061669555
http://blog.naver.com/dongju1325/220964320999