환경

OS : CentOS-7

전통적인 iptables 를 기반으로 하지만..
firewalld 라는 패키지로 관리함…
그냥 iptables 를 사용하던가.. firewall-cmd 를 사용하던가.. 편한대로 사용하면 됨

 

설정파일

설정 경로 : /etc/firewalld

firewall-cmd를 이용해서 일반적인 설정을 하게 되면
/etc/firewalld/zones/public.xml 에 저장됨…

설치후 별다른 추가 설정을 하지 않았다면

firewall-cmd –get-default-zone

명령어를 실행 한 결과는 ”public”으로 출력될 것이다.

 

기본 사용법

환경 : 터미널 기반
명령어 : firewall-cmd

 

조건 : 20,22,80포트(TCP)를 허용

룰 추가

firewall-cmd --add-port=21/tcp
firewall-cmd --add-port=22/tcp
firewall-cmd --add-port=80/tcp

룰 삭제

firewall-cmd --remove-port=21/tcp
firewall-cmd --remove-port=22/tcp
firewall-cmd --remove-port=80/tcp

 

조건 : 8000 ~ 9000 까지의 포트(TCP)를 허용

firewall-cmd --add-port=8000-9000/tcp
firewall-cmd --remove-port=8000-9000/tcp

 

조건 : 192.168.0.0/255.255.255.0 대역을 허용

firewall-cmd --add-source=192.168.0.0/24
firewall-cmd --remove-source=192.168.0.0/24

 

조건 : 192.168.3.100 아이피를 허용

firewall-cmd --add-source=192.168.3.100
firewall-cmd --remove-source=192.168.3.100

 

조건 : 192.168.5.100 아이피를 차단

firewall-cmd --add-rich-rule='rule family="ipv4" source address=192.168.5.100 reject'
firewall-cmd --remove-rich-rule='rule family="ipv4" source address=192.168.5.100 reject'

firewall-cmd --add-rich-rule='rule family="ipv4" source address=192.168.5.100 drop'
firewall-cmd --remove-rich-rule='rule family="ipv4" source address=192.168.5.100 drop'

두개의 구문은 동일한듯 보이지만.. 약간의 차이가 있다.

  • reject : 차단을 하긴 하되… ”너 차단 되었어” 라는 응답을 해준다.
  • drop : 그냥 차단….

실제로 사용시에는 drop 을 사용하면 되겠다…

 

조건 : 192.168.10.170 아이피에 대해 80번 포트를 허용

firewall-cmd --add-rich-rule='rule family="ipv4" source address=192.168.10.170 port port="80" protocol="tcp" accept'
firewall-cmd --remove-rich-rule='rule family="ipv4" source address=192.168.10.170 port port="80" protocol="tcp" accept'

 

하지만.. 본 내용은… running 상태에서만 유효할 뿐..
서비스를 죽이거나 리부팅을 했을 경우에는 설정이 모두 날아감..

실제로 public.xml 파일을 확인해도 설정했던 내용들을 찾을 수 없다.

 

설정파일에 적용 하기

firewall-cmd –permanent
형태로 옵션을 줘야 한다.

firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8000-9000/tcp
firewall-cmd --permanent --add-source=192.168.0.0/24
firewall-cmd --permanent --add-source=192.168.3.100
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=192.168.5.100 reject'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=192.168.5.100 drop'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address=192.168.10.170 port port="80" protocol="tcp" accept'

그리고 나서

firewall-cmd –reload

명령을 이용해 설정파일의 내용을 반영….

 

터미널에서 상태 확인

# firewall-cmd --list-all
public (default)
interfaces:
sources: 192.168.3.100 192.168.0.0/24
services: dhcpv6-client ssh
ports: 21/tcp 80/tcp 8000-9000/tcp 22/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.5.100" reject
rule family="ipv4" source address="192.168.5.100" drop
rule family="ipv4" source address="192.168.10.170" port port="80" protocol="tcp" accept

 

public.xml 내용

<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description></description>
<source address="192.168.0.0/24"/>
<source address="192.168.3.100"/>
<service name="dhcpv6-client"/>
<service name="ssh"/>
<port protocol="tcp" port="21"/>
<port protocol="tcp" port="80"/>
<port protocol="tcp" port="8000-9000"/>
<port protocol="tcp" port="22"/>
<rule family="ipv4">
<source address="192.168.5.100"/>
<reject/>
</rule>
<rule family="ipv4">
<source address="192.168.5.100"/>
<drop/>
</rule>
<rule family="ipv4">
<source address="192.168.10.170"/>
<port protocol="tcp" port="80"/>
<accept/>
</rule>
</zone>


블로그 이미지

칩사마코더

,

이 함수를 사용하여

 

 

원래 값:

https://naver.com/data/file/ma1/thumb-14826859387217_600x8333.jpg

 

변경원하는값:

https://naver.com/data/file/ma1/14826859387217.jpg 


UPDATE g5_write_web_2

SET wr_content=REGEXP_REPLACE(wr_content, '\_[[:digit:]]+\x[[:digit:]]+\.', '.')

WHERE wr_id='6211';



'MYSQL' 카테고리의 다른 글

(MariaDB) DB 백업 / 복구하기  (0) 2017.05.04
시스템 파라미터(스토리지 엔진)  (0) 2017.04.08
블로그 이미지

칩사마코더

,

윈도우에서 MySQL(MariaDB) DB 백업 / 복구하기


백업하기

Mysql이 설치된 root 폴더 > bin 폴더 에서 다음과 같이 입력한다.

mysqldump -u root -p databasename > savefile.sql

- 엔터를 치면 root계정에 대한 비밀번호를 입력하라는 창이 뜨니 비밀번호를 입력함.

- root에 적힌 부분은 계정명. 루트계정이 아니더라도 해당DB에 쓰기권한이 있는 계정으로 복구 가능.

- rootpassword는 본인이 설정한 비밀번호로.

- 백업할 데이터베이스 이름을 databasename에 입력.

- 저장할 파일명을 savefile.sql에 입력. (절대경로/파일명.sql형태로 해도 됨)

 

복구하기

저장된 파일(savedfile.sql이라고 가정)을 mysql.exe 파일이 있는 폴더로 옮긴 뒤 다음과 같이 입력한다.

mysql -u root -p databasename < savedfile.sql

 

위에서 설명한대로 작업 진행하면 해당 데이터베이스에 저장된 내용이 반영된다.

'MYSQL' 카테고리의 다른 글

sql 정규식으로 치환하기  (0) 2017.05.10
시스템 파라미터(스토리지 엔진)  (0) 2017.04.08
블로그 이미지

칩사마코더

,

간혹 fstab에 잘못된 Block Device 정보가 등록 되거나, 디스크의 Label 또는 정보가 변경 되어 정상적인 부팅이 되지 않고

Repair Filesystem 모드로 들어가는 경우가 생길 때가 있습니다.

 

Repair Filesystem 상태일 때는 / 파티션이 Read-only 상태로 마운트가 되기 때문에 /etc/fstab 파일의 수정이 불가능한데,

아래와 같이 Read-Write 모드로 remount 해주면 수정이 가능합니다. (싱글모드로 부팅할 경우에도 Read-Only 상태 입니다.)

 

# mount -o remount,rw /

블로그 이미지

칩사마코더

,

ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

블로그 이미지

칩사마코더

,

리눅스 디스크 추가 후 마운트 하기



서버는 코노하 VPS 에서 용량은 200기가를 추가해서 테스트 하였습니다.


마운트 방법은 파티션 라벨로 하는 방법과 UUID 로 마운트 하는 방법에 대해서 알아봅니다.


[root@conoha-jp ~]# fdisk -l

WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.


Disk /dev/vda: 21.5 GB, 21474836480 bytes, 41943040 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: gpt



#         Start          End    Size  Type            Name

 1         2048         6143      2M  BIOS boot parti biosboot

 2         6144     41940991     20G  EFI System      rootfs


Disk /dev/vdb: 214.7 GB, 214748364800 bytes, 419430400 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes


[root@conoha-jp ~]# fdisk -l /dev/vdb


Disk /dev/vdb: 214.7 GB, 214748364800 bytes, 419430400 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes


fdisk 명령어로 추가된 디스크를 확인합니다.



이번에는 fdisk 로 파티션을 잡으면 됩니다.


[root@conoha-jp ~]# fdisk /dev/vdb

Welcome to fdisk (util-linux 2.23.2).


Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.


Device does not contain a recognized partition table

Building a new DOS disklabel with disk identifier 0xbe02cf7a.


Command (m for help): n

Partition type:

   p   primary (0 primary, 0 extended, 4 free)

   e   extended

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-419430399, default 2048):

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399):

Using default value 419430399

Partition 1 of type Linux and of size 200 GiB is set


Command (m for help): w

The partition table has been altered!


Calling ioctl() to re-read partition table.

Syncing disks.


굵은 글씨를 따라하면 됩니다. 용량은 엔터, 엔터 치시면 됩니다.


파티션을 잡았으니 이번엔 ext4 로 포맷을 합니다.


[root@conoha-jp ~]# mkfs.ext4 /dev/vdb1

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

13107200 inodes, 52428544 blocks

2621427 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=2199912448

1600 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks:

        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

        4096000, 7962624, 11239424, 20480000, 23887872


Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done


포맷이 완료되었으면 마운트를 해야합니다.


그냥 마운트를 한다면 재부팅시에 다시 마운트를 수동으로 해야 하므로 자동으로 마운트가 되도록 /etc/fstab 을 수정하도록 합니다.


/etc/fstab 에 아래 내용을 추가하여 줍니다.


방법1 ( 파티션 라벨로 마운트 )

/dev/vdb1 /home ext4 defaults 1 1


방법2 ( 파티션 UUID로 마운트 )

[root@conoha-jp ~]# blkid /dev/vdb1

/dev/vdb1: UUID="939dd5c4-7e89-4f4a-aab6-098e3acaac30" TYPE="ext4"


UUID=939dd5c4-7e89-4f4a-aab6-098e3acaac30 /home ext4 defaults 1 1



수동으로 마운트를 하고 마운트가 잘 되었는지 확인하는 방법은 아래와 같습니다.

[root@conoha-jp ~]# mount -t ext4 /dev/vdb1 /home

[root@conoha-jp ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/vda2        20G  3.4G   16G  19% /

devtmpfs        236M     0  236M   0% /dev

tmpfs           245M     0  245M   0% /dev/shm

tmpfs           245M  8.4M  237M   4% /run

tmpfs           245M     0  245M   0% /sys/fs/cgroup

tmpfs            49M     0   49M   0% /run/user/0

/dev/vdb1       197G   61M  187G   1% /home

마운트가 잘 되었군요.


재부팅 후에도 자동으로 마운트가 되는지 확인을 하면 됩니다.



출처: http://blog.ivps.kr/153 [iVPS 가상서버호스팅]

블로그 이미지

칩사마코더

,

[ Linux ] 아파치 동시접속자수 확인

#netstat -l 또는 netstat -nap | grep LISTEN (LISTEN 되는 모든 포트)
#netstat -nap | grep ESTABLISHED | wc -l ( 모든 서비스 동시 접속자 수)
#netstat -nap | grep :80 | grep ESTABLISHED | wc -l( 웹 동시 접속자 수)
#netstat -n|grep -F :80|egrep '(ESTAB|SYN)'|awk '{print $5}'|sed 's/:[0-9]*//'|sort -u|wc -l
  (웹서버 커넥션수 체크)


블로그 이미지

칩사마코더

,

시스템 파라미터(스토리지 엔진)

innodb_purge_threads=1 ~ 32(기본 값: 1)
innoDB엔진에 생성된 테이블은 오라클과 비슷하게 undo 세그먼트를 사용한다. 버퍼 캐시의 변경된 내용은 주기적으로 디스크로 써야 하는데, 오라클의 경우 1개 이상의 DBWn라는 대몬이 전담하여 이를 처리하고 있는 것처럼 mariaDB도 디스크로 내려쓰는 역할을 전담하는 thread의 개수를 지정할 수 있다.


UNDO

innodb_undo_directory=경로(기본 값: .)
기본적으로 mariaDB에서 undo 영역은 시스템 테이블 스페이스의 일부 영역을 사용하고 있지만 별도의 테이블 스페이스 공간을 만들어 사용할 수도 있다. 점(.)은 버전 5.5 이전에서와 같이 시스템 테이블스페이스의 일부 영역을 사용하겠다는 의미이고, 다른 경로를 입력하면 undo 영역으로 사용할 테이블 스페이스 공간의 위치를 설정하게 된다. 보통 undo영역은 SSD와 같이 빠른 저장장치가 존재하는 위치로 지정하면 좋다.

innodb_undo_tablespaces=0 ~ 126(기본 값: 0)
하나의 undo 테이블스페이스 파일로 운영하면 경합이 발생할 수 있기 때문에 파일을 분할하여 부하가 분산될 수 있도록 한다. 이 파라미터로 지정한 값 만큼 innodb_undo_directory로 지정한 경로에 undoN (N은 숫자)로 undo 용 파일이 생성된다.

innodb_undo_logs=0 ~ 128(기본 값: 128)
하나의 언두 세그먼트에는 다수의 트랜잭션이 저장될 수 있다. innoDB에서는 하나의 언두 세그먼트당 최대 1023개의 트랜잭션이 저장될 수 있다. 이 파라미터는 세그먼트의 개수를 지정하는 것으로 최대innodb_undo_logs * 1023 개의 트랜잭션이 실행될 수 있는 것이다. 이 값은 늘리 수만 있고 줄일 수는 없으므로 처음부터 너무 큰 값을 주지 않도록 한다.


Buffer Pool

 innodb_buffer_pool_populate=ON or OFF (기본 값: OFF)
리눅스에서는 사용자가 지정한 버퍼 풀 사이즈를 처음부터 모두 할당하지 않는다. 버퍼 풀 사용량이 늘어나면서 차츰 늘려주는 방식인데, 이로 인해 실제 메모리가 얼마나 할당되었는지 모니터링 하기 쉽지가 않고 잘못된 메모리 할당으로 인한 부작용이 종종 있어왔다. 따라서 버퍼 풀 사이즈를 DB 기동시부터 모두 할당받을 수 있는 기능을 제공한다. 이 값을 ON으로 하면 된다.

 innodb_buffer_pool_load_at_startup=0 or 1 (기본 값: 0)
MariaDB를 재시작하면 버퍼캐시가 비게 되는데, 이 상태에서 서비스를 재개하면 Disk read가 심해지면서 부하가 심해질 수 있다. 이를 방지하기 위해 버퍼 캐시의 내용을 파일로 저장했다가 재기동시 읽어들여 버퍼 캐시를 복구하도록 할 수 있다(오라클에는 없는 신박한 기능인듯)
이 기능을 사용하려면 innodb_buffer_pool_dump_at_shutdown 파라미터에 의해 서버를 내릴 때 dump를 떨구도록 해야 한다.

innodb_buffer_pool_dump_at_shutdown=0 or 1(기본 값: 0)
MariaDB 를 내릴 때 버퍼캐시의 내용을 파일로 떨구도록 한다. innodb_buffer_pool_load_at_startup파라미터와 함께 쓰도록 한다.

innodb_blocking_buffer_pool_restore=0 or 1(기본 값: 0)
Dump로 버퍼 캐시의 데이터를 파일로 떨군 후 mariaDB 재기동 하면서 버퍼 캐시를 복구하는 도중에 XtraDB 스토리지 엔진을 참조하는 사용자 쿼리가 수행되면 복구작업이 늦어질 수 있다. 따라서 이 파라미터를 통해 쿼리 수행을 허용할 수 있을지 없을지를 결정한다. 1이면 블로킹한다.

innodb_buffer_pool_dump_now=0 or 1(기본 값: 0)
위에 언급한 innodb_buffer_pool_dump_at_shutdown 파라미터는 mariaDB를 내릴 때 dump 하는 것이지만 이 파라미터는 값을 1로 변경하는 순간 dump를 뜬다. 덤프가 완료되면 값이 다시 0으로 바뀐다.

innodb_buffer_pool_load_now=0 or 1(기본 값: 0)
innodb_buffer_pool_dump_now 파라미터와 비슷하게 이 파라미터는 값을 1로 변경하는 순간 dump파일에 있는 내용으로 버퍼 캐시를 복구한다. 완료되면 값이 다시 0으로 변경된다.

innodb_buffer_pool_load_abort=0 or 1(기본 값: 0)
innodb_buffer_pool_load_now에 의해 페이지를 버퍼 캐시에 로딩중 예상보다 시간이 오래 걸려 중지해야 할 경우 이 파라미터로 작업을 중지시킬 수 있다. 값을 1로 변경하는 순간 작업이 중지되며 파타미터 값도 다시 0으로 돌아온다.

innodb_flush_method= ‘O_DSYNC’ | ‘O_DIRECT’ | ‘O_DIRECT_NO_FSYNC’ | ‘ALL_O_DIRECT’ (기본 값: null)
기본적으로 리눅스 환경에서는 페이지를 버퍼캐시로 로드할 때 서버의 메모리로 올린 후 DB의 버퍼 캐시로 적재하게 된다. 이 과정에서 서버의 메모리와 DB의 버퍼 캐시가 동일한 페이지를 보관함으로써 더블 버퍼링이라고 하는 비효율성이 발생하게 된다. 따라서 서버의 캐시를 거치지 않고 바로 Disk로 write하거나 Disk로부터 바로 버퍼캐시로 read할 수 있도록 옵션을 제공하고 있다.
아래는 파라미터 값 별로 어떻게 동작하는지를 정리한 표이다.

DIRECIO.jpg

Read란 Disk에서 페이지를 읽어 버퍼 캐시에 적재하는 상황을 의미하며, Flush란LRU 및 더티 페이지 write, 체크포인트에 의해 write이 발생했을 때를 의미한다.
O_DSYNC는 서버의 data/log에 상관없이, 그리고 read/flush에 상관없이 항상 메모리를 거쳐가며 O_DIRECT는 Data에 대해서만 메모리를 거치지 않고 direct로 I/O를 수행하게 된다.
O_DIRECT_NO_FSYNC는 O_DIRECT와 비슷하지만 OS 내부적으로 fsync() 시스템 콜을 발행하지 않고 연기하는 메커니즘을 가지고 있다.
ALL_O_DIRECT는 data/log에 상관없이 항상 메모리를 거치지 않고 disk로 바로 I/O하도록 한다.

innodb_read_ahead_threshold=0~64 (기본 값: 56)
mariaDB는 오라클과 비슷하게 테이블 Full 스캔시 MBRC(Multi block Read Count)로 정의된, 여러 블록을 한꺼번에 읽는 방식이 존재한다. 그러나 오라클에서는 세션이 쿼리문을 보고 disk에서 멀티 블록을 읽어들인 후 가공하여 클라이언트에 반환하기 때문에 sync방식으로 처리된다. 하지만 mariaDB에서는 sync 방식으로 처리되지 않고 백그라운드에 의해 미리미리 멀티 블록을 읽어 적재하는 방식을 사용하고 있다. 이 때 최소 몇 개의 블록을 읽어 적재할 것인지를 설정하는 파라미터가 이것이다. 단위는 페이지의 개수이다.

 


 

Buffer Pool – Flush

update/Delete/Insert 등의 DML 작업으로 인해 값이 변경되었지만 아직 Disk로 write 되지 않은 블록이 버퍼 풀 내에 존재할 수 있다. 오라클의 경우 기본적으로 fast commit 매커니즘이라하여 사용자가 commit을 하면 redo file에만 기록을 하고 즉시 디스크로 sync하지 않는다. 대신 redo group change가 발생하면 체크 포인트가 발행되어 디스크로 일괄 write하는 매커니즘을 가지고 있다. 그러나 MariaDB는 오라클과 같이 redo file change로 인한 체크포인트가 발행되지 않는다. MariaDB는 여러 개의 redo file을 논리적으로 하나의 파일로 관리하며 redo group이 변경되었다고 체크포인트를 발행하지도 않는다. 그러나 지속적인 로그를 쌓기 위해선 redo file 도 정리하고 그 전에 버퍼 내용도 디스크로 flush하는 작업이 필요할텐데 언제 어떻게 할까?

어떻게 하긴.. 오라클처럼 명시적인 체크포인트가 따로 없으므로 평상시 지속적으로 버퍼를 flush하고 redo file을 정리해주어야 겠다. 이를 위해 몇 가지 파라미터를 제공한다. 버전 5.5 이전에서는 버퍼 풀을 보고 free공간이 없으면 LRU알고리즘을 통해 flush 하는 것을 사용자 스레드가 담당했었다. 그러나 5.6 버전부터는 백그라운드 스레드에 의해 flush하고 있다.

innodb_max_dirty_pages_pct=0~99.999 (기본 값: 75)
버퍼 풀에서 더티 페이지를 몇 프로까지 허용할 수 있을지 결정한다. 이 비율을 넘어가면 innodb_io_capacity 파라미터로 정한 값 만큼 한번에 페이지를 flush시킨다.
이 값을 낮추면 좀 더 자주 더티 페이지를 flush해주겠지만 버퍼 풀의 효율성이 떨어지게 되어 Disk I/O가 높아줄 수도 있다. 반면 너무 높으면 redo file에 더티 페이지가 꽉 차게 되고 더 이상 로그를 기록할 수 없는 지경에 이르게 될 수 있다. (mariaDB내에서는 redo file에 dirty 페이지가 얼마나 쌓였는지를 기록하고 있으며 그 비율에 따라 DB를 비상운용하게 된다)

innodb_io_capacity=100 ~ 2^64-1 (기본 값: 200)
innodb_max_dirty_pages_pct 파라미터로 명시한 값 만큼 버퍼 풀 내 dirty 페이지가 늘어나면 이 파라미터 값 만큼 한번에 페이지를 flush 시킨다. 보통 이 값은 서브디스크의 IOPS만큼 설정해주면 좋다. 예를 들어 IOPS가 200인 디스크가 Raid 1+0으로 4개로 묶여있다면 IOPS성능이 400이기 때문에 이 파라미터의 값도 400정도로 하면 좋다.

innodb_io_capacity_max=100 ~ 2^64-1 (기본 값: 2000)
innodb_io_capacity 파라미터에 설정된 만큼 페이지들을 flush 하는데도 dirty 페이지가 많이 생기면 이 파라미터에 명시된 값 만큼 페이지들을 공격적으로 flush한다. 너무 큰 값을 설정하면 I/O에 모든 자원을 소모시켜 문제가 될 수 있으니 적당히 높은 값으로 설정하도록 한다.

innodb_old_blocks_pct=5 or 95 (기본 값: 37)
버퍼 캐시에 존재하는 페이지의 LRU 리스트를 작성할 때 MRU(Most Recently Used) 부분과 LRU(Least recently used) 부분으로 나뉘는데 이 중 LRU의 비중을 몇 퍼센트로 할지를 정하는 파라미터이다. 기본 값인 37을 예로 들어보자. 이것은 버퍼 캐시에 존재하는 모든 페이지를 최근 사용한 순서로 나열했을 때 하위 37%에 해당하는 페이지들이 LRU 대상이라는 뜻이다.


 

리두로그

MariaDB에서는 오라클에서의 리두로그와 같은 역할을 하는 로그를 WAL(Write ahead log)라고 부르며 사이즈와 파일의 개수 및 위치를 모두 파라미터로 정의한다.

innodb_log_file_size = 108576(106KB) ~ 4294967295(4096MB)  (기본 값: 50331648)
로그 파일의 사이즈를 결정하는 파라미터이며 기본 값은 48M이며 최대 4G까지 지정할 수 있다.

innodb_log_file_in_group = 2~100 (기본 값: 2)
로그 파일의 개수를 몇 개로 할 것인지를 결정하는 파라미터로 기본 값은 2이다. 파일명은 ib_logfileN (N은 숫자)로 지정된다.

innodb_log_group_home_dir = 경로 (기본 값: ./)
로그 파일이 위치할 경로를 결정하는 파라미터이며 디폴트 값은 ${HOME}/data 디렉토리이다.

innodb_log_archive=ON or OFF (기본 값: OFF)
기본적으로 아카이빙은 OFF되어 있다. ON하면 innodb_log_arch_dir 디렉토리에 저장하게 된다.

innodb_log_arch_dir= 경로 (기본 값: ./)
아카이브 파일의 저장 위치에 대한 파라미터이며 값을 설정하지 않으면 ${HOME} 디렉토리에 생성된다.

innodb_log_arch_expire_sec=  (기본 값: 0)
아카이브 파일이 자동적으로 삭제되도록 타이머를 설정할 수 있다. 초 단위로 입력하면 되며 기본 값은 0으로 자동 삭제 기능을 이용하지 않게 된다.


기타

innodb_print_all_deadlocks=0 or 1 (기본 값: 0)
MariaDB에서 데드락에 대한 정보는 SHOW ENGINES INNODB STATUS 명령으로 확인할 수 있는데 이것은 마지막 데드락에 대한 정보만 보관하기 때문에 이전에 발생했던 데드락 정보는 확인할 수 없다. 이 파라미터를 1로 하면 모든 데드락 내용을 에러 로그파일에 기록한다.

 

 

커넥션

thread_handling=’one-thread-per-connection’ or ‘no-threads’ or ‘pool-of-threads’ (기본 값: one-thread-per-connection)
mariaDB에서는 쓰레드 풀을 사용할 수 있다. 이 파라미터의 값을 pool-of-threads로 하면 쓰레드 풀 기능을 사용하며 기본 값으로 두면 커넥션 당 하나씩 쓰레드를 제공하게 된다.

thread_pool_min_threads=1~ (기본 값: 1)
쓰레드 풀에 존재할 최소한의 쓰레드. 윈도우 전용의 파라미터이다.
thread_handling 파라미터가 pool-of-threads로 설정되었을 때 작동한다.

thread_pool_max_threads=1~65536 (기본 값: 1000)
쓰레드 풀이 이 파라미터의 값에 도달하면 더 이상 접속을 할 수 없게 된다. 이런 비상상황에서 관리자가 접근할 수 있도록 별도의 port를 만들 수 있으며 port 번호는 extra_port 파라미터로 지정한다.
thread_handling 파라미터가 pool-of-threads로 설정되었을 때 작동한다.

thread_pool_size=1~64 (기본 값: 장착된 core의 개수)
얼마나 많은 작업을 동시에 처리할 수 있는지에 대한 파라미터이다. 보통 Core 당 하나씩의 쓰레드가 돌아갈 때 최적의 성능을 낼 수 있으므로 장착된 Core 개수대로 설정한다.
thread_handling 파라미터가 pool-of-threads로 설정되었을 때 작동한다.

thread_pool_stall_limit=4~600 (기본 값: 500)
스레드 풀에 스레드가 하나도 남지 않았을 때 얼마나 더 기다렸다가 새로운 스레드를 생성할지를 결정하는 변수로 밀리 세컨드 단위로 값을 지정한다. 이 값이 너무 작으면 스레드 풀 자체의 효과가 줄어들고, 너무 크면 사용자가 커넥션을 맺기 위해 대기해야 하는 시간이 늘어나게 된다.
thread_handling 파라미터가 pool-of-threads로 설정되었을 때 작동한다.

thread_pool_idle_timeout= (기본 값: 60)
thread_pool_stall_limit 파라미터와는 반대로 유휴 쓰레드가 있을 경우 얼마나 대기했다가 없앨 것인지를 결정하는 파라미터이다. 단위는 초 이며 윈도우에는 없는 UNIX계열 전용의 파라미터이다.
thread_handling 파라미터가 pool-of-threads로 설정되었을 때 작동한다.

extra_port= (기본 값: 0)
쓰레드가 꽉 차서 추가로 커넥션을 만들 수 없을 경우를 대비하여, 관리자용 접속포트를 별도로 둘 수 있는 파라미터이다. 0이면 별도 포트를 두지 않는 것이며, 입력한 값에 대해 포트가 생성된다.

extra_max_connections= 1~100000(기본 값: 1)
extra_port 에 대해 설정된 포트에 최대 몇 개의 커넥션을 허용할 것인지를 결정하는 파라미터이다. 관리자용 포트는 기본적으로 커넥션마다 쓰레드가 생성되는 방식으로, 이 파라미터에 의해 결정된 값 만큼 쓰레드가 생성된다


'MYSQL' 카테고리의 다른 글

sql 정규식으로 치환하기  (0) 2017.05.10
(MariaDB) DB 백업 / 복구하기  (0) 2017.05.04
블로그 이미지

칩사마코더

,

iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 1 --hitcount 10 --name HTTP -j DROP

- 1초동안 80포트에 똑같은 IP가 10번 이상의 SYN가 들어오면 드랍시킨다.
   이는 정상적인 요청이 아닌 공격으로 간주한다.


iptables -m connlimit -h

# iptables -A FORWARD -m recent --name badguy --rcheck --seconds 300 -j DROP
# iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 30 -m recent
--name badguy --set -j DROP
# iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 30 -j DROP
위의 3 줄을 실행하면 가능한데,단순히3번째 룰인
# iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 30 -j DROP
만 실행하게 되면,한 IP에서의 동시접속이 30회만 접속을 허용할 뿐 그 이상 접속을 하지
못하지만, 위의 두 룰을 함께 사용하게 되면 동시접속이 30회 이상 초과하는 IP를 dynamic
하게 300초(5분)동안 자동 차단하게 된다. 동시접속수(30) 제한이나 차단시간(5분)은 각자
의 환경에 따라 적절히 설정하면 된다.
이때 과다접속으로 차단된 IP에 대한 정보는 다음과 같이 실시간으로 확인할 수 있다.
# cat /proc/net/ipt_recent/badguy



출처: http://gampol.tistory.com/entry/ddos공격-예방-iptables룰 [유효하지 않네]

블로그 이미지

칩사마코더

,

http://myexternalip.com/raw

'기타' 카테고리의 다른 글

객체 실수 부분...  (0) 2016.12.02
웹프로그래밍 하기 위해 공부해야될것들...  (0) 2016.09.06
블로그 이미지

칩사마코더

,