# MySQL 설치 (v.8.0.12)
- Yum을 이용한 설치 (Red-Hat)
1.
// MySQL YUM repository 설치 $ yum localinstall https://dev.mysql.com/get/mysql80-community-release-el6-1.noarch.rpm // MySQL 8.0.15 버전 설치 or 업데이트 $ yum install mysql-community-server // MySQL 5.7.24 버전 설치 or 업데이트 $ yum --disablerepo=mysql80-community --enablerepo=mysql57-community install mysql-community-server //MySQL 서버 시작과 부팅 시 자동 시작 설정 $ systemctl start mysqld $ systemctl enable mysqld // 생성된 root 임시 비밀번호 확인 $ grep 'A temporary password is generated for root@localhost' /var/log/mysqld.log | tail -1 // MySQL 보안 설치 $ /usr/bin/mysql_secure_installation // 보안 설치 시작 Enter password for user root: [임시 비밀번호] //임시 비밀번호를 입력한다. // MySQL 접속 $ mysql -u root -p ## OR ## $ mysql -h localhost -u root -p // 방화벽을 사용한다면, 방화벽 새 조건 추가 $ firewall-cmd --permanent --zone=public --add-service=mysql ## OR ## $ firewall-cmd --permanent --zone=public --add-port=3306/tcp |
2.
// 설치하고 싶은 버전의 mysql tar.gz 파일을 받아온다. wget http://www.mirrorservice.org/sites/ftp.mysql.com/Downloads/MySQL-8.0/mysql-8.0.15.tar.gz // 받아온 tar.gz 파일을 압축 해제한다. tar zxvf mysql-8.0.15.tar.gz // yum 명령어를 이용하여 localinstall yum localinstall mysql* |
- Complie 설치
// 설치할 버전의 mysql tar.gz 을 wget으로 다운받는다. (8.0.15 버전은 컴파일 설치 시 문제가 있는 듯함.) $ wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.12.tar.gz // gcc 5.3.0 설치 (mysql에서 gcc 버전을 일정 버전이상으로 맞춰줘야한다고 함.) $ wget https://ftp.gnu.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz // gcc-5.3.0 루트 디렉토리에서 패키지들 설치 $ ./contrib/download_prerequisites // 빌드전 configure 파일 만들기 (c,c++) $ ./configure --prefix=/usr/local/gcc-5.3.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib // make $ make error = configure: error: error verifying int64_t uses long long make[2]: *** [configure-stage1-gcc] Error 1 make[2]: Leaving directory `......` make[1]: *** [stage1-bubble] Error 2 make[1]: Leaving directory `......` make: *** [all] Error 2 if error then $ yum install -y gcc-c++ fi // make install $ make install // gcc 5.3.0 configure 할 떄 prefix를 /usr 위치로 잡아주면 안해줘도 될 것 같음. // $ ./configure --enable-languages=c,c++ --prefix=/usr --disable-bootstrap --disable-multilib $ vi /etc/profile // 맨 밑줄에 추가 export GCC=/usr/local/gcc-5.3.0 export C_INCLUDE_PATH=$GCC/include/c++/5.3.0/ export LD_LIBRARY_PATH=$GCC/lib64:$PPL/lib:$LD_LIBRARY_PATH export PATH=$GCC/bin:$PATH // 환경변수 적용 $ source /etc/profile // 버전 확인 $ gcc --version // cmake 버전 3.0 이상 설치 ?? (필수 인지 모르겠으나 필자 같은 경우 3.14.0 설치함.) // openssl yum으로 설치 $ yum install -y openssl* // cmake yum으로 설치 $ yum install -y cmake // MySQL 계정 생성 $ groupadd mysql $ useradd -M -g mysql mysql // 설치에 필요한 디렉토리 생성 $ mkdir -p /usr/local/mysql/data // wget으로 받은 mysql-8.0.12.tar.gz을 /var/lib에 압축을 푼다. $ tar -zxvf mysql-8.0.12.tar.gz -C /var/lib // 압축 풀린 디렉토리로 이동하여 컴파일 진행한다. // 8.0.15 버전에서는 cmake시 cmake를 설치 디렉토리에서 명령을 할 수 없게 해서 -DFORCE_INSOURCE_BUILD=1 옵션 추가해서 실행 /* yum install centos-release-scl yum install devtoolset-8* yum install gcc gcc-c++ libtermcap-devel gdbm-devel zlib* libxml* freetype* libpng* libjpeg* iconv flex gmp cmake ncurses-devel openssl* [mariadb 10.3↑]yum -y install cmake make gcc gcc-c++ ncurses-devel libevent openssl openssl-devel gnutls-devel libxml2 libxml2-devel bison wget */ $ cd /var/lib/mysql-8.0.12/ // cmake 명령어 실행 시 파일 또는 디렉터리를 찾을 수 없다는 에러가 날 때가 있음 cmake 뒤에 디렉터리 설정 하고 옵션 설정 후 재실행할 것! $ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DENABLED_LOCAL_INFILE=1 \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DSYSCONFDIR=/usr/local/mysql\ -DDEFAULT_CHARSET=utf8 \ -DWITH_SSL=system \ -DMYSQL_TCP_PORT=3306 \ -DWITH_EXTRA_CHARSETS=all \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DDOWNLOAD_BOOST=1 \ //boost는 파일을 따로 구할 필요 없음. cmake 시 다운로드 해옴. -DWITH_BOOST=/usr/local/mysql/boost $ make $ make install // 디렉토리의 소유권 바꿔주기 $ chown -R mysql:mysql /usr/local/mysql //환경설정 $ vi /usr/local/mysql/my.cnf [mysqld] bind-address=0.0.0.0 # bind할 주소 입력? port=3306 basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/usr/local/mysql/mysql.socket # pid-file=/usr/local/mysql/mysqld.pid # log_error=/usr/local/mysql/mysql_error.log # lc-messages-dir=/usr/local/mysql/share init_connect=SET collation_connection = utf8_general_ci init_connect=SET NAMES utf8 character-set-server=utf8 collation-server=utf8_general_ci # table_cache=1024 max_connections=2048 max_user_connections=500 max_connect_errors=10000 wait_timeout=300 # query_cache_type = 1 # query_cache_size = 128M # query_cache_limit = 5M slow_query_log long_query_time=3 max_allowed_packet=16M sort_buffer_size = 2M # skip-innodb skip-name-resolve # sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION [mysql] default-character-set=utf8 [client] default-character-set=utf8 socket=/usr/local/mysql/mysql.socket //mysql 구동 시 필요한 디렉토리 및 파일 생성 //root계정으로 $ mkdir /var/log/mariadb/ $ vi /var/log/mariadb/mariadb.log $ chown -R mysql:mysql /var/log/mariadb $ mkdir /var/run/mariadb $ chown -R mysql:mysql /var/run/mariadb //MySQL 데이터베이스 초기화 $ /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf --initialize --console --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql //root 암호 초기화 $ /usr/local/mysql/bin/mysqld_safe --skip-grant-tables & $ /usr/local/mysql/bin/mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 8.0.12 Source distribution Copyright (c) 2000, 2018, 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> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.03 sec) mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '설정할 비밀번호'; Query OK, 0 rows affected (0.08 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.01 sec) mysql> quit Bye // MySQL 서비스 등록 $ cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld // mysqld 수정 $ vi /etc/init.d/mysqld basedir=/usr/local/mysql datadir=/usr/local/mysql/data // mysqld 서비스 등록 $ systemctl enable mysqld |
# MySQL 데이터 디렉토리 구조 (Yum으로 설치 시)
my.cnf : 초기 환경 설정을 하는 파일
- ib_logfile (InnoDB Redo log)
+ 리두 로그는 하나의 데이터베이스에 전역적으로 1개만 존재함.
+ 리두 로그는 여러 개의 파일 그룹으로 구성되며, 최소 2개 이상으로 구성되며, 순환적으로 사용됨.
+ 리두 로그 파일의 헤더에는 마지막 체크 포인트 값이 관리됨.
+ 리두 로그는 페이지 형태로 관리되지 않고 레코드 단위로 관리됨.
+ 하나의 리두 로그 레코드는 512 바이트 단위로 할당되며, 이는 디스크의 섹터 크기와 동일한 크기임.
+ 작은 트랜잭션이 많은 경우(리두 로그정보가 512바이트보다 많이 작은 경우), 로그의 나머지 공간은 낭비됨.
+ 리두 로그는 변경 후의 데이터만 관리함 (변경 전의 데이터는 가지지 않음)
- ibdata (InnoDB data) : InnoDB 데이터 파일
- binlog
+ 업데이트 로그(5.0 이후 사용하지 않음) 를 대체함.
+ 데이터를 지금 또는 나중에 업데이트하는 모든 명령문이 기록됨. (event 형태로 저장)
+ 각 명령문이 데이터를 업데이트하는 소비 시간 정보도 가지고 있음.
+ 모든 명령문을 트랜젝션-세이프 (transaction-safe) 형태로 가지고 있음.
+ InnoDB에 영향을 미치는 명령문과 트랜젝션만이 InnoDB 크래시를 복구하는 시점에 바이너리 로그에서 제거됨.
+ 복구 시점에 MySQL 서버가 가지고 있어야 하는 바이너리 로그보다 짧은 것을 발견하게 되면 'binary log is shorter than its expected size.'
라는 에러 메시지를 출력한다. 이러한 일을 발생하지 않게 하기위해 디스크/파일시스템이 실제로 동기화를 하는 sync_binlog=1 설정을 한다?
- ib_buffer_pool (ver.5.7 이상)
+ 서버 재 시작할 때 시작하자마자 계속 운영된 것처럼 Buffer Pool에 페이지 정보가 저장되어 사용할 수 있게 하는 시간을 줄이기 위해 자주 사용되는 페이지 정보를 저장하도록 하기위한 파일
+ 저장해야 할 정도로 사용량이 많은 페이지를 가늠하는 기준을 innodb_buffer_pool_dump_at_shutdown 파라메터를 통해 설정이 가능함.
+ 실제 메모리 상태를 저장할 때는 메모리 내용을 전부 저장하는 것이 아닌, Tablespace ID와 Page ID만 저장되서 실제 저장 내용이 크지 않음.
+ Buffer Pool의 내용을 dump하고 load하는 작업은 모두 백그라운드 스레드로 진행되어 서비스에 영향을 주는 일은 거의 없음.
'MySQL' 카테고리의 다른 글
[MySQL] Sysbench & Percona 설치 및 사용 (yum install) (0) | 2020.05.24 |
---|---|
[MySQL] Create Function (0) | 2020.04.14 |
[MySQL] Replication Master To Slave (0) | 2019.07.02 |
[MySQL] Replication Master To Master (0) | 2019.07.02 |
[MySQL] MySQL 아키텍처 (0) | 2019.05.24 |