Ubuntu(우분투) 18.04 에 MySQL 5.7 설치 - apt source binary 방식

Share

Last Updated on 3월 10, 2022 by Jade(정현호)

우분투 18.04 환경에서 Mysql 5.7 설치 방법에 대한 포스팅 입니다.

apt(패키지 설치) 방법, Binary를 이용한 설치 , Source Compile 설치 3개 방법에 대해서 기술하려고 합니다


• 설치 환경
OS : Ubuntu 18.04 
MySQL : 5.7
프롬프트는 ubuntu$  입니다.
     

apt(패키지) 방식으로 설치

MySQL 설치 가능 버전을 먼저 확인 하도록 하겠습니다.

ubuntu$ sudo apt update

ubuntu$ sudo apt-cache search mysql-server

mysql-server - MySQL database server (metapackage depending on the latest version)
mysql-server-5.7 - MySQL database server binaries and system database setup
mysql-server-core-5.7 - MySQL database server binaries
default-mysql-server - MySQL database server binaries and system database setup (metapackage)
default-mysql-server-core - MySQL database server binaries (metapackage)
mariadb-server-10.1 - MariaDB database server binaries
mariadb-server-core-10.1 - MariaDB database core server files
percona-xtradb-cluster-server-5.7 - Percona XtraDB Cluster database server binaries
mariadb-server-10.5 - MariaDB database server binaries
mariadb-server-core-10.5 - MariaDB database core server files



필요 패키지 설치

ubuntu$ sudo apt install build-essential bison \
gcc g++ libncurses5-dev libxml2-dev openssl \
libssl-dev curl libcurl4-openssl-dev libjpeg-dev \
libpng-dev libfreetype6-dev libsasl2-dev \
autoconf libncurses5 libtirpc-dev \
libaio1 libaio-dev libnuma-dev numactl \
libc6-dev ncurses* cmake-gui cmake -y



MySQL 패키지 설치

ubuntu$ sudo apt install mysql-server-5.7 \
mysql-server-core-5.7 mysql-client-5.7 \
mysql-client-core-5.7


설치 직후 MySQL 은 가동된 상태 입니다.

ubuntu$ ps -ef |grep mysql
mysql 11401 1 1 15:41 ? 00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid



설치 완료 후 실행

root 유저에서는 mysql

일반 유저에서  sudo mysql

를 사용하면 패스워드 없이 접속이 가능 합니다.



이는 우분투 에서 mysql 접속 방법을 기존의 패스워드 방식이 아니라 auth_socket 플러그인을 이용하여 인증 로그인을 하기 때문입니다

apt 로 설치하게 되면 접속 인증 방식에 대해서 OS 인증방식으로 설정되어 db가 생성됩니다.


mysql> select user,host,plugin
from mysql.user where User='root';

+------+-----------+-------------+
| user   |       host      |      plugin     |
+------+-----------+-------------+
| root    |  localhost   | auth_socket  |
+------+-----------+-------------+
1 row in set (0.00 sec)



MySQL 비밀번호 로그인 방식으로 변경

현재 기본적으로는 OS 인증으로 패스워드 없이 로그인 할 수 있습니다.
ubuntu$ sudo mysql


root 유저에서는

root# mysql


* 기존과 같이 패스워드 입력 방식으로 사용하길 원할 경우 아래 절차대로 진행 하시면 됩니다.
OS 인증을 통하여 사용 하실려는 경우 패스워드 변경 절차는 생략하여도 됩니다.



패스워드 방식 변경

기존 패스워드 방식으로 변경, 한줄로 입력 합니다.


mysql> UPDATE mysql.user SET plugin = 'mysql_native_password', authentication_string = PASSWORD('패스워드입력') WHERE User = 'root';

mysql> commit;
mysql> FLUSH PRIVILEGES;
mysql> quit



MySQL 설정 변경

설정 파일의 위치는 2곳에 있습니다.

/etc/mysql/mysql.conf.d/
/etc/mysql/conf.d/

그 중에 [mysqld] 항목은 /etc/mysql/mysql.conf.d/mysqld.cnf 에 내용이 있습니다.



먼저 mysqld.cnf 에서 몇가지 수정 하겠습니다.
ubuntu$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf



[mysqld] <-- 절에 아래 내용을 추가로 입력해 줍니다.

user=mysql

innodb_buffer_pool_size = 384M
  # -> 값은 더 크게 해도 되고 128MB 단위로 변경하면 됩니다.
innodb_file_per_table=ON
character-set-client-handshake=OFF
skip-character-set-client-handshake

init_connect=SET collation_connection = utf8mb4_general_ci
init_connect=SET NAMES utf8mb4
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

bind-address = 127.0.0.1

to

bind-address = 0.0.0.0
-> 외부에서 직접 접속 하려는 환경이라면 위의 값을 public-ip 나 0.0.0.0 으로 설정 합니다.



MySQL 재시작

설정파일을 수정하였다면 MySQL 을 재시작합니다.

ubuntu$ sudo systemctl restart mysql


재시작이 완료되었다면 몇가지를 확인 해봅니다.
ubuntu$ mysql -u root -p
Enter password: [패스워드 입력]
Welcome to the MySQL monitor. Commands end with ; or \g.
< 중략 >



status 로 조회

mysql> status;
--------------
mysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper
<중략>
Server version: 5.7.32-0ubuntu0.18.04.1 (Ubuntu)
<중략>
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4



innodb_buffer_pool_size 조회

mysql> show global variables like '%innodb_buffer_pool_size%';
+-------------------------+------------+
| Variable_name                   |      Value     |
+-------------------------+------------+
| innodb_buffer_pool_size    | 402653184 |
+-------------------------+------------+


여기까지 설정하면 apt 로 MySQL 설치가 완료 된 것 입니다


binary 방식 설치

필요 패키지 설치

ubuntu$ sudo apt install build-essential bison \
gcc g++ libncurses5-dev libxml2-dev openssl \
libssl-dev curl libcurl4-openssl-dev libjpeg-dev \
libpng-dev libfreetype6-dev libsasl2-dev \
autoconf libncurses5 libtirpc-dev \
libaio1 libaio-dev libnuma-dev numactl \
libc6-dev ncurses* cmake-gui cmake -y



유저 및 그룹 생성


* apt 로 설치시 group과 user는 자동생성 되고

* 소스컴파일이나 unzip 형태는 별도로 생성이 필요 합니다.


ubuntu$ sudo addgroup mysql
ubuntu$ sudo useradd -s /sbin/nologin -g mysql mysql

-s /bin/false 혹은 /sbin/nologin 옵션을 사용해서 유저의 로그인쉘을 사용할 수 없게 하는 것입니다.
즉 mysql이라는 유저는 mysql 데몬을 실행하기 위한 유저일뿐이라는 것입니다.
서버의 보안강화 측면에서 외부에서 mysql 유저로 쉘로그인은 할 필요는 없기 때문입니다.



파일 다운 및 압축 해제

파일 다운 로드 및 압축을 해제 합니다.

ubuntu$ wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz

ubuntu$ sudo tar zxvf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz -C /usr/local




기본 디렉토리 생성 및 소유권 변경

파일 및 소유권 변경 합니다.

ubuntu$ cd /usr/local/mysql-5.7.31-linux-glibc2.12-x86_64
ubuntu$ sudo mkdir logs tmp data

ubuntu$ sudo touch ./logs/mysqld_safe.err

ubuntu$ cd /usr/local/
ubuntu$ sudo chown -R mysql:mysql mysql-5.7.31-linux-glibc2.12-x86_64




심볼릭 링크 사용

ubuntu$ cd /usr/local

ubuntu$ sudo ln -s mysql-5.7.31-linux-glibc2.12-x86_64 mysql



MySQL 라이브러리 등록

ubuntu$ sudo vi /etc/ld.so.conf

/usr/local/mysql/lib
--> 내용 추가

ubuntu$ sudo ldconfig
--> 명령어 수행



환경변수에 PATH 추가

-- user profile
ubuntu$ vi .profile 

export PATH=$PATH:/usr/local/mysql/bin
--> 추가 


-- root profile
ubuntu$ sudo -I
[root]# vi .profile

export PATH=$PATH:/usr/local/mysql/bin
--> 추가 



sudoers 수정

ubuntu$ sudo vi /etc/sudoers

Defaults secure_path= 
=> 에 /usr/local/mysql/bin 추가


* 이미지는 스크린샷을 위해 경로를 일부 제외/수정한 것입니다.


* Source컴파일 / Binary 설치 시 - 파라미터 설정
항목으로 이동 하시면 됩니다.


Source 컴파일 방식 설치

필요 패키지 설치

ubuntu$ sudo apt install build-essential bison \
gcc g++ libncurses5-dev libxml2-dev openssl \
libssl-dev curl libcurl4-openssl-dev libjpeg-dev \
libpng-dev libfreetype6-dev libsasl2-dev \
autoconf libncurses5 libtirpc-dev \
ncurses* cmake-gui cmake -y



유저 및 그룹 생성


* apt 로 설치시 group과 user는 자동생성 되고

* 소스컴파일이나 unzip 형태는 별도로 생성이 필요 합니다.


ubuntu$ sudo addgroup mysql
ubuntu$ sudo useradd -s /sbin/nologin -g mysql mysql

-s /bin/false 혹은 /sbin/nologin 옵션을 사용해서 유저의 로그인쉘을 사용할 수 없게 하는 것입니다.
즉 mysql이라는 유저는 mysql 데몬을 실행하기 위한 유저일뿐이라는 것입니다.
서버의 보안강화 측면에서 외부에서 mysql 유저로 쉘로그인은 할 필요는 없기 때문입니다.



파일 다운 및 압축 해제

파일은 boost가 포함된 버전으로 받으시면 됩니다.
Compressed TAR Archive, Includes Boost Headers

ubuntu$ wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.31.tar.gz

ubuntu$ tar zxvf mysql-boost-5.7.31.tar.gz

ubuntu$ cd mysql-5.7.31




cmake 수행

ubuntu$ sudo cmake \
'-DCMAKE_INSTALL_PREFIX=/usr/local/mysql5.7' \
'-DINSTALL_SBINDIR=/usr/local/mysql5.7/bin' \
'-DINSTALL_BINDIR=/usr/local/mysql5.7/bin' \
'-DMYSQL_DATADIR=/usr/local/mysql5.7/data' \
'-DINSTALL_SCRIPTDIR=/usr/local/mysql5.7/bin' \
'-DWITH_INNOBASE_STORAGE_ENGINE=1' \
'-DWITH_PARTITION_STORAGE_ENGINE=1' \
'-DSYSCONFDIR=/usr/local/mysql5.7/etc' \
'-DDEFAULT_CHARSET=utf8mb4' \
'-DDEFAULT_COLLATION=utf8mb4_general_ci' \
'-DWITH_EXTRA_CHARSETS=all' \
'-DENABLED_LOCAL_INFILE=1' \
'-DMYSQL_TCP_PORT=3306' \
'-DMYSQL_UNIX_ADDR=/tmp/mysql.sock' \
'-DCURSES_LIBRARY=/usr/lib/x86_64-linux-gnu/libncurses.so' \
'-DCURSES_INCLUDE_PATH=/usr/include' \
'-DDOWNLOAD_BOOST=1' \
'-DWITH_BOOST=./boost' \
'-DWITH_ARCHIVE_STORAGE_ENGINE=1' \
'-DWITH_BLACKHOLE_STORAGE_ENGINE=1' \
'-DWITH_PERFSCHEMA_STORAGE_ENGINE=1' \
'-DWITH_FEDERATED_STORAGE_ENGINE=1'



빌드 수행 

ubuntu$ sudo make
ubuntu$ sudo make install



디렉토리 생성 및 권한 변경 작업 

ubuntu$ cd /usr/local/mysql5.7
ubuntu$ sudo mkdir logs tmp data
ubuntu$ sudo touch /usr/local/mysql5.7/logs/mysqld_safe.err

ubuntu$ cd /usr/local/
ubuntu$ sudo chown -R mysql:mysql mysql-5.7.31-linux-glibc2.12-x86_64



퍼미션 변경

ubuntu$ sudo chown -R mysql:mysql /usr/local/mysql5.7



심볼릭 링크 사용

ubuntu$ cd /usr/local
ubuntu$ sudo ln -s mysql5.7  mysql



MySQL 라이브러리 등록

ubuntu$ sudo vi /etc/ld.so.conf
/usr/local/mysql/lib
--> 내용 추가


ubuntu$ sudo ldconfig
--> 명령어 수행





환경변수에 PATH 추가

-- user profile
ubuntu$ vi .profile 

export PATH=$PATH:/usr/local/mysql/bin
--> 추가 


-- root profile
ubuntu$ sudo -I
[root]# vi .profile

export PATH=$PATH:/usr/local/mysql/bin
--> 추가 



sudoers 수정

ubuntu$ sudo vi /etc/sudoers

Defaults secure_path= 
=> 에 /usr/local/mysql/bin 추가


* 이미지는 스크린샷을 위해 경로를 일부 제외/수정한 것입니다.


Source / Binary 설치 - 파라미터 설정

* Source 컴파일 과 Binary 설치 방식 공통 으로 해당 되는 내용 입니다.

* 참고 :  설치방법에 따라서 5.7.18 부터는 my-default.ini 를 제공하지 않습니다.

The my-default.cnf.sh file (used to produce a default my-default.cnf or my-default.ini file) is no longer included 
in source distributions and my-default.cnf and my-default.ini are no longer included in or 
installed by distribution packages. (Bug #22525354)

https://docs.oracle.com/cd/E17952_01/mysql-5.7-relnotes-en/news-5-7-18.html
https://mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-18.html#mysqld-5-7-18-packaging



/etc/my.cnf 파일을 생성

ubuntu$ sudo vi /etc/my.cnf

[client]
port = 3306
socket = /tmp/mysql.sock

[mysql]
no-auto-rehash
show-warnings
prompt=\u@\h:\d_\R:\m:\\s>
pager="less -n -i -F -X -E"

[mysqld]
server-id=1
port = 3306
bind-address = 0.0.0.0
basedir = /usr/local/mysql
datadir= /usr/local/mysql/data
tmpdir=/usr/local/mysql/data
socket=/tmp/mysql.sock
user=mysql
skip_name_resolve
#timestamp
explicit_defaults_for_timestamp = TRUE

### MyISAM Spectific options
key_buffer_size = 100M

### INNODB Spectific options
default-storage-engine = InnoDB
innodb_buffer_pool_size = 384M

#User Table Datafile
innodb_data_home_dir = /usr/local/mysql/data/
innodb_data_file_path = ib_system:100M:autoextend
innodb_file_per_table=ON
innodb_log_buffer_size = 8M
innodb_log_files_in_group = 3
innodb_log_file_size=200M
innodb_log_files_in_group=4
#innodb_log_group_home_dir = /usr/local/mysql/data/redologs
#innodb_undo_directory = /usr/local/mysql/data/undologs
innodb_undo_tablespaces = 1

### Connection
back_log = 100
max_connections = 1000
max_connect_errors = 1000
wait_timeout= 60

### log
# Error Log
log_error=/usr/local/mysql/logs/mysqld.err
log-output=FILE
general_log=0
slow-query-log=0
long_query_time = 5
# 5 sec
slow_query_log_file = /usr/local/mysql/logs/slow_query.log
pid-file=/usr/local/mysql/tmp/mysqld.pid

###chracterset
character-set-client-handshake=OFF
skip-character-set-client-handshake
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

[mysqld_safe]
log_error=/usr/local/mysql/logs/mysqld.err
pid-file=/usr/local/mysql/tmp/mysqld.pid



* innodb_buffer_pool_size 는 innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances 배수와 같아야 합니다

innodb_buffer_pool_chunk_size default 값은 128M 이고
innodb_buffer_pool_instances 는 innodb_buffer_pool_size < 1GB 미만일 경우 1 이고 1GB보다 크다면 기본값 8 입니다.


DB 생성 및 root 패스워드 변경

* Source 컴파일 과 Binary 설치 방식 공통 으로 해당 되는 내용 입니다.


DB 생성

ubuntu$ cd /usr/local/mysql/bin
ubuntu$ sudo ./mysqld --initialize --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data


데이터파일 생성 확인
ls -al /usr/local/mysql/data/


MySQL DB 기동

ubuntu$ sudo /usr/local/mysql/bin/mysqld_safe &




임시 root 패스워드 확인

ubuntu$ cd /usr/local/mysql/logs


ubuntu$ sudo cat mysqld.err | grep generated
2020-11-16T18:32:31.737958Z 1 [Note] A temporary password is generated for root@localhost:   $@!wjm>u>i4.I


ubuntu$ cd /usr/local/mysql/bin
ubuntu$ sudo ./mysql -u root -p
Enter password: $@!wjm>u>i4.I



root 패스워드 변경

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '패스워드';
mysql> commit;
mysql> flush privileges;
mysql> exit


db 서비스 등록 및 시작

* Source 컴파일 과 Binary 설치 방식 공통 으로 해당 되는 내용 입니다.


서비스 등록을 위해 DB 중지

ubuntu$ cd /usr/local/mysql/bin/
ubuntu$ sudo ./mysqladmin -u root -p shutdown



서비스 생성

ubuntu$ cd /lib/systemd/system/
ubuntu$ sudo vi mysqld.service

[Unit]
Description=Mysql Community Server
After=syslog.target
After=network.target

[Service]
Type=forking
LimitNOFILE=infinity
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop

[Install]
WantedBy=multi-user.target



등록 및 DB 시작

ubuntu$ sudo systemctl daemon-reload
ubuntu$ sudo systemctl enable mysqld.service
ubuntu$ sudo systemctl start mysqld

DB 가 기동 되었다면 로그 등으로 정상여부를 확인 하면 됩니다.
혹은 status 명령어를 통해 상태값을 확인 할 수 있습니다


ubuntu$ sudo mysql -u root -p
Enter password: [패스워드]


mysql> status;

Server version: 5.7.31 Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /tmp/mysql.sock



관련된 다른 글

 

 

 

 

 

     

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x