9월 2009의 13개 게시물 중 최신 10개 게시물을 표시합니다. 이전 게시물 표시
9월 2009의 13개 게시물 중 최신 10개 게시물을 표시합니다. 이전 게시물 표시

2009년 9월 29일 화요일

초간단 raid 5 mdadm으로 만들기

mdadm 소프트 raid로 레벨5 만들기


먼저 하드디스크를 준비해서  설치후


1. 장비별로 파티션을 잡는다. 


파티션의 타입은 fd 값으로 Linux raid auto


 


2. 환경설정파일은 다음과 같다.


파일의 위치는 /etc/mdadm.conf


 


DEVICE /dev/sd[abcdefgh]1

ARRAY /dev/md5 devices=/dev/sda1, /dev/sdb1, /dev/sdc1, /dev/sdd1, /dev/sde1, /dev/sdf1, /dev/sdg1, /dev/sdh1



DEVICE /dev/sd[abcdefgh]1 => abcdefgh는 장치의 나열 1은 두번째 장치의 나열

ARRAY /dev/md5 devices=/dev/sda1, /dev/sdb1, /dev/sdc1, /dev/sdd1, /dev/sde1, /dev/sdf1, /dev/sdg1, /dev/sdh1 ==> /dev/md5 는 raid로 생설될 장치이름, devices=다음에는 각 장치들의 실재 이름을 나열


 


3. 실제 device명을 시스템에 만들어 준다.


 


# mknod /dev/md5 b 9 5


mknod /dev/md5 b 9 5 ==> /dev/md5 raid로 생설되 장치이름 b 블록타입 9 md장치 5레벨 5


 


4. 장치를 연결하여 raid를 구성 시킨다.

# mdadm --create /dev/md5 --level=5 --raid-devices=8 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1

mdadm --create /dev/md5 --level=5 --raid-devices=8 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sdh1 ==> --create : 생성, /dev/md5 : raid로 생성될 장치명, --levle=5 : raid 레벨, --raid-devices=8 : raid로 구성될 장치 개수 나머지는 포함될 장치들의 나열


 


이후에 새로 생성시 묻는다 진자로 생성할지 그럼


 


5. 구성된 장치와 상황를 본다.

# mdadm --detail /dev/md5


mdadm --detail /dev/md5 ==> --detail 옵션으로 현재 상태를 반환하기 위한 옵션 /dev/md5 장치를 표시하는 내용


+++++++++++++++++++++++++++++++++++++++++


mdadm: only give one device per ARRAY line: /dev/md5 and /dev/sdb1,

mdadm: only give one device per ARRAY line: /dev/md5 and /dev/sdc1,

mdadm: only give one device per ARRAY line: /dev/md5 and /dev/sdd1,

mdadm: only give one device per ARRAY line: /dev/md5 and /dev/sde1,

mdadm: only give one device per ARRAY line: /dev/md5 and /dev/sdf1,

mdadm: only give one device per ARRAY line: /dev/md5 and /dev/sdg1,

mdadm: only give one device per ARRAY line: /dev/md5 and /dev/sdh1

/dev/md5:

        Version : 00.90.03

  Creation Time : Tue Sep 29 12:22:17 2009

     Raid Level : raid5

     Array Size : 3418687552 (3260.31 GiB 3500.74 GB)

  Used Dev Size : 488383936 (465.76 GiB 500.11 GB)

   Raid Devices : 8

  Total Devices : 8

Preferred Minor : 5

    Persistence : Superblock is persistent



    Update Time : Tue Sep 29 12:22:17 2009

          State : clean, degraded, recovering

 Active Devices : 7

Working Devices : 8

 Failed Devices : 0

  Spare Devices : 1



         Layout : left-symmetric

     Chunk Size : 64K



 Rebuild Status : 37% complete



           UUID : 44ae596f:1c84dc2b:9c23bff9:bd295ba1

         Events : 0.1



    Number   Major   Minor   RaidDevice State

       0       8        1        0      active sync   /dev/sda1

       1       8       17        1      active sync   /dev/sdb1

       2       8       33        2      active sync   /dev/sdc1

       3       8       49        3      active sync   /dev/sdd1

       4       8       65        4      active sync   /dev/sde1

       5       8       81        5      active sync   /dev/sdf1

       6       8       97        6      active sync   /dev/sdg1

       8       8      113        7      spare rebuilding   /dev/sdh1


++++++++++++++++++++++++++++++++++++++++++


 


6. md장치들의 동작 상태를 본다.


# cat /proc/mdstat


+++++++++++++++++++++++++++++++++++++++++


Personalities : [raid6] [raid5] [raid4]

md5 : active raid5 sdh1[8] sdg1[6] sdf1[5] sde1[4] sdd1[3] sdc1[2] sdb1[1] sda1[0]

      3418687552 blocks level 5, 64k chunk, algorithm 2 [8/7] [UUUUUUU_]

      [=======>.............]  recovery = 37.5% (183166772/488383936) finish=119.0min speed=42745K/sec

     

unused devices: <none>


+++++++++++++++++++++++++++++++++++++++++


 


7. 새로 추가된 장치를 포멧을 한다.

mkfs.ext3 /dev/md5


이 글은 스프링노트에서 작성되었습니다.

2009년 9월 27일 일요일

vncserver 리눅스에 설정하기 보안터널(ssh)을 이용해서 사용

만일 보안 터널(ssh)을 이용해 VNC를 설정하고 이용할때 서버설정

이전글에 나와 있는 부분중에서 일부를수정해주면 된다.
먼저
http://mylife.all.kr/2009/09/vncserver.html

vnc설정 파일
/etc/sysconfig/vncservers

VNCSERVERS="1:root"
VNCSERVERS[1]="-geometry 800x600"

=====>

VNCSERVERS="1:root"
VNCSERVERS[1]="-geometry 800x600 -nolisten -nohttpd -localhost"

이렇게 고쳐 주면 local 에서 만이 접근이 가능하게 된다.
그리고 나머지는 동일한 설정

윈도우에서 이용할때
http://mylife.all.kr/2009/07/blog-post.html
참조하여 이용하면 되며

만일 리눅스에서 이용하때는

ssh -f -L 25901:127.0.0.1:5901 ID@server_name -p ssh_port sleep 10; vncviewer 127.0.0.1:25901:1

vncserver 설정하기

vncserver 설정하기

1. VNC server 구축하기

우선 vnc를 구성하기 위한 rpm 두개가 필요하다
하나는 서버, 하나는 클라이언트.

vnc-server.rpm
vnc.rpm



rpm명령을 이용하여 위 두개의 파일을 설치하고 vnc서버를 시작하자
#service vncserver restart



서버 상태를 확인하자
#service vncserver status



vnc설정 파일
/etc/sysconfig/vncservers

VNCSERVERS="1:root"
VNCSERVERS[1]="-geometry 800x600"



설정파일 내용
위의 1:root 부분에서 1은 디스플레이 번호를 의미하며 root는 계정명을 나타낸다.
VNCSERVERS[1]="-geometry 800x600"은 1번 디스플레이 번호에 대한 해상도를 설정하는 것이다. 사용자가 많아서 디스플레이 번호가 2, 3, 4식으로 증가하면 ‘[‘와 ‘]‘사이의 숫자를 변경하여 설정하면 된다.



처음에 vnc서버를 시작하면 서버가 작동이 안되는데 그 이유는 vnc서버 사용자 root가 암호를 필요로 하기 때문이다.



암호를 만들기 위해서 다음의 과정을 따라하자


#cd ~
#mkdir .vnc
#cd .vnc
#vncpasswd ‘패스워드입력’



이제 다시 vnc서비스를 재시작하자
그러면 /root/.vnc 디렉토리 밑에 xstartup파일이 생성될 것이다



[tip1] 이제 밑의 vnc 클라이언트를 이용하여 vnc서버에 접속을 하면은 xwindow를 사용하여 자신만의 윈도우 매니저를 사용한다면 해당하는 윈도우 매니저가 안나오고 기본적인 twm이 시작할 것이다. 자신이 사용하고자 하는 윈도우 매니저가 나타나기를 원할 경우에는 $HOME/.vnc/xstartup 파일에서
#unset SESSION_MANAGER
#exec /etc/X11/xinit/xinitrc
부분의 ‘#’을 지워서 주석을 제거해준다.



[tip2] 루트는 vnc사용자에게 사용할 수 있도록 /etc/sysconfig/vncserver 파일을 설정하고 사용자는 자신의 홈디렉토리에 .vnc디렉토리를 만들고 vncpasswd 명령으로 passwd파일을 만들어야 한다.


ex) /etc/sysconfig/vncserver
VNCSERVERS="1:root 2:test 3:test2"
VNCSERVERS[1]="-geometry 800x600"
VNCSERVERS[2]="-geometry 800x600"
VNCSERVERS[3]="-geometry 800x600"



ex)일반 사용자들의 홈디렉토리에서 패스워드 설정하는 방법
$cd ~
$mkdir .vnc
$cd .vnc
$vncpasswd
Password: 패스워드 입력(6자 이상)
Verify: 패스워드 입력 확인

위의 과정에서 $HOME/.vnc 디렉토리에 passwd파일이 만들어진다.
$ls $HOME/.vnc/
passwd


2. VNC 클라이언트 사용하기
#vncviewer ip-address:디스플레이번호
#vncviewer 211.250.1.2:1



윈도우용 vnc서버, 클라이언트는 www.tightvnc.com에 가면 다운로드 메뉴에서 찾을 수 있다.



윈도우 explorer에서 vncserver에 접속하는 방법
http://ip-address:5800+display-number
ex)http://191.111.1.1:5801 <-1번 디스플레이번호를 쓰는 루트의 접속

2009년 9월 23일 수요일

네트워킹 -아이피의 서브넷 마스크 아이피마스크관계 계산

참고==>네트워킹 - 서브넷 마스크 계산하기

하 나의 물리적 네트웍 의 모든 호스트는 같은 네트웍 주소를 가져야 한다. 만약 두 개 이상의 네트웍을 구성하길 원하면, 네트웍 주소를 서브넷으로 나누어야 한다. 이는 네트웍주소의 길이를 늘리면 (반대로 호스트의 길이를 줄이고)된다 - 보다 적은 호스트를 허용하는 여러개의 네트웍체계를 가지게 되며, 이 때, IP 주소들이결코 겹쳐져서는 안된다.

가장 정확한 방법은 한번에 한 bit 씩 네트웍의 길이를 늘리는 접근방식이다. 예를 들면, 하나의 /24 네트웍을 두개의 /25 네트웍으로. 하나의 /25 네트웍을 두개의 /26 네트웍으로,...

여기에 206.27.238.0 / 24 을 나눈 예를 들면,
206 . 27 . 238
11001000 00011011 11101110 xxxxxxxx 206.27.238.0/24 before
----------------------------------------------------------------
11001000 00011011 11101110 0xxxxxxx 206.27.238.0/25 after
11001000 00011011 11101110 1xxxxxxx 206.27.238.128/25
^
여기가 핵심으로 하나 들어난 네트웍 주소이다.

각 네트웍은 128개의 IP 주소를 가진다. (실제 126 개가 사용 가능 하다). 여기에 만족하면 좋은데, 더 원한다면, ..
11001000 00011011 11101110 0xxxxxxx 206.27.238.0/25
-------------------------------------------------------------
11001000 00011011 11101110 00xxxxxx 206.27.238.0/26
11001000 00011011 11101110 01xxxxxx 206.27.238.64/26
^
11001000 00011011 11101110 1xxxxxxx 206.27.238.128/25
-------------------------------------------------------------
11001000 00011011 11101110 10xxxxxx 206.27.238.128/26
11001000 00011011 11101110 11xxxxxx 206.27.238.192/26
^

이제. 하나의 /24 네트웍이 (256 개의 IP 주소), 각각 64개의 IP 주소가 가능한 4개의 /26 네트웍으로 나누어 졌다. 이렇게 하면, 0-63, 64-127, 128-191, 192-255가 되고, 이들은 겹치지 않는다. 각각의 네트웍의 첫 번째 와 마지막 숫자는 호스트 주소에 쓰이지 않으므로, 실제 사용가능한 주소는 1-62, 65-126, 129-190, 193-254 이다.

여기 잘못된 예를 들면:

First network: 206.27.238.0/25
Second network: 206.27.238.64/26
잘못된 곳은?
206.27.238.0/25 = 206 . 27 . 238 . 0xxxxxxx <-- range 0 to 127 206.27.238.64/26 = 206 . 27 . 238 . 01xxxxxx <-- range 64 to 127 OVERLAP! 이분법적인 네트웍 분리구성뿐아니라, 겹치지 않는다면, 다소 필요에 맞게 복잡한 구성도 가능하다. 아래에 한 예를 든다: 11001000 00011011 11101110 xxxxxxxx (original network)==>서브넷마스
-------------------------------------------------------------
11001000 00011011 11101110 000000xx 206.27.238.0/30 .0 to .3==>255.255.255.254
11001000 00011011 11101110 000001xx 206.27.238.4/30 .4 to .7==>255.255.255.254
11001000 00011011 11101110 000010xx 206.27.238.8/30 .8 to .11==>255.255.255.254
11001000 00011011 11101110 000011xx 206.27.238.12/30 .12 to .14==>255.255.255.254
11001000 00011011 11101110 0001xxxx 206.27.238.16/28 .16 to .31==>255.255.255.248
11001000 00011011 11101110 001xxxxx 206.27.238.32/27 .32 to .63==>255.255.255.240
11001000 00011011 11101110 01xxxxxx 206.27.238.64/26 .64 to .127==>255.255.255.224
11001000 00011011 11101110 1xxxxxxx 206.27.238.128/25 .128 to .255==>255.255.255.192

각 네트웍의 처음과 끝은 사용할 수 없고, 206.27.238.4/30 같은 네트웍은 단지 2개의 IP 주소 (.5, .6)만이 가능하다. 그러므로 /30 이 가장 작은 네트웍 이다. 이러한 주소는 주로 시리얼 연결된 라우터에 할당되는 주소로 많이 쓰인다. 양 라우터를 잇는 라인도 하나의 독립된 네트웍이며, 이를 위한 주소체계는 /30 이 적당하다. 단, 여러 라우터가 함께 연결되는 ISP의 경우는 다르다.


A class서브넷마스크별 구분

- 서브넷수 : 0개(0bit), subnet mask : 255.0.0.0, 호스트수 : 16,777,214개
- 서브넷수 : 2개(1bit), subnet mask : 255.128.0.0, 호스트수 : 8,388,606개
- 서브넷수 : 4개(2bit), subnet mask : 255.192.0.0, 호스트수 : 4,194,302개
- 서브넷수 : 8개(3bit), subnet mask : 255.224.0.0, 호스트수 : 2,097,150개
- 서브넷수 : 16개(4bit), subnet mask : 255.240.0.0, 호스트수 : 1,048,574개
- 서브넷수 : 32개(5bit), subnet mask : 255.248.0.0, 호스트수 : 524,286개
- 서브넷수 : 64개(6bit), subnet mask : 255.252.0.0, 호스트수 : 262,142개
- 서브넷수 : 128개(7bit), subnet mask : 255.254.0.0, 호스트수 : 131,070개
- 서브넷수 : 256개(8bit), subnet mask : 255.255.0.0, 호스트수 : 65,534개
- 서브넷수 : 5122개(9bit), subnet mask : 255.255.128.0, 호스트수 : 32,766개
- 서브넷수 : 1024개(10bit), subnet mask : 255.255.192.0, 호스트수 : 16,382개
- 서브넷수 : 2048개(11bit), subnet mask : 255.255.224.0, 호스트수 : 8190개
- 서브넷수 : 4096개(12bit), subnet mask : 255.255.240.0, 호스트수 : 4094개
- 서브넷수 : 8092개(13bit), subnet mask : 255.255.248.0, 호스트수 : 2046개
- 서브넷수 : 16382개(14bit), subnet mask : 255.255.252.0, 호스트수 : 1022개
- 서브넷수 : 32768개(15bit), subnet mask : 255.255.254.0, 호스트수 : 510개
- 서브넷수 : 65536개(16bit), subnet mask : 255.255.255.0, 호스트수 : 254개
- 서브넷수 : 131072개(17bit), subnet mask : 255.255.255.192, 호스트수 : 126개
- 서브넷수 : 262144개(18bit), subnet mask : 255.255.255.224, 호스트수 : 62개
- 서브넷수 : 524288개(19bit), subnet mask : 255.255.255.240, 호스트수 : 30개
- 서브넷수 : 1048576개(20bit), subnet mask : 255.255.255.248, 호스트수 : 14개
- 서브넷수 : 2097152개(21bit), subnet mask : 255.255.255.252, 호스트수 : 6개
- 서브넷수 : 4194304개(22bit), subnet mask : 255.255.255.254, 호스트수 : 2개
아이피 마스크를 이용해서 프로그램에서 계산하는 방법
참고==> D-H,appy :: IP 대역폭 계산

예를 들기 위한 ip는 '156.147.0.0/16' 이다
요 아이피는 마스크가 16이므로 네트워크 아이디부가 156.147 까지, 그리고 호스트가 0.0 ~ 255.255 이다
다시 설명하면 156.147.0.0을 2진수로 각각 표현하면
128+16+8+4 . 128+16+2+1 . 0. 0 이니까
비트로 표현하면
10011100 . 10010011 . 00000000 . 00000000 이다
그리고 마스크는 다음과 같다.
11111111 . 11111111 . 00000000 . 00000000 (/16 이니까 앞에서부터 16개만 1)

이렇게 되면 마스크가 1인 부분을 뺀 나머지 부분(= 마스크가 0인부분 = 하위 16비트)으로
호스트를 결정하는데

각각을 써보면
10011100 . 10010011 . 00000000 . 00000000 156.147.0.0 -> network id
10011100 . 10010011 . 00000000 . 00000001 156.147.0.1
10011100 . 10010011 . 00000000 . 00000010 156.147.0.2
10011100 . 10010011 . 00000000 . 00000011 156.147.0.3
10011100 . 10010011 . 00000000 . 00000100 156.147.0.4
10011100 . 10010011 . 11111111 . 11111111 156.147.255.255 -> broadcasting
등등등
으로 이루어진다

참고로 호스트 대역에서 0은 네트워크id, 255는 서브넷브로드캐스팅 주소로 할당되어있어서
실제 호스트로는 쓰지 않는다.

고로 마스크가 16이면
2^16 - 2 (65534개) 만큼의 호스트 갯수가 생긴다.
이 대역에서 서브네팅을 어떻게 하느냐에 따라 호스트 갯수는 달라진다...
그건 뭐...네트워크맹근 사람이 알아서 하고...

어쨋든 ip를 비트로 분리한다
string으로 ip를 입력받고 token함수로 . 과 / 을 분리하면
쉽게 156 147 0 0 16 을 분리할 수 있다
byte[]를 사용하여 분리하면
이차원 배열로 byte타입이 5개 생길것이다. a,b,c,d클래스+마스크
그러면 요 바이트 타입을 2진수로 나누는 함수로 비트화한다

함수는 알아서 작성하시길...
2로 나눠서 나머지쓰고 또 나누고 ...뭐 중학교때 배우는거...

그렇게 해서 각각을 나타내면

10011100 . 10010011 . 00000000 . 00000000 으로 되고
마스크는
string 타입 변수를 새로 생성해서 16만큼 루프 돌려서 앞에 1 쓰고 나머지 0으로 채워버리면
11111111 11111111 00000000 00000000으로 쉽게 나타낼 수 있다

그러면 이제 네트워크 아뒤는 바로 저 위에 ip를 쓰면 되고(156.147.0.0)
대역의 첫번째 호스트 주소는 저 아이피에 1만 더하면된다(156.147.0.1)
대역의 서브넷브로드캐스팅주소는 마스크에서 0인 부분만 ip에서 1로 바꾸면되고(156.147.255.255)
대역의 마지막 호스트 주소는 서브넷브로드캐스팅주소에서 1만 빼면된다(156.147.255.254)


PHP 를 이용하여 구하는 함수를 만들어 보았음

class lock_ip{

    function get_subnetmask($ip,$submask){//아이피와 서브네트워크192.168.0.5/255.255.255.0
        $subipbin = $this->ip2bin($submask);
        for($i=0;$i<32;$i++){
            if($subipbin[$i]=="0") break;
        }
        return $this->get_submask($ip,$i);
    }

    function get_submask($ip,$ipmask){//아이피와 마스크 네트워크 192.168.0.5/24
        //마스크 값까지만을 가지고 시작아이피와 끝아이피를 구한다.
        $binip = $this->ip2bin($ip);
        return array($this->bin2ip($this->bin2cut($binip,$ipmask,"0")),$this->bin2ip($this->bin2cut($binip,$ipmask,"1")));
    }

    function bin2ip($binip){
        return bindec(substr($binip,0,8)).".".bindec(substr($binip,8,8)).".".bindec(substr($binip,16,8)).".".bindec(substr($binip,24,8));
    }

    function ip2bin($ip){//아이피 값을 이진수0,1로 바꾼다.
        $ips = explode(".",$ip);
        $result="";
        for($i=0;$i<4;$i++) $result .= $this->decbin2string($ips[$i]);
        return $result;
    }

    function decbin2string($num){//2진수의 문자열을 앞단에 추가값을 주어 문자열로 만들어 반환
        $result="";
        $result = decbin($num);
        for($i=strlen($result);$i < 8;$i++) $result = "0".$result;
        return $result;
    }

    function bin2cut($bins,$cut,$mode="0"){//2진수의 문자열을 에서 원하는 $cut위치에서 부터$mode값을 마지막가지 채운다.
        $result="";
        for($i=0;$i < 32;$i++){
            if($i<$cut){$result .= $bins[$i];}else{$result .= $mode;}
        }
        return $result;
    }
}

//테스트를 해본다.
$lockip=new lock_ip("192.168.1.2");
print_r($lockip->get_subnetmask("192.168.0.3","255.255.240.0"));

print_r($lockip->get_subnetmask("192.168.0.3",16));

2009년 9월 18일 금요일

현병철 인권위원장 ‘독립성 부정’ 발언 : 인권·복지 : 사회 : 뉴스 : 한겨레

현병철 인권위원장 ‘독립성 부정’ 발언 : 인권·복지 : 사회 : 뉴스 : 한겨레

실제적으로 우리나라에는 2009년 이후에 우리나라 인권위원회는 그냥 말뿐인 인권위원회인거 세계가 다 알고도 남는다.

기본적인 인권에 개념이 상실되어 있는 사람이 수장을 하는 것 자체가 정말 웃기는거 아닌가?
인권위원회는 법이 집행되는 과정에서 발생할수 있는 인권 침해의 요소를 찾고 그 법의 부당성에 대해 시정할 수 있는 대안을 찾도록 권고하며 잘못된 법의 집행으로 부터 인권이 침해되는지를 검토하고 연구하는 곳으로 알고 있다.

지금 이 곳을 책임 또는 대표하는 사람이 과연 그러한 자질과 의지를 갖는지 너무도 한심하기 그지 없다. 법이란 항상 모든사람을 위해 존재한다. 하지만 그러지 않는 법이기 때문에 법을 감시하고 수정하고 조정하는 것이 아닌가? 실제 법을 집행하는 곳이 행정이라면 그것을 판단하는것은 사법이고 만드는 곳은 입법기관이다. 그럼 인권위와 같은 기관은 어디에 속하는가. 그것은 바로 입법도 사법도 행정도 아닌 이 모두의 기관과 국민들 사이에존재해야한다. 엄밀히 보자면 아마도 입법쪽에 가까울거 같다. 헌데 인권위원장은 자신의 위치를 법이 정한 위치조차 무시하고 또한 그 역할에 따른 위치의 인식에도 한참 못미치는 위치에 가져다 놓았다. 그러면서 어떻게 그 조직이 돌아가고 움직일수 있겠는가? 그렇게 자신의 위상을 못찾을거면 차라리 해산을 하는것이 바람직 하지 않을까 괜히 세금이나 축내지 말고. 하기야 국제사회 눈치보느라 해산도 쉽게 못하겠지만 언제 눈치 봤다고. 인권위원장 월급이 아깝다.

ffmpeg-php API documentation

ffmpeg-php API documentation

Method
Description
$gif = new ffmpeg_animated_gif(String output_file_path, Integer width, Integer height, Integer frame_rate, [Integer loop_count])
create a new ffmpeg_animated_gif object
  • output_file_path - Location in the filesystem where the animated gif will be written.
  • width - Width of the animated gif.
  • height - Height of the animated gif.
  • frame_rate - Frame rate of the animated gif in frames per second..
  • loop_count - Number of times to loop the animation. Put a zero here to loop forever or omit this parameter to disable looping.


$frame->addFrame(ffmpeg_frame frame_to_add)
Add a frame to the end of the animated gif.
  • frame_to_add - The ffmpeg_frame object to add to the end of the animated gif.


ffmpeg-php API documentation

ffmpeg-php API documentation

Method
Description
$frame = new ffmpeg_frame(Resource gd_image)
Create a frame object from a GD image.
NOTE: This function will not be available if GD is not enabled.
$frame->getWidth()
Return the width of the frame.
$frame->getHeight()
Return the height of the frame.
$frame->getPTS() alias $frame->getPresentationTimestamp()
Return the presentation time stamp of the frame.
$frame->resize(Integer width, Integer height [, Integer crop_top [, Integer crop_bottom [, Integer crop_left [, Integer crop_right ]]]])
Resize and optionally crop the frame. (Cropping is built into ffmpeg resizing so I'm providing it here for completeness.)
  • width - New width of the frame (must be an even number).
  • height - New height of the frame (must be an even number).
  • croptop - Remove [croptop] rows of pixels from the top of the frame.
  • cropbottom - Remove [cropbottom] rows of pixels from the bottom of the frame.
  • cropleft - Remove [cropleft] rows of pixels from the left of the frame.
  • cropright - Remove [cropright] rows of pixels from the right of the frame.
NOTE: Cropping is always applied to the frame before it is resized. Crop values must be even numbers.
$frame->crop(Integer crop_top [, Integer crop_bottom [, Integer crop_left [, Integer crop_right ]]])
Crop the frame.
  • croptop - Remove [croptop] rows of pixels from the top of the frame.
  • cropbottom - Remove [cropbottom] rows of pixels from the bottom of the frame.
  • cropleft - Remove [cropleft] rows of pixels from the left of the frame.
  • cropright - Remove [cropright] rows of pixels from the right of the frame.
NOTE: Crop values must be even numbers.
$frame->toGDImage()
Returns a truecolor GD image of the frame.
NOTE: This function will not be available if GD is not enabled.

ffmpeg-php API documentation

ffmpeg-php API documentation


ffmpeg_movie object methods

Method
Description
$movie = new ffmpeg_movie(String path_to_media, boolean persistent)
Open a video or audio file and return it as an object.
  • path_to_media - File path of video or audio file to open.
  • persistent - Whether to open this media as a persistent resource. See the PHP documentation for more info about persistent resources

$movie->getDuration()
Return the duration of a movie or audio file in seconds.
$movie->getFrameCount()
Return the number of frames in a movie or audio file.
$movie->getFrameRate()
Return the frame rate of a movie in fps.
$movie->getFilename()
Return the path and name of the movie file or audio file.
$movie->getComment()
Return the comment field from the movie or audio file.
$movie->getTitle()
Return the title field from the movie or audio file.
$movie->getAuthor() alias $movie->getArtist()
Return the author field from the movie or the artist ID3 field from an mp3 file.
$movie->getCopyright()
Return the copyright field from the movie or audio file.
$movie->getArtist()
Return the artist ID3 field from an mp3 file.
$movie->getGenre()
Return the genre ID3 field from an mp3 file.
$movie->getTrackNumber()
Return the track ID3 field from an mp3 file.
$movie->getYear()
Return the year ID3 field from an mp3 file.
$movie->getFrameHeight()
Return the height of the movie in pixels.
$movie->getFrameWidth()
Return the width of the movie in pixels.
$movie->getPixelFormat()
Return the pixel format of the movie.
$movie->getBitRate()
Return the bit rate of the movie or audio file in bits per second.
$movie->getVideoBitRate()
Return the bit rate of the video in bits per second.
NOTE: This only works for files with constant bit rate.
$movie->getAudioBitRate()
Return the audio bit rate of the media file in bits per second.
$movie->getAudioSampleRate()
Return the audio sample rate of the media file in bits per second.
$movie->getFrameNumber()
Return the current frame index.
$movie->getVideoCodec()
Return the name of the video codec used to encode this movie as a string.
$movie->getAudioCodec()
Return the name of the audio codec used to encode this movie as a string.
$movie->getAudioChannels()
Return the number of audio channels in this movie as an integer.
$movie->hasAudio()
Return boolean value indicating whether the movie has an audio stream.
$movie->hasVideo()
Return boolean value indicating whether the movie has a video stream.
$movie->getFrame([Integer framenumber])
Returns a frame from the movie as an ffmpeg_frame object. Returns false if the frame was not found.
  • framenumber - Frame from the movie to return. If no framenumber is specified, returns the next frame of the movie.

$movie->getNextKeyFrame()
Returns the next key frame from the movie as an ffmpeg_frame object. Returns false if the frame was not found.

2009년 9월 17일 목요일

cron deamon

임베디드 시스템(Device Control) :: 네이버 카페

1) 현재 cron deamon이 돌고 있는지 확인
ps -ef | grep cron

2) cron deamon kill
kill -9 "pid of cron"

3) deamon 재실행
/usr/sbin/cron

4) 명령어 위치
/usr/bin/crontab

5) 사용형식
crontab [ -u 사용자ID ] 파일
crontab [ -u 사용자ID ] { -l | -r | -e }


1. 개요
cron(크론)은 원하는 시간에 명령(프로그램)을 시키기 위한 데몬이다.
서버는 늘 깨어있다는 것을 이용한 최대한의 활용법이 될 수 있다.

- 내가 새벽 3시에 서버에 특정 작업을 해줘야하는데 그 때 깨어있을 수 있는가?
- 또는 30분 간격으로 HDD의 사용량을 운영자에게 알리도록 해야한다면?
- 매월 초에 자료를 백업 받고 싶다면?

바로 이럴 때 cron은 최고의 해결책을 제시한다.
cron은 항상 지정한 시간이 되었는지 확인을 하여 해당 명령어을 실행하는 것이다.

시 스템의 최적화의 기법은 일정 시간 단위로 최대한의 성능을 발휘하도록 도와주는 것이다. 즉, 주기적으로 운영 중에 만들어진 필요하지 않는 임시 파일을 정리하거나, 운영체제 운영에 필요한 데이터를 갱신하는 등의 작업을 통해 리눅스가 최적의 상태를 유지할 수 있게 할 수 있다.

2. cron 설정
1) crontab 파일 위치 및 조회
작업 설정 파일을 crontab 파일이라고 부르며, 이 파일의 위치는 OS별로 차이가 있다.
리눅스는 /var/spool/cron/ID, 솔라리스는 /var/spool/corn/crontabs/ID에 위치한다.
그럼 이 파일을 직접 수정해야 하는가? 그렇지 않다. crontab 명령을 통해 설정과 조회를 한다.

crontab 설정 파일을 새롭게 편집하고자 한다면 -e 옵션을 주고, 수정하기 전에 현재 등록된 내용을 보고자 한다면 -l 옵션을 사용하며, 등록된 내용을 삭제하려면 -d 옵션을 사용한다

설정 내용을 조회해 보자(-l 옵션).
$ crontab -l
no crontab for truefeel
설정한 적이 없어 아직 비어있다.

- /etc/crontab 파일
- /etc/rc.d/init.d/crond 스크립트
- /var/spool/cron 디렉토리 내의 크론 설정 파일들

2) crontab 파일 형식
---------- ---------- ---------------------------------------------------
필 드 의 미 범 위
---------- ---------- ---------------------------------------------------
첫 번째 분 0-59
두 번째 시 0-23
세 번째 일 0-31
네 번째 월 1-12
다섯 번째 요일 0-7 (0 또는 7=일요일, 1=월, 2=화, ...)
여섯 번째 명령어 실행할 명령을 한줄로 쓴다.
---------- ---------- ---------------------------------------------------

- 모든 엔트리 필드는 공백으로 구분된다.
- 한 줄당 하나의 명령 (두줄로 나눠서 표시할 수 없음)
- # 으로 시작하는 줄은 실행하지 않는다.

설정을 해보자. (-e 옵션)
crontab -e을 하면 vi 에디터가 나온다(환경변수 EDITOR에 따라 다른 에디터를 사용할 수 있다).

$ crontab -e
# /home 디렉토리를 /BACKUP/home으로 백업해둠
#
# 30분, 새벽 4시와 낮 12시, 모든 일, 모든 월, 모든 요일
30 4,12 * * * /usr/bin/rsync -avxH --delete /home /BACKUP/home > /dev/null 2>&1
#
# 파일/디렉토리 퍼미션 설정
# 40분, 새벽 1시, 매주 일요일
40 1 * * 0 /root/bin/perm_set.sh > /dev/null 2>&1

위는 매일 4:30분과 12:30분에 rsync 명령을, 매주 일요일 1:40분에 perm_set.sh를 실행함을 의미한다.

3) 설정 예

시간 설정에서 몇가지 의미있는 것들을 알아보자.
- '*'표시는 해당 필드의 모든 시간을 의미한다.
- 3,5,7와 같이 콤마(,)로 구분하여 여러 시간대를 지정할 수 있다.
- 2-10와 같이 하이픈(-)으로 시간 범위도 지정할 수 있다.
- 2-10/3와 같이 하이픈(-)으로 시간 범위를 슬래쉬(/)로 시간 간격을 지정할 수 있다(2~10시까지 3시간 간격으로. 즉, 3, 6, 9시를 의미함).

원하는 시간 형 식
매주 토요일 새벽 2:20 20 2 * * 6 명령어
매일 오후 4,5,6시 0 4-6 * * * 명령어
매일 2시간 간격으로 5분대에 5 */2 * * * 명령어
매월 1일 새벽 1:15 15 1 1 * * 명령어
1,7월 1일 새벽 0:30 30 0 1 1,7 * 명령어

4) /etc/crontab 파일로 설정
매시 1회 자동실행하기 위한 시스템 크론 설정

01 * * * * root run-parts /etc/cron.hourly
- 매일 매시 01분마다 /etc/cron.hourly 디렉토리내에 존재하는 파일들을 실행


매일 1회 자동실행하기 위한 시스템 크론설정

02 4 * * * root run-parts /etc/cron.daily
- 매일 새벽 4시 02분마다 /etc/cron.daily 디렉토리내에 존재하는 파일들을 실행

매주 1회 자동실행하기 위한 시스템 크론설정

22 4 * * 0 root run-parts /etc/cron.weekly
- 매주 일요일 새벽 4시 22분마다 /etc/cron.weekly 디렉토리내에 존재하는 파일들을 실행

매월 1회 자동실행하기 위한 시스템 크론설정

42 4 1 * * root run-parts /etc/cron.monthly
->매월 1일 새벽 4시 42분마다 /etc/cron.monthly 디렉토리내에 존재하는 파일들을 실행


* root 이외의 사용자에게 crontab 명령어를 이용할 수 있게 하는 방법

- /etc/cron.allow 파일에 사용자의 id를 등록


* 일반사용자의 crontab 명령어사용을 제안하고자 한다면
- /etc/cron.deny 파일에 사용자의 id 를 등록

3. FAQ

1) cron 설정한 후에는 crond 데몬을 재실행해야 하나요?

아닙니다. crontab -e 으로 설정 후 빠져나오면 바로 적용됩니다.
2) truefeel 사용자는 cron을 못 쓰게 하고 싶습니다.
/etc/cron.allow : 허용할 사용자 ID 목록
/etc/cron.deny : 거부할 사용자 ID 목록
cron.allow 파일이 있으면 이 파일에 들어있는 ID만 사용 가능
cron.deny 파일이 있으면 이 파일에 들어있는 ID는 사용 불가
따라서 cron.deny에 truefeel ID를 추가해주면 됩니다.
3) > /dev/null 2>&1 이 무슨 뜻입니까?
지정한 명령어 처리 결과와 발생할지 모르는 에러메시지를 출력하지 않고 모두 버린다는(/dev/null)는
뜻입니다. 만약 결과와 에러를 파일로 저장하려면 /dev/null 대신 파일명을 적어주면 됩니다

2009년 9월 16일 수요일

mysqldump - feedtome님의 노트

mysqldump - feedtome님의 노트


8.10. mysqldump - 데이터 베이스 백업 프로그램

mysqldump 클라이언트는 Igor Romanenko가 작성한 백업 프로그램이다. 이것은 데이터베이스를 덤프하거나 또는 백업 또는 데이터를 다른 SQL 서버(MySQL서버가 아닌)에 전달하기 위해서 데이터 베이스를 모을 때 사용하는 프로그램이다. 덤프에는 테이블을 생성하거나 또는 안주(populate)시키기 위한 SQL명령문이 포함되어 있다.

만일 여러분이 서버에서 백업을 진행하고 있고, 또한 여러분이 사용하는 테이블이 MyISAM 테이블이라면, mysqlhotcopy를 대신 사용하는 것이 좋은데, 그 이유는 이것이 보다 빠른 백업과 복원을 실행하기 때문이다. Section 8.11,mysqlhotcopy 데이터 베이스 백업 프로그램”을 참조할 것.

mysqldump를 호출하는 데에는 일반적으로 세 가지 방법이 있다:

          shell> mysqldump [options] db_name [tables]
          shell> mysqldump [options] --databases db_name1 [db_name2 db_name3...]
          shell> mysqldump [options] --all-databases

If you do not name any tables following db_name or if you use the --databases or --all-databases option, entire databases are dumped.

To get a list of the options your version of mysqldump supports, execute mysqldump --help.

만일 mysqldump --quick 또는 --opt 옵션이 없이 사용한다면, mysqldum는 결과를 덤프하기 전에 전체 결과 셋을 메모리로 읽어오게 된다. 만일 대형 데이터 베이스를 덤프할 경우에는 이것은 문제가 된다. --opt 옵션은 디폴트로 활성화 되어 있으나, --skip-opt로 비활성화 시킬 수가 있다.

만일 여러분이 최근의 mysqldump 프로그램을 사용해서 구형 MySQL 서버로 덤프를 실행하고자 한다면, --opt 또는 --extended-insert 옵션을 사용하지 말도록 한다. 대신에 --skip-opt 옵션을 사용한다.

mysqldump는 아래의 옵션을 지원한다:

  • --help, -?

도움말을 출력하고 빠져 나온다.

  • --add-drop-database

DROP DATABASE 명령문은 각각의 CREATE DATABASE 명령문 전에 추가 한다.

  • --add-drop-table

DROP TABLE 명령문을 각각의 CREATE TABLE 명령문 전에 추가한다.

  • --add-locks

Surround each table dump with LOCK TABLES UNLOCK TABLES 명령문을 사용해서 각각의 테이블 덤프를 둘러 싼다(surround). 이렇게 하면 덤프 파일을 다시 읽어올 때 보다 빠른 삽입을 실행할 수가 있다. Section 7.2.16,INSERT 명령문의 속도”를 참조.

  • --all-databases, -A

모든 데이터 베이스에 있는 모든 테이블을 덤프한다. 이것은 --databases 옵션을 사용해서 명령어 라인에서 모든 데이터 베이스 이름을 입력하는 것과 동일한 기능을 실행한다.

  • --allow-keywords

키 워드 이름을 사용해서 컬럼을 생성하는 것을 허용한다.

  • --character-sets-dir=path

문자 셋이 설치되어 있는 디렉토리. Section 5.11.1, “데이터 및 정렬을 위해 사용되는 문자 셋”를 참조할 것.

  • --comments, -i

프로그램 버전, 서버 버전, 그리고 호스트와 같은 추가적인 정보를 덤프 파일에 기록한다. 이 옵션은 디폴트로 활성화 된다. --skip-comments를 사용하면, 디폴트 활성화를 없앨 수 있다.

  • --compact

간략한 결과를 만들게 한다. 이 옵션은 코맨트를 없애주며 --skip-add-drop-table, --no-set-names, --skip-disable-keys, 그리고 --skip-add-locks 옵션을 활성화 시킨다.

  • --compatible=name

다른 데이터 시스템 또는 구형 MySQL 서버와의 호환성을 보다 많이 갖도록 결과를 만든다. name의 값은 ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options, no_table_options, 또는 no_field_options가 될 수 있다. 여러 개의 값을 사용하기 위해서는, 각각을 콤마로 구분시킨다. 이러한 값들은 서버 SQL 모드를 설정하기 위한 대응 값들과 동일한 의미를 갖게 된다. Section 5.2.5,서버 SQL 모드”를 참조할 것.

이 옵션은 다른 서버와의 호환성을 보장하지는 않는다. 단지 덤프를 한 결과가 다른 SQL 서버와 호환성을 보다 많이 가지도록 만들어줄 뿐이다. 예를 들면, --compatible=oracle는 오라클 타입의 데이터 또는 코멘트 신텍스와 매핑되는 것은 아니다.

  • --complete-insert, -c

컬럼 이름을 가지고 있는 완벽한 INSERT 명령문을 사용한다.

  • --compress, -C

클라이언트 및 서버가 압축을 지원할 경우, 두 서버간에 전달되는 정보를 압축한다.

  • --create-options

CREATE TABLE 명령문에 모든 MySQL 관련 테이블 옵션을 포함시킨다.

  • --databases, -B

여러 개의 데이터 베이스를 덤프한다. 일반적으로, mysqldump는 명령어라인에 있는 첫 번째 이름을 데이터 베이스 이름을 간주하고 그 다음의 이름을 테이블 이름으로 간주한다. 이 옵션을 사용하면, 모든 이름 인수를 데이터 베이스 이름으로 간주하게 된다. CREATE DATABASE USE 명령문은 각각의 새로운 데이터 베이스 전에 결과에 포함된다.

  • --debug[=debug_options], -# [debug_options]

디버깅 로그를 작성한다. debug_options 스트링은 종종 'd:t:o,file_name'가 된다. 디폴트는 'd:t:o,/tmp/mysqldump.trace'.

  • --default-character-set=charset_name

charset_name를 디폴트 문자 셋으로 사용한다. Section 5.11.1, “데이터 및 정렬을 위해 사용되는 문자 셋”을 참조. 만일 지정하지 않으면, mysqldump utf8를 사용한다.

  • --delayed-insert

INSERT DELAYED 명령문을 INSERT 명령문 대신에 작성한다.

  • --delete-master-logs

마스터 리플리케이션 서버에서, 덤프 연산을 실행한 후에 바이너리 로그를 삭제한다. 이 옵션은 자동으로 --master-data를 활성화 시킨다.

  • --disable-keys, -K

각각의 테이블에 대해서, INSERT 명령문을 /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; 그리고 /*!40000 ALTER TABLE tbl_name ENABLE KEYS */; 명령문을 사용해서 둘러싼다(surround). 이것은 모든 열이 삽입된 후에 인덱스가 생성되기 때문에 덤프 파일을 읽어 오는데 보다 빠른 속도가 나오게 된다. 이 옵션은 MyISAM 테이블에 대해서만 효과가 있다.

  • --extended-insert, -e

여러 개의 VALUES 리스트를 가지고 있는 다중-열 INSERT 신텍스를 사용한다.이렇게 하면 덤프 파일이 작아지고 파일을 다시 읽어 올 때 삽입 속도를 빠르게 할 수가 있다.

  • --fields-terminated-by=..., --fields-enclosed-by=..., --fields-optionally-enclosed-by=..., --fields-escaped-by=..., --lines-terminated-by=...

이들 옵션은 -T 옵션과 함께 사용되며 LOAD DATA INFILE에 대한 대응 구문과 같은 의미를 가진다. Section 13.2.5, “LOAD DATA INFILE 신텍스”를 참조.

  • --first-slave, -x

기능 삭제됨. 현재는 --lock-all-tables로 바뀌었음.

  • --flush-logs, -F

덤프를 시작하기 전에 MySQL 서버 로그 파일을 플러시한다. 이 옵션은 RELOAD 권한을 필요로 한다. 만일 여러분이 이 옵션을 --all-databases (또는 -A) 옵션과 함께 결합해서 사용한다면, 로그는 각각의 덤프된 데이터 베이스에 대해서 플러시 된다는 점을 알아야 한다. 한가지 예외는 --lock-all-tables 또는 --master-data를 사용하는 경우이다: 이와 같은 경우, 로그는 모든 테이블이 잠기는 시점에 오직 한번만 플러시된다. 만일 동일한 시점에 덤프 및 로그 플러시가 일어나도록 하기 위해서는, --flush-logs --lock-all-tables 또는 --master-data와 함께 사용하도록 한다.

  • --force, -f

테이블 덤프를 하는 동안 SQL 에러가 발생하더라도 계속 진행 시킨다.

  • --host=host_name, -h host_name

주어진 호스트에 있는 MySQL 서버에서 데이터를 덤프한다. 디폴트 호스트는 localhost.

  • --hex-blob

16진법(hexadecimal)을 사용해서 바이너리 컬럼을 덤프한다 (예를 들면, 'abc' 0x616263가 된다). 이렇게 할 수 있는 데이터 타입은 BINARY, VARBINARY, 그리고 BLOB가 된다. MySQL 5.0.13까지는, BIT 컬럼도 해당된다.

  • --ignore-table=db_name.tbl_name

주어진 테이블을 덤프하지 않는데, 이것은 데이터 베이스 및 테이블 이름을 사용해서 지정해야 한다. 여러 개의 테이블을 무시하기 위해서는, 이 옵션을 여러 번 사용한다.

  • --insert-ignore

INSERT 명령문을 IGNORE 옵션과 함께 작성한다

  • --lock-all-tables, -x

모든 데이터 베이스에 걸쳐서 모든 테이블을 잠근다. 이것은 전체 덤프 주기에 대한 글로벌읽기 잠금을 통해 얻을 수 있다. 이 옵션은 자동으로 --single-transaction --lock-tables를 오프(Off)시킨다.

  • --lock-tables, -l

덤프를 하기 전에 모든 테이블을 잠근다. MyISAM 테이블의 경우에는 동시 삽입을 허용하기 위해서 테이블을 READ LOCAL로 잠근다. InnoDB BDB와 같은 트랜젝션이 되는 테이블의 경우, --single-transaction이 보다 좋은 옵션이 되는데, 그 이유는 이것은 테이블을 전혀 잠글 필요가 없기 때문이다.

여러 개의 데이터 베이스를 덤프할 때에는, --lock-tables은 각각의 데이터 베이스에 대해서 테이블을 개별적으로 잠근다는 점을 알아두기 바란다. 따라서, 이 옵션은 덤프 파일에 있는 테이블이 데이터 베이스간에 논리적으로 일관성을 가지는 것에 대해서는 보장을 하지 않는다. 서로 다른 데이터 베이스에 있는 테이블들은 완벽하게 틀린 상태에서 덤프가 된다.

  • --master-data[=value]

바이너리 로그 파일 이름과 위치(position)을 결과에 작성한다. 이 옵션은 RELOAD 권한이 필요하고 바이너리 로그는 반드시 활성화 되어야 한다. 만일 이 옵션 값이 1 이면, 그 위치 및 파일 이름은 CHANGE MASTER 명령문 형태로 덤프 결과에 작성되는데, 이것은 여러분이 슬레이브를 설정하기 위해 이 SQL 덤프를 사용하는 경우에 슬레이브 서버로 하여금 마스터의 바이너리 로그에 있는 올바른 위치에서 시작을 하도록 만든다. 만일 이 옵션 값이 2와 같다면, CHANGE MASTER 명령문은 SQL 코멘트처럼 작성된다. 만일 값이 생략되면, 이것이 디폴트 동작이 된다.

--master-data 옵션은 --single-transaction을 함께 지정하지 않는 한, --lock-all-tables를 온(ON) 시킨다 (이와 같은 경우, 글로벌 읽기 잠금은 덤프가 시작되는 짧은 시점에만 얻을 수 있다). --single-transaction에 대한 설명을 함께 참조한다. 모든 경우에, 로그 상의 모든 동작은 정확히 덤프가 일어나는 시점에 발생을 한다. 이 옵션은 자동으로 --lock-tables를 오프(Off) 시킨다.

  • --no-autocommit

각각의 덤프된 테이블에 대한 INSERT 명령문을 SET AUTOCOMMIT=0 COMMIT 명령문안에 넣는다.

  • --no-create-db, -n

이 옵션은 --databases 또는 --all-databases 옵션이 주어질 경우에 결과에 포함되는 CREATE DATABASE 명령문을 무력화 시킨다.

  • --no-create-info, -t

각각의 덤프된 테이블을 다시 생성하는 CREATE TABLE 명령문을 작성하지 않는다.

  • --no-data, -d

테이블에 대한 어떠한 열 정보도 작성하지 않는다. 이것은 테이블에 대해서 CREATE TABLE 명령문만을 덤프하고자 할 경우에 매우 유용하다.

  • --opt

이 옵션은 축약형이다; 이것은 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset를 지정하는 것과 같다. 이 옵션은 빠른 덤프 연산을 실행하며 MySQL 서버로 빠르게 다시 읽혀지는 덤프 파일을 만들어 낸다.

이 옵션은 디폴트로 활성화 되어 있지만, --skip-opt를 사용해서 비 활성화 시킬 수가 있다. opt에 의해서 활성화된 특정 옵션만을 비활성화 시키기 위해서는, 해당 옵션의 --skip 형태를 사용한다; 예를 들면, --skip-add-drop-table 또는 --skip-quick.

  • --order-by-primary

주요(primary) 키 또는 맨 처음의 유니크 인덱스(만일 인덱스가 존재한다면)를 사용해서 각각의 테이블 열을 정렬한다. 이것은 InnoDB 테이블 안으로 집어넣을 MyISAM 테이블을 덤프할 때 유용하게 사용되지만, 덤프 자체를 매우 오래 걸리게 한다.

  • --password[=password], -p[password]

서버에 접속을 할 때 사용하는 패스워드.

  • --port=port_num, -P port_num

접속용으로 사용할 TCP/IP 포트 번호.

  • --protocol={TCP|SOCKET|PIPE|MEMORY}

접속용 프로토콜.

  • --quick, -q

이 옵션은 대형 테이블을 덤프할 때 유용하다. 이것은 mysqldump로 하여금 테이블에 대한 열을 서버에서 한번에 한 열씩 추축하도록 만들고 추출한 열을 쓰기 전에 메모리에 버퍼링 하도록 만든다.

  • --quote-names, -Q

인용 부호를 사용해서 데이터 베이스, 테이블, 그리고 컬럼 이름을 둘러 쌓도록 한다. 만일 ANSI_QUOTES SQL 모드가 활성화 되어 있다면, 그 이름도 인용 부호화 시킨다. 이 옵션은 디폴트로 활성화 되어 있다. 이것은 --skip-quote-names으로 비 활성화 시킬 수 있으나, 이 옵션은 --quote-names을 활성화 시킬 수 있는 -compatible과 같은 옵션 다음에 주어져야 한다.

  • --result-file=file, -r file

주어진 파일로 결과를 직접 넣는다. 이 옵션은 윈도우에서 새 라인 문자 ‘\n’가 ‘\r\n’ 캐리지 리턴/새 라인 시퀀스로 변환되지 못하도록 하기 위해서 사용된다.

  • --routines, -R

덤프된 데이터 베이스에서 스토어드 루틴(함수 및 프로시저)를 덤프한다. --routines을 사용해서 만들어지는 결과는 CREATE PROCEDURE 루틴을 재 생성하기 위한 CREATE FUNCTION 명령문을 갖게 된다. 하지만, 이러한 명령문들은 루틴 생성 및 수정 타임 스탬프와 같은 속성을 가지지 않는다. 이것은 루틴이 리로드(reload)될 때, 리로드 시간과 동일한 타임 스탬프를 가지고서 생성된다는 것을 의미한다.

만일 여러분이 재 생성될 루틴이 원래의 타임 스탬프 속성을 가지도록 하기 위해서는, --routines를 사용하지 말도록 한다. 대신에, mysql 데이터 베이스에 대해 적절한 권한을 가지고 있는 MySQL 계정을 사용해서 mysql.proc 테이블의 내용물을 직접 덤프 및 리로드 하도록 한다.

이 옵션은 MySQL 5.0.13 에 추가되었다. 이 버전 이전에는 스토어드 루틴을 덤프할 수가 없었다. 루틴 DEFINER 값은 5.0.20 이후에 덤프가 되었다. 이것은 5.0.20 이전에는, 루틴이 리로드될 때, 리로딩 사용자에 대해서 디파이너(definer) 셋을 가지고 생성된다는 것을 의미하는 것이다. 만일 루틴이 원래의 디파이너를 가지고 재 생성되도록 하고자 한다면, 앞에서 설명한 방식으로 mysql.proc 테이블의 내용물을 직접 덤프 및 로드한다.

  • --set-charset

SET NAMES default_character_set를 결과에 추가한다. 이 옵션은 디폴트로 활성화 된다. SET NAMES 명령문을 무시하기 위해서는, --skip-set-charset를 사용한다.

  • --single-transaction

이 옵션은 서버에서 데이터를 덤프하기 전에 BEGIN SQL 명령문을 실행한다. 이것은 InnoDB BDB와 같은 트랜젝션이 되는 테이블에서만 유용한데, 그 이유는 이것이 BEGIN이 다른 어플리케이션을 블러킹하지 않은 채로 입력될 때 데이터 베이스를 일관성 있게 담프하기 때문이다.

이 옵션을 사용할 때, 여러분은 InnoDB 테이블만이 일관성 있게 덤프된다는 점을 알고 있어야 한다. 예를 들면, 이 옵션을 사용할 때 덤프되는 MyISAM 또는 MEMORY 테이블은 상태가 변경될 수도 있다.

--single-transaction 옵션과 --lock-tables 옵션은 상호 배타적인데(mutually exclusive), 그 이유는 LOCK TABLES이 암묵적으로 실행되는 트랜젝션을 연기 시키기 때문이다.

대형 테이블을 덤프하기 위해서는, 이 옵션을 quick과 결합해서 사용한다.

  • --socket=path, -S path

localhost에 접속하는 경우, 유닉스 소켓 파일 또는, 윈도우의 네임드 파이프 이름.

  • --skip-comments

--comments 옵션에 대한 설명을 참조한다.

  • --tab=path, -T path

탭으로 구분된 데이터 파일을 만든다. 각가의 덤프 테이블의 경우, mysqldump은 테이블을 생성하는 CREATE TABLE 명령문을 갖는 tbl_name.sql 파일과, 그것의 데이터를 가지고 있는 tbl_name.txt 파일을 생성한다. 이 옵션 값은 파일을 작성하는 디렉토리가 된다.

디폴트로는t, .txt 데이터 파일이 컬럼 값과 각 라인의 끝에 있는 새 라인(newline) 값 사이에 탭 문자를 사용해서 포맷된다. 이 포맷은 --fields-xxx --lines--xxx 옵션을 사용해서 명확하게 지정될 수 있다.

Note: 이 옵션은 mysqldump mysqld 서버가 구동되는 서버에서 실행될 때에만 사용될 수 있다. 여러분은 반드시 FILE 권한이 있어야 하고, 또한 서버는 반드시 여러분이 지정하는 디렉토리에 파일을 작성할 수 있어야 한다.

  • --tables

--databases 또는 -B 옵션을 무력화 시킨다. 이 옵션 다음에 나오는 모든 이름 인수는 테이블 이름으로 간주된다.

  • --triggers

각각의 덤프 테이블에 대한 트리거를 덤프한다. 이 옵션은 디폴트로 활성화 되어 있다; --skip-triggers로 비 활성화 시킬 수 있다.이 옵션은 MySQL 5.0.11 에 추가 되었다. 이전에는, 트리거를 덤프할 수 없었다.

  • --tz-utc

SET TIME_ZONE='+00:00'를 덤프 파일에 추가해서 TIMESTAMP 컬럼이 서로 다른 타임 존에 있는 서버간에 덤프되고 리로드될 수 있도록 한다. 이 옵션을 사용하지 않으면, TIMESTAMP 컬럼은 로컬 및 목적 서버의 타임 존에 덤프 및 리로드 되고, 이 결과로 인해 값이 변하게 된다. --tz-utc는 디폴트로 활성화 되어 있고, --skip-tz-utc를 사용해서 비활성화 시킬 수가 있다. 이 옵션은 MySQL 5.0.15 에서 추가 되었다.

  • --user=user_name, -u user_name

서버에 접속할 때 사용되는 MySQL 사용자 이름.

  • --verbose, -v

버보스 모드 (Verbose mode). 프로그램이 실행하는 정보를 보다 자세히 출력한다.

  • --version, -V

버전 정보를 출력하고 빠져 나온다.

  • --where='where_condition', -w 'where_condition'

주어진 WHERE 조건문에 의해 선택된 열만을 덤프한다. 만일 스페이스 또는 다른 문자가 여러분이 사용하는 명령어 해석기에서 특별하게 인식되는 경우에는 인용부호를 사용해야 한다.

Examples:

          --where="user='jimf'"
          -w"userid>1"
          -w"userid<1"
  • --xml, -X

덤프 결과를 XML 형태로 출력한다.

또한, --var_name=value 신텍스를 사용해서 아래의 변수를 지정할 수도 있다:

  • max_allowed_packet

클라이언트/서버 통신용 버퍼의 최대 크기. 최대 크기는 1GB.

  • net_buffer_length

클라이언트/서버 통신용 버퍼의 초기 크기. 다중--삽입 명령문을 생성할 때 (--extended-insert or opt 옵션을 사용하는 것과 같이), mysqldump는 열을 최대 net_buffer_length 길이 만큼 만든다. 만일 여러분이 이 변수의 값을 늘린다면, MySQL 서버에 있는 net_buffer_length 변수가 최소한 이 만큼의 크기가 되는지를 확인해야 한다.

mysqldump의 가장 일반적인 사용은 아마도 전체 데이터 베이스에 대한 백업용일 것이다:

          shell> mysqldump --opt db_name > backup-file.sql

또한 덤프 받은 파일을 아래와 같이 서버로 다시 읽어 올 수도 있다:

          shell> mysql db_name < backup-file.sql

또는 아래와 같이 한다:

          shell> mysql -e "source /path-to-backup/backup-file.sql" db_name

mysqldump는 또한 하나의 MySQL 서버에서 다른 MySQL 서버로 데이터를 복사해서 데이터 베이스를 안주 시키기 위한 용도로 매우 유용하게 사용할 수가 있다:

          shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name

하나의 명령어를 사용해서 여러 개의 데이터 베이스를 덤프하는 것도 가능하다:

          shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql

모드 데이터 베이스를 덤프하기 위해서는, --all-databases 옵션을 사용하면 된다:

          shell> mysqldump --all-databases > all_databases.sql

InnoDB 테이블의 경우, mysqldump는 온라인 백업이 가능하도록 한다:

          shell> mysqldump --all-databases --single-transaction > all_databases.sql

이 백업은 덤프가 시작되는 시점에 모든 테이블에서 글로벌 읽기 잠금만 있으면 된다 (FLUSH TABLES WITH READ LOCK). 이 잠금이 이루어지면 즉시, 바이너리 로그는 읽혀지고 잠금이 릴리즈 된다. 만일 FLUSH 명령문이 실행될 때 하나의 기다란 업데이트 명령문이 구동된다면, MySQL 서버는 이 명령문이 종료할 때까지 기다리게 되고, 덤프 연산은 잠금을 풀어 버린다. 만일 MySQL 서버가 받은 업데이트 명령문이 짧은 실행을 하는 것이라면, 초기의 잠금 기간(period)은 크게 중요하지 않게 된다.

포인트-인-타임 복구(point-in-time recovery) ( “롤-포워드(roll-forward)”라고도 알려짐)에 대해서는, 바이너리 로그를 순환(rotate)시키거나, 또는 최소한 덤프가 대응하는 바이너리 로그 코디네이트(coordinate)를 아는 것이 유용하다:

          shell> mysqldump --all-databases --master-data=2 > all_databases.sql

또는:

          shell> mysqldump --all-databases --flush-logs --master-data=2
                        > all_databases.sql

--master-data --single-transaction를 동시에 사용하면 테이블이 InnoDB 스토리지 엔진에 저장되어 있는 경우에 포인트-인-타임 복구에 대해서 적절한 온라인 백업을 만들 수가 있게 된다.