don't stop believing

MySQL 5.6 설치 (on CentOS7) 본문

Database/MYSQL

MySQL 5.6 설치 (on CentOS7)

Tongchun 2019. 4. 5. 11:30

CentOS7에도 MySQL을 설치해 보겠습니다. (빠르게 가겠습니다.)

먼저 yum을 업데이트 해줍니다. 그리고 wget을 설치합니다.

$ sudo yum update
$ sudo yum install wget

MySQL Repository를 다운로드 하고 적용합니다. 그리고 다시 yum을 업데이트 해줍니다.

$ sudo wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
$ sudo yum update

MySQL repository가 적용되었다면 yum으로 설치해 줍니다.

설치가 정상적으로 되었다면 mysqld를 시작하고 서버 리부팅 이후에도 자동 실행될 수 있도록 설정합니다.

장성적으로 실행되고 있는지 status로 확인도 해줍니다.

$ sudo yum install mysql-server
$ sudo systemctl start mysqld
$ sudo systemctl enable mysqld
$ sudo systemctl status mysqld

mysql_secure_installation 명령으로 기본적인 보안 설정도 해줍니다.

$ sudo mysql_secure_installation

실행하면 몇 가지 보안 설정을 묻습니다.

 

먼저 mysql의 root 계정 비번을 넣으라고 합니다. 처음 설치한 mysql의 root 계정 비번은 없습니다. 그냥 엔터를 칩니다.

Enter current password for root (enter for none): 

 

mysql의 root 계정 비번을 설정할 것인지 묻습니다. 당연히 설정 해야죠.

그럼 새로 설정할 비번을 두 번 써줍니다.

Set root password? [Y/n] y

New password: 
Re-enter new password: 

 

다음은 anonymous 계정을 제거할 건지 묻습니다. 인증된 계정만 접속되어야 합니다.

Remove anonymous users? [Y/n] y

 

원격으로 root 계정 로그인을 허용할 것인지 묻습니다.

이건 판단에 따라 다르며 저는 원격으로 root 계정 로그인을 할 겁니다.

Disallow root login remotely? [Y/n] n

 

테스트 데이터베이스를 지우고 접속도 못하게 합니다.

Remove test database and access to it? [Y/n] y

 

설정한 걸 적용할 것인지 묻습니다. 적용 합니다.

Reload privilege tables now? [Y/n] y

 

원격으로 mysql 접근 설정은 mysql의 config 파일이 아닌 mysql server 자체에서 설정할겁니다.

먼저 my.cnf 파일을 엽니다.

$ sudo vim /etc/my.cnf

그리고 [mysqld] 밑에 아래와 같이 추가합니다. 

추가된 설정은 # 를 붙여 주석처리 되어야 합니다.

# bind-address = 127.0.0.1
# skip-networking

my.cof 파일을 저장하고 mysql을 재시작해줍니다.

$ sudo systemctl restart mysqld

이제 mysql에 root 계정으로 접소합니다.

$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.6.43 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

mysql 버전부터 확인하고 가겠습니다.

mysql> SHOW VARIABLES LIKE "%version%";
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.6.43                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| version                 | 5.6.43                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+
7 rows in set (0.00 sec)

이제 mysql의 root 계정이 특정 ip (10.10.5.104)에서만 접속할 수 있도록 아래 쿼리로 권한을 설정합니다.

PASSWORD 부분에는 root 계정의 비밀번호를 넣습니다.

GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.10.5.104' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.10.5.104' IDENTIFIED BY 'ngle1@3$' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

설정을 적용하기위해 아래 쿼리를 실행합니다.

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

적용이 되었는지 mysql.user 테이블을 확인합니다.

mysql> SELECT User, Host, authentication_string FROM mysql.user;
+------+-----------------------+-----------------------+
| User | Host                  | authentication_string |
+------+-----------------------+-----------------------+
| root | localhost             |                       |
| root | localhost.localdomain |                       |
| root | 127.0.0.1             |                       |
| root | ::1                   |                       |
| root | 10.10.5.104           |                       |
+------+-----------------------+-----------------------+
5 rows in set (0.00 sec)

root 계정이 10.10.5.104에서 접속할 수 있도록 권한이 추가되었습니다.

 

이제 다른 계정도 만들어 줍니다. 저는 tongchun으로 만들어 보겠습니다. PASSWORD 부분에는 원하는 비밀번호는 넣으면 됩니다.

CREATE USER 'tongchun'@'%' IDENTIFIED BY 'PASSWORD';

특정 ip에서만 접속을 허용할 경우 % 부분에 ip를 넣으면 됩니다. %는 모든 곳에서 접속을 허용하게 됩니다.

mysql> CREATE USER 'tongchun'@'%' IDENTIFIED BY 'ngle1@3$';
Query OK, 0 rows affected (0.00 sec)

이번에는 database를 만들고 tongchun 계정에 해당 database의 권한을 줍니다.

저는 ngletest라고 database를 만들었습니다.

mysql> CREATE DATABASE ngletest;
Query OK, 1 row affected (0.00 sec)

이제 tongchun 계정에 ngletest DB의 모든 권한을 주도록 합니다.

mysql> GRANT ALL ON ngletest.* TO tongchun@'%' IDENTIFIED BY 'ngle1@3$';
Query OK, 0 rows affected (0.00 sec)

그리고 권한 설정을 바로 적용합니다.

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

만약 tongchun 계정에 모둔 DB에서 모든 권한을 주려면 아래와 같이 실행합니다.

GRANT ALL ON *.* TO tongchun@'%' IDENTIFIED BY 'ngle1@3$';

tongchun 계정에 ngletest DB의 select, insert, update, delate 권한만 주려면 아래와 같이 실행합니다.

GRANT SELECT,DELETE,INSERT,UPDATE ON ngletest.* TO 'tongchun'@'%';

 

이제 exit로 mysql을 종료합니다.

마지막으로 서버에 방화벽이 실행되고 있다면 방화멱에 mysql의 포트를 허용하고 재시작(reload)해줍니다.

$ sudo firewall-cmd --zone=public --add-service=mysql --permanent
$ sudo firewall-cmd --reload

여기까지 mysql을 사용하기 위한 설치와 기본 설정을 마쳤습니다.

저는 MySQLWorkbench로 관리합니다. 아래와 같이 설정 후 접속이 되는지 확인해 보겠습니다.

위 설정과 같이 Connection 정보를 추가하고 접속해 봅니다.

 

잘 접속되네요. 우선 여기까지 하겠습니다.

저는 데이터베이스나 테이블 생성의 경우 MySQLWorkbench를 사용합니다.

 

'Database > MYSQL' 카테고리의 다른 글

MySQL 한글 깨짐 (character set)  (0) 2019.06.21
테이블 생성 스크립트 뽑아내기  (0) 2019.04.15
mysql 설치 와 기본 설정 (on Ubuntu)  (9) 2019.02.11
Comments