centos 및 패키지 설치
클라우드 서버 구축
먼저 AWS 나 GCP 에 centos 7 64비트 서버를 구축한다. AWS EC2는 1년 동안 free tier 로 무료로 사용할 수 있으나 그 이후로는 약 20$ 정도의 비용이 든다. RDS까지 합하면 한달에 40$ 이상 비용이 청구가 된다.
만일, 상용 서버라면 AWS나 GCP를 사용하는게 바람직하지만 테스트 용도나 개발용도라면 저렴한 비용의 스마일서버같은 국내 클라우드서버를 사용하는게 더 좋을수 있다. AWS의 약 1/5의 비용으로 E2와 같은 사양의 클라우드 서버를 구매할 수 있다. 스마일 서버는 https://www.iwinv.kr/ 여기서 확인할 수 있다.
사전준비
root 패스워드를 변경하고 centos 계정 패드워드도 변경한다.
최초 설치 후 yum 패키지를 업데이트 한다.
#은 루프 계정으로 실행한다는 의미이다.
1 2 3 4 5 6 |
// root 패스워드 변경 # passwd // 패스워드 변경 # passwd centos // 패키지 업데이트 # yum update -y |
자바설치
openJDK보다 오러클 자바를 설치하도록 하자.
오러클사이트에 가서 64비트 리눅스 버전의 다운로드 링크를 복사후 아래처럼 설치한다.
다운로드를 받은후 ftp로 서버에 옮길 필요없이 바로 다운로드 받아서 설치할 수 있다. 아래는 하나의 예이다.
1 2 3 4 5 6 7 8 |
// wget 설치 # yum install -y wget // rpm 다운로드 # wget --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.rpm // 설치 # rpm -ivh jdk-8u181-linux-x64.rpm // 설치가 되었는지 확인 # java -version |
MariaDB 10.3 설치
먼저 아래와 같이 repo를 만든다.
1 2 3 4 5 6 7 8 9 10 |
# vi /etc/yum.repos.d/MariaDB.repo // 화일 생성후 아래 내용을 입력 # MariaDB 10.3 CentOS repository list - created 2019-01-13 00:47 UTC # http://downloads.mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.3/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 |
마리아 DB 10.3 저장소 repo를 등록하였으므로 이제 yum으로 설치할 수 있다.
1 2 3 4 5 6 7 |
# yum install MariaDB-server MariaDB-client // 부팅시 mariaDB 가 백그라운드로 실행되도록 설정 # systemctl enable mariadb // 시작 # systemctl start mariadb // 상태 확인 # systemctl status mariadb |
마리아 DB를 시작하였으면 mysql_secure_installation 명령어로 환경 설정을 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. Set root password? [Y/n] n ... skipping. By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] Y ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] Y ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] Y - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] Y ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB! |
/etc/my.cnf 화일을 열고 아래와 같이 한글 설정을 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
// my.cnf 화일을 열기 # vi /etc/my.cnf # This group is read both both by the client and the server # use it for options that affect everything # [client-server] # # include all files from the config directory # [mysql] default-character-set = utf8 [mysqld] skip-host-cache skip-name-resolve lower_case_table_names=1 character-set-client-handshake=FALSE init_connect="SET collation_connection = utf8_general_ci" init_connect="SET NAMES utf8" character-set-server = utf8 collation-server = utf8_general_ci max_connections = 500 thread_pool_max_threads = 300 innodb_file_per_table # innodb 테이블스페이스를 테이블별로 각각의 파일로 나누어 생성한다. innodb_buffer_pool_size = 2G # 버퍼풀의 메모리 사이즈. 권장은 메인메모리의 50~70% (전용서버일때) 디폴트는 8M innodb_flush_log_at_trx_commit = 1 innodb_adaptive_flushing = ON innodb_adaptive_hash_index = ON innodb_autoextend_increment = 8 # 테이블스페이스를 자동으로 늘려주는 단위, MB 단위이다. datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid !includedir /etc/my.cnf.d |
설정이 끝나면 DB를 restart 해야 바뀐 내용이 적용된다. 만일 DB를 이미 만들었다면 이미 만들어진 DB에는 한글 적용이 되지 않으므로 DB를 삭제하고 다시 만들어야 한다.
1 |
# systemctl restart mariadb |
DB 생성 및 user 생성 한다. 아래는 testdb 라는 DB를 생성하였고, tester 라는 유저명과 123456 이라는 패스워드를 부여하였고, tester 유저에게 testdb의 모든 권한을 할당하였다.
1 2 3 4 5 |
# mysql -u root -p MariaDB > create database testdb; MariaDB > create user 'tester'@'localhost' identified by '123456'; MariaDB > grant all privileges on testdb.* to tester identified by '123456'; |
DB 백업 스크립트
mysql dump 명령어로 -A 옵션을 사용하여 모든 데이터베이스를 backup_2018xxxx.sql 형식을 저장한다.
find 명령어로 3일 이 지난 sql은 삭제한다.
crontab 명령을 이용해서 매일 새벽 4시에 실행한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# cd /root/db_backup # vi db_backup.sh #!/bin/bash DATE=$(date +%Y%m%d) BACKUP_DIR=/root/db_backup/ mysqldump -u root -p123456 -A > $BACKUP_DIR"backup_"$DATE.sql find $BACKUP_DIR -ctime +3 -exec rm -f {} \; # chmod 755 db_backup.sh # crontab -e 00 04 * * * /root/db_backup/db_backup.sh |
만일 DB에 문제가 있어서 백업된 DB에서 복구하고자 한다면 아래 명령을 사용하면 된다.
1 2 |
1 # mysql -u root -p < backup_20180101.sql |
방화벽 설정
firewalld 를 사용하는 방법
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# yum install firewalld # systemctl start firewalld # systemctl enable firewalld // 80, 443, 3306, 8080 등 오픈이 필요한 포트에 대해서 방화벽을 설정 # firewall-cmd --permanent --zone=public --add-port=80/tcp # firewall-cmd --permanent --zone=public --add-port=443/tcp # firewall-cmd --permanent --zone=public --add-port=8080/tcp # firewall-cmd --permanent --zone=public --add-port=3306/tcp # firewall-cmd --reload # firewall-cmd --list-all --zone=public |
iptables로 방화벽 설정하는 방법
1 2 3 4 5 6 7 8 9 10 11 |
# yum install iptables-services # systemctl enable iptables # systemctl start iptables # systemctl enable ip6tables # systemctl start ip6tables // 방화벽 확인하기 # iptables -nL // mysql 3306 추가하기 # iptables -A INPUT -p tcp --dport 3306 -j ACCEPT |
이렇게 설정한 정보들은 메모리상에 등록되기 때문에 리부팅시에 설정 정보가 없어진다. 리부팅 후에도 설정정보를 유지하기 위해서는 아래와 같이 저장하여야 한다.
1 |
# service iptables save |