사용자 도구

사이트 도구


database:mysql:install

MySQL Install / 설치

  • MySQL 공식 제공 Repository를 통해 Linux에 설치하는 것이 가능하다.

Docker

local 환경에서 간단히 테스트 하려면 다음과 같이 docker로 설치해도 된다.

MySQL :: MySQL 5.7 Reference Manual :: 2.5.7.2 More Topics on Deploying MySQL Server with Docker

docker run --name mysql8 \
    -p 3306:3306 \
    -e LANG=C.UTF-8 \
    -e MYSQL_ROOT_PASSWORD=root \
    -e MYSQL_ROOT_HOST='%' \
    -e TZ='Asia/Seoul' \
    --restart=unless-stopped \
    -d \
    mysql/mysql-server:8.0 \
    --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci \
    --general-log=true --slow-query-log=true --log-output=TABLE \
    --default-authentication-plugin=mysql_native_password
  • --log-output=TABLE 는 테이블에 모든 로그를 남김. 실제 운영환경에서는 사용금지
  • --default-authentication-plugin=mysql_native_password : mysql 8 에서 암호화안된 접속 방식으로 비번 인증
  • -e LANG=C.UTF-8 가 있어야 한글 입력이 가능해짐.
# 아래 명령으로 접속 가능. 비밀번호 root
mysql --protocol=tcp -hlocalhost -P3306 -uroot -p
 
# UTF8MB4 로 커넥션 캐릭터셋 변경
mysql> set CHARACTER SET UTF8MB4;

기타 Docker Option

  • 아래 명령으로 가능한 옵션 확인 가능
    docker run -it --rm mysql/mysql-server:5.7 --verbose --help
  • 옵션 추가해서 실행
    # 쿼리 로그를 TABLE로 남김 mysql.general_log, mysql.slow_log
    --general-log=true --slow-query-log=true --log-output=TABLE --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

client 실행

docker exec -it mysql8 mysql -uroot -p

docker-compose

version: "3"

services:
  mysql57:
    container_name: mysql57
    image: mysql/mysql-server:5.7
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_ROOT_HOST=%
      - TZ=Asia/Seoul
    command: --sql_mode='' --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:
      - ./init-mysql.sql:/docker-entrypoint-initdb.d/0_init.sql
  • docker-compose.yml과 동일 디렉토리에 init-mysql.sql을 두고 거기에 초기화 SQL script 를 지정한다.
  • command 항목에는 mysqld를 넣어도 되긴하지만 넣지 말고, mysqld에 지정할 옵션들을 나열해주기만 해도 된다.
command: ["--sql_mode=''", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
  • MYSQL_DATABASE=newdb 로 기본으로 database 를 생성할 수는 있으나, 여러 database 를 생성할 수는 없는 것으로 보임.
  • MYSQL_USER, MYSQL_PASSWORD 로 일반 사용자 DB 계정 추가 가능
  • /docker-entrypoint-initdb.d 디렉토리 하위에 있는 *.sql,*.sh 등이 자동 실행된다.

Ubuntu MySQL 보안 설정

  • sudo mysql_secure_installation 사용하여 보안 관련 기본 설정을 해준다.

Ubuntu 16.04 / Xenial MySQL 5.7 root 계정

  • Ubuntu 16.04 / Xenial 의 MySQL 5.7 root 계정은 시스템 로그인 사용자 계정이 root 일 때만 접속 가능하게 되어 있다.
  • 이유는 mysql.user 테이블의 root 계정 설정의 plugin 컬럼 값이 auth_socket(혹은 unix_socket)으로 돼 있기 때문이다.
  • 아무 계정에서나 MySQL root에 접근하도록 하고자 한다면, 시스템 root 계정으로 변경하고, 기존 방식으로 설정을 변경해주면 된다.
sudo mysql -uroot -p
 
# MySQL client에서
# 일단 현재 상태 확인
SELECT * FROM mysql.user where user='root' \G
 
# 일반 계정형태로 변경
GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>'; # 원하는 비밀번호
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'auth_socket';

RPM/Fedora

Debian/Ubuntu

    • Mint Linux의 경우에는 가급적 Manual Repository 추가 방법 항목을 보고 작업할 것.
    • 그렇지 않으면 나중에 패키지 소스 경로가 존재하지 않는 곳으로 잡히게 된다.

Debin/Ubuntu Manual Install

  • Download GPG Key and add
    sudo apt-key add path/to/signature-file
  • /etc/apt/sources.listd.d/mysql.list 저장소 정보 파일 생성
    # deb http://repo.mysql.com/apt/{debian|ubuntu}/ {jessie|wheezy|precise|trusty|utopic|vivid} {mysql-5.6|mysql-5.7|workbench-6.2|workbench-6.3|utilities-1.4|connector-python-2.0}
    # 실제 저장소 정보는 버전업되면서 바뀌므로 링크의 문서에서 직접 확인할 것.
    deb http://repo.mysql.com/apt/ubuntu/ trusty mysql-5.6
    deb http://repo.mysql.com/apt/ubuntu/ trusty workbench-6.3
    deb http://repo.mysql.com/apt/ubuntu/ trusty mysql-utilities-1.5
    deb http://repo.mysql.com/apt/ubuntu/ trusty connector-python-2.1
  • 설치 대상 리포지토리는 http://repo.mysql.com/apt/ubuntu/dists/ 에 가서 배포판 버전을 선택하고 들어가 보면 목록을 확인할 수 있다.
  • update
    sudo apt-get update
    # 그 뒤 설치
    # 특히 mysql-server, mysql-client 가 가리키는 버전이 위의 저장소에서 지정한 버전으로 바뀌어 있게 된다.

MySQL Multiple Instance / 한 서버에 여러 MySQL 띄우기 참조

mysqld_multi를 이용한 다중 서버 띄우기

  • 직접 컴파일해서 설치했거나 할 경우 my.cnf 읽는 경로를 mysql --help로 확인해보고 올바른 설정 파일 경로에 설정해줘야 한다.
  • Ubuntu의 경우 /etc/mysql/my.cnf 혹은 그외의 기본 my.cnf[mysql숫자] 설정을 만들고 기본 [mysqld]에 대해 오버라이드할 설정을 생성한다.
    # 신규 MySQL 인스턴스에서 다르게 설정할 값들. 특히 datadir은 무조건 별도로 만들어야 한다.
    [mysqld3307]
    user		= mysql
    pid-file	= /var/run/mysqld/mysqld3307.pid
    socket		= /var/run/mysqld/mysqld3307.sock # socket 기반 접속 안할경우 불필요
    port		= 3307
    basedir		= /usr
    datadir		= /var/lib/mysql3307
    tmpdir		= /tmp
    log-error	= /var/log/mysql/error3307.log
  • 디렉토리등을 생성하고 권한을 지정한다.
    sudo mkdir /var/lib/mysql3307
     
    # chown의 경우 기본 mysql 과 같은 사용자로 지정했다.
    sudo chmod og-rwx /var/lib/mysql3307
    sudo chown mysql:mysql /var/lib/mysql3307
  • 데이터베이스 초기화 (안해도 됨)
    # 원칙적으로는 아래 작업을 해줘야 하지만 현재 Ubuntu mysqld_multi는 이를 자동으로 해줌.
    sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql3307 --basedir=/usr
  • 서버 다루기
    # Usage: mysqld_multi [OPTIONS] {start|reload|stop|report} [GNR,GNR,GNR...]
    # or     mysqld_multi [OPTIONS] {start|reload|stop|report} [GNR-GNR,GNR,GNR-GNR,...]
     
    sudo mysqld_multi start 3307
    sudo mysqld_multi stop 3307
  • client 접속
    # socket 접속
    mysql -uroot -S /var/run/mysqld/mysqld3307.sock -p
     
    # [client] 설정에 protocol = TCP 가 있으면 포트기반 접속
    mysql -uroot -P3307 -p
     
    # 새로운 root 비밀번호 지정
    /usr/bin/mysqladmin -uroot -P3307 password 'new-password'

자동시작

ubuntu의 경우 /etc/rc.local에 다음을 넣어둔다.

/usr/bin/mysqld_multi start 3307

Ubuntu apparmor로 인해 mysqld가 접근하는 데이터 경로를 변경할 수 없을 때

sudo touch /etc/apparmor.d/disable/usr.sbin.mysqld
sudo service apparmor reload
database/mysql/install.txt · 마지막으로 수정됨: 2024/02/07 13:45 저자 kwon37xi