티스토리 뷰

아래와 같이 설치 해보시면 됩니다.

 

▶필요사항
OS : Redhat 계열 Linux 64bit
메모리 : 4GB 이상
CPU : 4core 이상
디스크 : 필수 2개 파티션(엔진/데이터 영역)
엔진영역(/mariadb 또는 /mysql) : 5GB
데이터영역(/data) : 산정된 예상 데이터량의 약 150% 필요

▶설치파일 준비

버전 선택은 기본적으로 아래와 같은 룰을 적용
*메이저 버전은 가장 최신 버전의 한 단계 전 버전으로 선택

  - 다운로드
*마이너 버전은 가장 최신 버전으로 선택
설치 시점에 가장 최신 버전의 percona tool-kit 과 percona xtrabackup도 함께 설치한다

 

▶MySQL 엔진 설치
1. mysql 사용자 생성 및 비밀번호 지정
useradd mysql -d /mysql
passwd mysql

2. 필수 디렉토리 생성 및 정리
mkdir -p /mysql/sktest
mkdir -p /mysql/sktest/script
mkdir -p /data/sktest
mkdir -p /data/sktest/datadir
mkdir -p /data/sktest/tmpdir
mkdir -p /data/sktest/logdir
mkdir -p /data/sktest/logdir/old_err
mkdir -p /data/sktest/logdir/old_slow
mkdir -p /data/sktest/binlog
mkdir -p /data/sktest/relaylog
mkdir -p /data/sktest/binary_backup
chown -R mysql:mysql /mysql
chown -R mysql:mysql /data
rm -rf /mysql/lost+found
rm -rf /data/lost+found

3. mysql 설치 파일 준비
mv /tmp/mysql*.tar.gz /mysql/sktest
chown mysql:mysql -R /mysql/sktest

4. mysql 계정으로 변경
su - mysql
export DBNM=sktest
cd sktest

5. 설치 파일 압축풀기
export MY_VER=`find -name 'mysql*.tar.gz' | tr '/' '\n' | tail -1 | sed 's/.tar.gz//g'`
export XBACK_VER=`find -name '*xtrabackup*.tar.gz' | tr '/' '\n' | tail -1 | sed 's/.tar.gz//g'`
export PTOOL_VER=`find $FILELOC -name '*toolkit*.tar.gz' | tr '/' '\n' | tail -1 | sed 's/.tar.gz//g'`

tar xvfz ${MY_VER}.tar.gz
tar xvfz ${XBACK_VER}.tar.gz
tar xvfz ${PTOOL_VER}.tar.gz

6. 설치 파일 백업
mv *.tar.gz /data/sktest/binary_backup/backup

7. 표준 디렉토리 명칭으로 심볼릭 링크 생성
ln -s ${MY_VER} instance
ln -s ${XBACK_VER} xtrabackup
ln -s ${PTOOL_VER} toolkit

8. /data/sktest/my.cnf 설정 편집
vi /data/sktest/my.cnf
[mysqld]

 

my.cnf 설정 방법

port = 3306
socket = /tmp/mysql.sock

user = mysql
server-id = 1

basedir = /mysql/sktest/instance
datadir = /data/sktest/datadir
tmpdir = /data/sktest/tmpdir

character-set-server = utf8
collation-server = utf8_bin
default_storage_engine = InnoDB

#autocommit = 0
#skip-name-resolve
#skip-external-locking

event-scheduler = 0
sysdate-is-now

performance_schema = on

back_log = 100
max_connections = 500
max_connect_errors = 100
thread_cache_size = 10
table_open_cache = 2048
wait_timeout = 86400

max_allowed_packet = 32M
max_heap_table_size = 128M
tmp_table_size = 128M

sort_buffer_size = 256K
join_buffer_size = 256K
read_buffer_size = 256K
read_rnd_buffer_size = 256K

query_cache_type = 0
query_cache_size = 0
query_cache_limit = 0

transaction_isolation = READ-COMMITTED

#plugin-load = auth_socket=auth_scket.so

#thread_concurrency = 6
thread_stack = 240K

### InnoDB Specific options #
innodb_data_file_path = ibdata1:10M:autoextend
innodb_file_per_table = 1

innodb_buffer_pool_size = 1G
innodb_log_buffer_size = 32M
innodb_log_file_size = 32M
innodb_log_files_in_group = 4
innodb_open_files = 1024
innodb_autoextend_increment = 256

innodb_fast_shutdown = 1
#innodb_use_sys_malloc = 32M
innodb_write_io_threads = 8
innodb_read_io_threads = 8

innodb_flush_log_at_trx_commit = 2
innodb_flush_method=O_DIRECT

innodb_io_capacity = 1000
innodb_concurrency_tickets = 24
innodb_thread_concurrency = 16
innodb_commit_concurrency = 0

innodb_change_buffering = 'all'
#innodb_additional_mem_pool_size = 16M

innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120

### MyISAM Specific options ###
key_buffer_size = 64M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 4G
myisam_repair_threads = 1
#myisam_recover=BACKUP
ft_min_word_len = 4

### Loging options ###
log-bin=/data/sktest/binlog/bin.log
binlog_cache_size = 2M
max_binlog_size = 512M
expire_logs_days = 7
general_log = 0
slow_query_log = 1
long_query_time = 2
slow_query_log_file = /data/sktest/logdir/slow.log
log_error = /data/sktest/logdir/error.log
general_log_file = /data/sktest/logdir/general.log



▶참고사항

sktest : 직접 DB명으로 고쳐서 사용
user : MySQL을 기동할 OS계정명. mysql을 사용하지 않는다면 바꿀것
server-id : 리플리케이션 슬레이브로 사용될 경우 1보다 큰 숫자를 차례로 사용(master-slave  구조에서 동일한 server-id 사용하면 안됨)
plugin-load : MySQL을 사용할 경우는 auth_socket=auto_socket.so 으로 변경
innodb_buffer_pool_size : 물리 메모리의 50% 정도로 설정
innodb_log_buffer_size, innodb_log_file_size : 물리 메모리의 1/64 정도로 설정
skip_log_bin : 백업 설정이 필요하거나, 리플리케이션 마스터로 사용될 경우 log_bin = /data/sktest/binlog/binlog 로 변경

위 설정 사항들은 매우 일반적인 값들로 채워져 있으니, 환경에 맞게 수정해서 사용!



▶mysql 계정의 .bash_profile 수정

echo '' >> ~/.bash_profile
echo export DBNM=sktest >> ~/.bash_profile
echo export PATH=/mysql/sktest/instance/bin:/mysql/sktest/xtrabackup/bin:/mysql/sktest/toolkit/bin:'$PATH' >> ~/.bash_profile
echo alias cdmy=“’cd /mysql/sktest/instance’” >> ~/.bash_profile
echo alias cdsp=“’cd /mysql/sktest/scripts’” >> ~/.bash_profile
echo alias cddt=“’cd /data/sktest/datadir’” >> ~/.bash_profile
echo alias cdlog=“’cd /data/sktest/logdir’” >> ~/.bash_profile
echo alias showerr=“’cat /data/sktest/logdir/error.log’” >> ~/.bash_profile

source ~/.bash_profile



▶데이터베이스 초기화

cdmy
[5.6 이하]
./scripts/mysql_install_db --defailts-file=/data/sktest/my.cnf
[5.7 이상]
./mysqld --initialize --user=mysql --basedir=/mysql/sktest/instance --datadir=/data/sktest/datadir/



▶초기 설정 및 운영 스크립트 추가
1.데이터베이스 기동 스크립트 작성
cat > /mysql/sktest/scripts/startup.sh 
<#!/bin/sh
source ~mysql/.bash_profile
cd /mysql/sktest/instance
./bin/mysqld_safe --defaults-file=/data/sktest/my.cnf &
EOF

2.데이터베이스 중단 스크립트 작성
vi /mysql/sktest/scripts/shutdown.sh

 <#!/bin/sh
source ~mysql/.bash_profile
cd /mysql/sktest/instance
./bin/mysqladmin shutdown -uroot -p
EOF

3.데이터베이스 접속 스크립트 작성
cat > /mysql/sktest/scripts/conn.sh <
#!/bin/sh
source ~mysql/.bash_profile
cd /mysql/sktest/instance
./bin/mysql -h localhost -uroot -p
EOF

4.로그파일 보관주기 관리용 스크립트 작성
cat > /mysql/sktest/scripts/logrotate.sh <
#!/bin/sh
source ~mysql/.bash_profile
cd /mysql/sktest/instance

DATE=`date -d '-1 days' +'%Y%m%d'`

mv /data/sktest/logdir/error.log /data/sktest/logdir/oldlog/old_error/error_${DATE}.log
mv /data/sktest/logdir/slow.log /data/sktest/logdir/oldlog/old_slow/slow_${DATE}.log

./bin/mysql -h localhost -ulogrotate -e "flush logs"

find  /data/sktest/logdir/oldlog/old_error -name '*.log' -ctime +180 -exec rm -f {} ';'
find  /data/sktest/logdir/oldlog/old_slow -name '*.log' -ctime +180 -exec rm -f {} ';'
EOF

5.데이터베이스 기동 & 중단 & 재기동(DB 구동 테스트 겸 스크립트 테스트)
sh startup.sh
ps -ef | grep mysqld
sh shutdown.sh
Enter password: (초기엔 암호 없음-그냥 엔터, 5.7 이상에서는 설치시 errorlog에서 암호 확인)
ps -ef | grep mysqld
sh startup.sh

6.사용자 스키마, 권한 초기 설정
./bin/mysql -h localhost -uroot -p << EOF
drop database test;
delete from mysql.user where host not in ('localhost');
delete from mysql.user where user not in ('root');
create database sktest;
create user 'sktest'@'localhost';
grant all privileges on sktest.* to 'sktest'@'localhost';
update mysql.user set password=password('passwd') where user='sktest';
create user 'mysql'@'localhost' identified with auth_socket;
grant all privileges on *.* to 'mysql'@'localhost';
flush privileges;
commit;
exit
EOF

 

alter user 'root'@'localhost' identified by '1q2w3e4r%T';

 

7.접속 테스트
- 위에 설정한 계정 정보로 로그인 잘 되는지 확인.
<<OS계정 mysql에서 DB계정 mysql로 암호 없이 접속>>
./bin/mysql -h localhost -umysql
exit

<>
./bin/mysql -h localhost -uroot -p

<>
select user,host,password from mysql.user
show databases;
exit

8.crontab 등록 및 스크립트 테스트
<<스크립트 잘 수행되는지 확인>>
/bin/sh /mysql/sktest/scripts/logrotate.sh
ls /data/sktest/logdir/*

<>
$ crontab -e
1 0 * * * /bin/sh /mysql/sktest/scripts/logrotate.sh

댓글