내용으로 건너뛰기
권남
사용자 도구
로그인
사이트 도구
검색
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
추적:
database:mysql:install
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== MySQL Install / 설치 ====== * MySQL 공식 제공 Repository를 통해 Linux에 설치하는 것이 가능하다. * [[https://dev.mysql.com/downloads/repo/|MySQL Repositories]] ===== Docker ===== local 환경에서 간단히 테스트 하려면 다음과 같이 docker로 설치해도 된다. * [[https://hub.docker.com/_/mysql/|Mysql Docker 기본 제공]] - 2021현재 ''amd64''만 제공함. * [[https://hub.docker.com/r/mysql/mysql-server/| MySql Server Docker Oracle 제공]] - 8.x 부터 ''arm64/v8'' 함께 제공 * [[database:mariadb|MariaDB]] [[https://hub.docker.com/_/mariadb|mariadb docker Image]] 는 ''amd64'', ''arm64/v8'' 모두 제공. 호환성 목록을 보고서 mariadb 이미지를 대신 사용해도 됨. [[https://dev.mysql.com/doc/refman/5.7/en/docker-mysql-more-topics.html|MySQL :: MySQL 5.7 Reference Manual :: 2.5.7.2 More Topics on Deploying MySQL Server with Docker]] <code sh> 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 </code> * ''%%--log-output=TABLE%%'' 는 테이블에 모든 로그를 남김. 실제 운영환경에서는 사용금지 * ''%%--default-authentication-plugin=mysql_native_password%%'' : mysql 8 에서 암호화안된 접속 방식으로 비번 인증 * ''%%-e LANG=C.UTF-8%%'' 가 있어야 한글 입력이 가능해짐. <code sh> # 아래 명령으로 접속 가능. 비밀번호 root mysql --protocol=tcp -hlocalhost -P3306 -uroot -p # UTF8MB4 로 커넥션 캐릭터셋 변경 mysql> set CHARACTER SET UTF8MB4; </code> ==== 기타 Docker Option ==== * 아래 명령으로 가능한 옵션 확인 가능<code sh> docker run -it --rm mysql/mysql-server:5.7 --verbose --help </code> * 옵션 추가해서 실행<code sh> # 쿼리 로그를 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 </code> ==== client 실행 ==== <code sh> docker exec -it mysql8 mysql -uroot -p </code> ==== docker-compose ==== <code> 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 </code> * ''docker-compose.yml''과 동일 디렉토리에 ''init-mysql.sql''을 두고 거기에 초기화 SQL script 를 지정한다. * ''command'' 항목에는 ''mysqld''를 넣어도 되긴하지만 넣지 말고, ''mysqld''에 지정할 옵션들을 나열해주기만 해도 된다. <code> command: ["--sql_mode=''", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"] </code> * ''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'' 일 때만 접속 가능하게 되어 있다. * [[https://stackoverflow.com/questions/28068155/access-denied-for-user-rootlocalhost-using-password-yes-after-new-instal/35748657#35748657|mysql - Access denied for user 'root'@'localhost' (using password: YES) after new installation on Ubuntu]] 참조. * 이유는 ''mysql.user'' 테이블의 ''root'' 계정 설정의 ''plugin'' 컬럼 값이 ''auth_socket''(혹은 ''unix_socket'')으로 돼 있기 때문이다. * 아무 계정에서나 MySQL root에 접근하도록 하고자 한다면, 시스템 ''root'' 계정으로 변경하고, 기존 방식으로 설정을 변경해주면 된다. <code sh> 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'; </code> ===== RPM/Fedora ===== * [[https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/|MySQL Yum Repo quick guide]] Fedora/CentOS ===== Debian/Ubuntu ===== * [[https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/|MySQL APT Repo quick guide]] Ubuntu/Debian * [[linux:mint|Mint Linux]]의 경우에는 가급적 Manual Repository 추가 방법 항목을 보고 작업할 것. * 그렇지 않으면 나중에 패키지 소스 경로가 존재하지 않는 곳으로 잡히게 된다. ===== Debin/Ubuntu Manual Install ===== * [[http://dev.mysql.com/doc/refman/5.7/en/checking-gpg-signature.html|Download GPG Key]] and add<code sh> sudo apt-key add path/to/signature-file </code> * ''/etc/apt/sources.listd.d/mysql.list'' 저장소 정보 파일 생성<code> # 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 </code> * 설치 대상 리포지토리는 http://repo.mysql.com/apt/ubuntu/dists/ 에 가서 배포판 버전을 선택하고 들어가 보면 목록을 확인할 수 있다. * update<code sh> sudo apt-get update # 그 뒤 설치 # 특히 mysql-server, mysql-client 가 가리키는 버전이 위의 저장소에서 지정한 버전으로 바뀌어 있게 된다. </code> ===== MySQL Multiple Instance / 한 서버에 여러 MySQL 띄우기 참조 ===== * [[https://naveensnayak.wordpress.com/2013/11/10/mysql-multiple-instances-on-ubuntu/|MySQL multiple instances on Ubuntu]] * [[http://www.ducea.com/2009/01/19/running-multiple-instances-of-mysql-on-the-same-machine/|Running multiple instances of MySQL on the same machine]] ===== mysqld_multi를 이용한 다중 서버 띄우기 ===== * [[http://dev.mysql.com/doc/refman/5.6/en/mysqld-multi.html|mysqld_multi — Manage Multiple MySQL Servers]] * 직접 컴파일해서 설치했거나 할 경우 ''my.cnf'' 읽는 경로를 ''mysql %%--%%help''로 확인해보고 올바른 설정 파일 경로에 설정해줘야 한다. * Ubuntu의 경우 ''/etc/mysql/my.cnf'' 혹은 그외의 기본 ''my.cnf''에 ''[mysql숫자]'' 설정을 만들고 기본 ''[mysqld]''에 대해 오버라이드할 설정을 생성한다.<code> # 신규 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 </code> * 디렉토리등을 생성하고 권한을 지정한다.<code sh> sudo mkdir /var/lib/mysql3307 # chown의 경우 기본 mysql 과 같은 사용자로 지정했다. sudo chmod og-rwx /var/lib/mysql3307 sudo chown mysql:mysql /var/lib/mysql3307 </code> * 데이터베이스 초기화 (안해도 됨)<code sh> # 원칙적으로는 아래 작업을 해줘야 하지만 현재 Ubuntu mysqld_multi는 이를 자동으로 해줌. sudo mysql_install_db --user=mysql --datadir=/var/lib/mysql3307 --basedir=/usr </code> * 서버 다루기<code sh> # 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 </code> * client 접속<code sh> # 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' </code> ===== 자동시작 ===== ubuntu의 경우 ''/etc/rc.local''에 다음을 넣어둔다. <code sh> /usr/bin/mysqld_multi start 3307 </code> ===== Ubuntu apparmor로 인해 mysqld가 접근하는 데이터 경로를 변경할 수 없을 때 ===== <code sh> sudo touch /etc/apparmor.d/disable/usr.sbin.mysqld sudo service apparmor reload </code>
database/mysql/install.txt
· 마지막으로 수정됨: 2024/02/07 13:45 저자
kwon37xi
문서 도구
문서 보기
이전 판
역링크
맨 위로