Reminiscence

PGSQL Backup 명령어

Linux2006.04.06 09:52

질답란에 pg_restore 이야기 있어 잠깐 살펴보았는데,

이 멋진 프로그램이 7.1 버전부터 있었다는 것에 놀랐습니다.


늘 pg_dump mydb > mydb.sql ; psql -f mydb.sql mydb

이런식으로 백업과 복구를 했었는데,

pg_restore 놈이 이렇게 참한 놈이였음을 누군가가 이야기 해주었다면, :(


이야기 시작합니다.


pg_restore 명령은 pg_dump -F{c|t} 명령에 의해서 만들어진 덤프 파일을 사용합니다.

이 명령으로 거의 모든 객체를 개별적으로 복구시킬 수 있습니다.

테이블(-t), 인덱스(-I), 함수(-P), 트리거(-T)는 기본적으로 명령행 옵션으로 지정할 수 있으며, -L 명령을 이용해서 개별적으로 지정한 하나하나씩 섬세하게 복구할 수도 있습니다.

(하나 아쉬운 것은 특정 스키마(namespace) 전체를 쉽게 복구할 방법은 없네요.)

스키마(namespace)단위로 관리된다면, pg_dump 를 사용할 때, -n 옵션으로 개별적으로 덤프받으시길 바랍니다.


pg_restore에서 사용할 파일 만들기 예제:

pg_dump -h localhost -U postgres -Fc -f mydb.backup mydb

(mydb 데이터베이스 전체를 백업 받습니다)

pg_dump -h localhost -U postgres -Ft -f mydb.backup mydb

(윗 명령과 동일한데, mydb.backup 파일의 사이즈가 커집니다. 대신 복구할 때 압축을 풀지 않으니 좀 더 빠르겠지요)

pg_dump -h localhost -U postgres -Ft -f mydb.backup -n ioseph mydb

(mydb 데이터베이스에서 ioseph schema 영역의 자료만 백업받습니다)

pg_dump -h localhost -U postgres -Ft -f mydb.backup -t zipcode mydb

(mydb 데이터베이스에서 zipcode 테이블만 백업 받습니다)


다음 pg_restore 로 복구하기.


먼저 덤프 받은 backup 파일의 내용을 보려면, -l 옵션을 이용합니다.


pg_restore -l mydb.backup


나중에 이 내용을 기반으로 특정 부분만 따로 복구해야할 상황이면, 이 출력되는 내용을 파일로 저장해두어야합니다.


pg_restore -l mydb.backup > mydb.toc

또는

pg_restore -l -f mydb.toc mydb.backup



다음,

일단 데이터베이스가 없다면, 데이터베이스부터 만들어야합니다.

데이터베이스를 만드려면, 일단 접속할 수 있는 기본 데이터베이스를 지정해야합니다.


pg_restore -h localhost -U postgres -Ft -C -d template1 mydb.backup

(mydb 데이터베이스를 일단 만들고 mydb.backup 안에 있는 내용을 복구합니다.)


기본적으로 -d 옵션을 지정하지 않으면, 표준 출력으로 쿼리를 보냅니다.

pg_restore -Ft mydb.backup > mydb.sql

즉, mydb.sql 의 내용은 pg_dump mydb > mysql.sql 명령에 의해서 만들어지는 내용과 동일합니다.

즉, 이 backup 파일의 내용을 복구시키려면, -d 옵션으로 해당 데이터베이스를 지정해 주어야합니다.


pg_restore -h localhost -U postgres -Ft -d mydb mydb.backup


다음은 toc 파일을 이용한 부분 복구


윗 부분에서 pg_restore -l -f mydb.toc mydb.backup 명령으로 만들어진 mydb.toc 파일을 열어서

복구하지 않아도 되는 부분의 자료 맨 앞에 ; 표시를 해 두거나 그 줄을 삭제 하면 됩니다.


그리고,

pg_restore -h localhost -U postgres -L mydb.toc -d mydb mydb.backup

이런식으로 복구합니다.


마무리하며,

pg_restore 명령을 사용해보면서, 이 명령어를 내부적으로 사용하는 gui 툴을 하나 만들어도 참할 것 같다는 생각이 들더군요.


----------------------------------------------------------------------------------

PGSQL이든 MySQL이든 다 배워놔야지 -_-

Comment +0

PHP5의 새로운 기능

변역자 - 김영진(cogolda@hanmail.net)

이 문서는 http://www.zend.com/php5/andi-book-excerpt.php/ 의 내용을 제가 번역,
수정한 내용입니다. 질문이나 의견 있으신 분은 이메일이나 코멘트를 이용해 주시면
감사하겠습니다. 부분적으로 귀찮아서 생략한 부분도 있는데, 꾸준히 보강하겠습니다.
이 문서는 php5에 관심있는 모든 프로그래머를 위해 씌여졌습니다.

목차

  1. 소개
  2. 언어 특징
  3. 새로운 객체지향 모델
  4. 새로운 객제지향 특징
  5. 다른 새로운 언어 특징
    • 일반적인 언어 변화
      • XML과 웹 서비스
      • 새로운 MySQLi(MySQL) 확장
      • SQLite 확장
      • Tidy 확장
      • Perl 확장
      • PHP 5에서 다른 새로운 부분
    • 요약

    미래를 준비하는 가장 좋은 방법은 미래와 직면하는 것이다.(존 스컬리)

    1. 소개

    만약 PHP 5가 이전 버전(php 3, php 4)처럼 성공할 것인지는 시간이 말해 줄 것이다. 모든
    단점의 PHP를 제거하기 위한 목적 바뀐 새로운 특징과 변화는 전세계에서 최고의 웹
    스크립트 언어로서 선도적인 위치를 지킬 것이다. 이 책은(이 문서는 PHP 5 Power
    Programming라는 책의 2장입니다) PHP 5를 다루고 있고, 자세하게 새로운 특징도 있다.
    그렇지만, PHP 4에 익숙한 사람들을 위해 PHP 5에서 새로운 점을 알고 싶은 사람을 위해
    이 장을 썼다.

    2. 언어 특징

    새로운 객체 지향 모델
    지브 사라스키(Zeev Suraski, 일본인?)가 PHP 3시절에 객체 지향 문법을 추가했을 때,
    그것은 객체에 접근하기 위한 문법적인 설탕처럼 추가했다. 객체지향 모델은 상속을
    지원했고 메소드와 속성을 둘 다 합치기 위해 클래스를 만들었다. 그러나 그 이상은
    아니었다. 지브와 앤디가 php 4를 위한 스크립트 엔진을 다시 작성할 때, 그것은 완전히
    새로운 엔진이었고, 보다 빠르게 돌아갔고, 보다 많은 특징에 적합했다. 그렇지만 객체
    지향 모델은 PHP 3에서 처음 도입되었고, 미숙한 부분이 있었다.

    비록 객체 모델이 심각한 한계가 있었지만 그것이 큰 규모의 PHP 어플리케이션으로
    전세계에서 확산되어 사용되었다. 그것이 단점에도 불구하고 PHP 4로 OOP 패러다임의
    인상적인 사용은 PHP 5 버전을 위한 주요 관심이 되었다.

    PHP 3 & 4의 한계가 무엇인가? 가장 큰 단점은 객체의 복사 의미가 네이티브 타임을
    위한것과 같다는 사실이다. PHP 개발자에게 어떠한 영향을 미쳤는가? 우리가 변수를
    (객체에 대한 참조) 다른 변수에 할당할 때, 객체의 복사는 생성된다. 이것은 강한 성능
    뿐만 아니라 php4 어플리케이션에서 버그를 유발한다. 왜냐하면 많은 개발자는 변수

    예를 들면

    class Person {
    var $name;



    function getName() {
    return $this->name;
    }

    function setName($name) {
    $this->name = $name;
    }
    function Person($name) {
    $this->setName($name);
    }
    }
    function changeName($person, $name)
    {
    $person->setName($name);
    }
    $person = new Person("Andi");
    changeName($person, "Stig");
    print $person->getName();

    php4에서 이런 코드는 “Andi”를 출력한다. 이 이유는 우리가 변수로 changeName() 함수에
    객체 $person을 넘기고, 그래서, $person은 복사되고 changeName()은 $person의
    복사에서 작업한다. 이런 동작은 자바 같은 동작을 기대했던 많은 개발자에게는
    직관적이지 않다. 자바에서 변수는 정확이 핸들(또는 포인터)을 객체에 붙들고 있다.
    그러므로 그것은 단지 핸들만 복사될 뿐 전체 객체는 복제되지 않는다.

    PHP 4에서 사용자는 두가지 부류가 있다, 이런 문제를 인식하는 개발자와 인식하는
    개발자이다.

    구형 객체 모델은 위에 말한 문제를 유발할 뿐만 아니라 존재하는 객체 모델의 상위에
    추가적인 특징을 구현하는데 방해되는 기본적인 문제를 유발하기도 한다.

    PHP 5에서, 객체 모델의 기반은 객체 핸들로 다시 작성되었고, 여러분이 clone 키워드를
    사용하여 객체의 클론을 명시하지 않는 한, 여러분은 여러분의 객체의 내부에서 절대 만들
    지 않는다. PHP5에서 참조로 객체를 넘기는 것이 필요하지 않고 참조로 그것은 할당하지도
    않는다.

    알아두기:참조로 넘기는 것과 참조로 할당하는 것은 여전히 지원한다. 이경우에 여러분은
    변수의 내용을(객체나 다른 타입) 정확히 바꾸기를 원한다.

    새로운 객체 지향 특징
    새로운 객체지향 특징은 이 절에서 상세히 설명하기에 너무 방대하다. 객체지향 언어
    챕터에서 자세히 나와있다.주로 새로운 특징 목록은 밑에 나열해 놓았다.

    1. 메소드와 속성을 위한 public/private/protected 접근 수정자

    일반적인 OO 접근 수정자의 사용은 메소드나 속성에 접근을 제어하게 해준다.

    class MyClass {     
    private $id;
    public function getId()
    {
    return $this->id;
    }
    }

    2. 유일(unified) 생성자 이름 __construct()

    클래스의 이름이 되는 생성자 대신에, 이제는 __construct()로 선언 된다. 클래스 계층
    안에서 클래서의 이동을 쉽게 만든다.

    class MyClass {     
    function __construct()
    {
    print "생성자 내부";
    }
    }

    3. __destructor() 메소드를 정의함으로서, 객체 소멸자를 지원한다.

    객체가 파괴될 때, 실행되던 소멸 함수를 정의가 허락한다.

    <? 
    class MyClass {
    function __destruct() {
    print "객체 파괴";
    }
    }

    ?>

    4. 인터페이스

    is-a 관계 보다 완전하게 하기 위한 클래스를 위한 능력을 준다. 클래스는 한 클래스로
    부터 상속받을 수 있으나 그것이 원하는 것처럼 많은 인터페이스처럼 구현하지는 않는다.

    interface Display {     
    function display();
    }
    class Circle implements Display {
    function display() {
    print "Displaying circle";
    }
    }

    5. instanceof 연산자

    is-a 관계 확인을 위해 언어 수준의 지원. Php4의 is_a() 함수는 지금 비난받는다.

    if ($obj instance of Circle) {     print '$obj 은 Circle'; }

    6. final 메소드

    final 메소드 키워드는 여러분이 상속하는 클래스가 그것을 오버로드 할수 없는 것을
    표시하는 메소드이다.

    class MyClass {     
    final function getBaseClassName() {
    return __CLASS__;
    }
    }

    7. final 클래스

    final로서 클래스를 선언하고, 그것은 상속할 수 없다. 다음과 같은 예제는 에러를 내보인다.

    final class FinalClass { } class BogusClass extends FinalClass { }

    8. 명시 객체 복제(cloning)

    객체를 복제하기 위해, 여러분들은 clone 키워드를 사용해야 한다. 여러분은 아마 복제
    처하는 동안 호출될 __clone() 메소드를 선언했을 것이다.

    class MyClass {     
    function __clone() {
    print "Object is being cloned";
    }
    }
    $obj = new MyClass(); // 이것은 인스턴스를 만들고 clone $obj;        
    // 이것은 객체를 복제함

    9. 클래스 상수

    클래스 정의는 상수를 포함 할 수있고, 클래스를 이용하여 참조된다

    class MyClass {     
    const SUCCESS = "Success";
    const FAILURE = "Failure";
    } print MyClass::SUCCESS;

    10. 정적 멤버

    클래스 정의는 이제 클래스를 통해 접근 가능한 정적 멤버(속성)를 포함 할 수있다. 정적 멤버의 일반적인 사용은 독자 패턴에서 이다.

    class Singleton {     
    static $instance = NULL;
    function getInstance() {
    if ($this->instance == NULL) {
    $this->instance = new Singleton();
    } return $this->instance;
    }
    }

    11. 정적 메소드

    여러분은 이제 비객체 문맥으로부터 호출되는 것 허락하게하는 정적으로 메소드를 정의할
    수 있다. 정적 메소드는 그들이 모든 특정 객체에 묶이지 않고 $this 변수를 정의 하지
    않는다.

    <? 
    class MyClass {
    static function helloWorld() {
    print "Hello, world";
    }
    } MyClass::helloWorld();
    ?>

    12. 추상 클래스

    클래스는 인스턴스되는것으로부터 그것을 방해하기 위해 추상으로 선언될 수 있다.
    그렇지만, 여러분들은 추상 클래스로부터 상속할 수 있다.

    abstract class MyBaseClass {     
    function display() {
    print "Default display routine being called";
    }
    }

    13. 추상 메소드

    메소드가 추상으로 선언되고, 그 때문에 상속하는 클래스에 그 정의를 양보한다.
    추상메소드를 포함하는 클래스는 추상으로 선언된다.

    abstract class MyBaseClass {     
    abstract function display();
    }

    14. 클래스 타입 힌트

    함수 선언은 파라미터를 위해 클래스 타입 힌트를 포함하기도 한다. 만약 함수가 부적절한
    클래스 타입으로 호출되면, 에러가 발생한다.

    function expectsMyClass(MyClass $obj) { }

    15. 메소드에서 리턴되는 역참조(defrferencing)를 지원한다.

    PHP 4, 여러분은 메소드로부터 반환되는 객체를 반참조할수 없었다. 여러분은
    더미(dummy 변수에 첫 객체를 할당해야하고, 그것을 역참조 한다.

    PHP 4:$dummy = $obj->method(); 
    $dummy->method2();
    PHP 5:$obj->method()->method2();

    16. 반복자(Iterators)

    php5는 php 클래스와 php 확장 클래스 둘 다 반복자 인터페이스을 구현하게 해준다.
    여러분은 여러분이 foreach() 언어 생성자를 사용으로 클래스의 인스턴스를 반복할수
    있을 인터페이스를 구현한다.

    $obj = new MyIteratorImplementation(); 
    foreach ($obj as $value) {
    print "$value";
    }
    function __autoload($class_name) {
    include_once($class_name . "php");
    }
    $obj = new MyClass1();
    $obj2 = new MyClass2();

    이상 새롭게 강화된 객체지원에 관해 나열했는데, 쉽게 애기하면, 자바만큼 객체를 지원한다.
    대략 이런 애기입니다.

    다른 새로운 언어 특징
    1. 예외 핸들링

    PHP 5에서 잘 알고있는 try/throw/catch/ 구조적 예외 처리 개념을 추가했다. 여러분은
    Exception 클래스에서 상속한 객체를 던지게(throw) 만들 수 있다. (자바 써 보신 분은
    대단히 반가워 할 내용입니다. 이제 if문을 줄이자!)

    class SQLException extends Exception {     
    public $problem;
    function __construct($problem) {
    $this->problem = $problem;
    }
    }
    try {
    ...
    throw new SQLException("Couldn’t connect to database");
    ...
    } catch (SQLException $e) {
    print "Caught an SQLException with problem $obj->problem";
    } catch (Exception $e) {
    print "Caught unrecognized exception";
    }

    현재, 이전버전과 호환성 목적을 위해, 대부분의 내부 함수는 예외로 던질 수 없다. 이미
    존재하는 set_error_handler()과 비슷하게, 여러분은 스크립트 종료전에 처리할 수 없는
    예외를 잡기위해 set_exception_handler()를 사용한다.

    2. 참조를 이용한 foreach

    php4에서 여러분은 그 배열을 통해 반복하거나 그 변수를 수정할수 없었다.
    Php5는 ‘&’(reperence) 표시로 foreach() 반복문을 표시함으로서 지원한다.

    foreach ($array as &$value) {
    if ($value === "NULL")
    {
    $value = NULL;
    }
    }

    3. 참조 인자를 위한 디폴트 변수

    php4에서 디폴트 변수는 변수로 넘겨지는 파라미터만 주어졌다. 참조 파라미터로
    넘지겨지는 디폴트 변수를 주는 것은 지금 지원된다.

    function my_func(&$arg = null) {
    if ($arg === NULL) {
    print '$arg is empty';
    }
    } my_func();

    3.일반적인 PHP 변화

    XML과 웹 서비스
    언어에서 다음과 같은 변화로는, php5에서 XML 업데이트는 아마도 중요하고 멋진것이다. Php5에서, 강화된 XML 기능은 다른 언어와 비교해서 동등하거나 따라잡았다.

    기반
    php4에서 xml지원은 다양한 바탕 XML 라이브러리를 사용하여 구현되었다. SAX 지원은
    오래된 Expat 라이브러리를 사용하여 구현 되었고, XSLT는 Sablotron 라이브러리를
    사용하여 구현되었고, DOM은 그놈(GNOME) 프로젝트에 의해 보다 강력한 libxml2
    라이브러리를 사용하여 구현되었다. 다양한 라이브러리의 사용은 그것이 xml 지원할때
    php4를 뛰어나게 만들지 못했다. 관리가 어설펐다(poor). 새로운 XML 표준은 항상
    지원되지 않았고, 성능은 그것을 가졌을 때 만큼 좋진 않았고, 다양한 XML 확장 사이에
    상호운영성은 존재하지 않았다.

    Php 5에서 모든 XML 확장은 suberb libxml2 XML toolkit(http://www.xmlsoft.org)을
    사용하여 재작성되었다. 그것은 관리하기 좋고 XML 기술을 php로 가져오는 XML 표준의
    효과적인 구현하는 매우 다양한 특징이 있다.
    이상 언급한 확장(SAX, DOM 그리고 XSMT)는 지금 새로운 추가 확장 SimpleXML과
    SOAP을 포함하는 libxml2를 사용한다.

    SimpleXML
    아마도 1-2년 전으로 뒤돌아 보면, SimpleXML이 XML 파일로 작업하는 php 개발자에게
    혁명임이 명확하다. SimpleXML은 정말 바보(dummies)를 위한 XML로 불려졌다. DOM과
    SAX로 처리하는 대신에, SimpleXML은 PHP 객체로서 XML 파일을 보여준다. 여러분은
    쉽게 접근하는 요소(elements)와 속성(attributes)를 읽고 작성하거나 반복할 수 있다.

    다음 XML 파일을 보자

    <clients> 
    <client>
    <name>John Doe</name>
    <account_number>87234838</account_number>
    </client>
    <client>
    <name>Janet Smith</name>
    <account_number>72384329</account_number>
    </client>
    </clients>

    다음의 코드는 클라이언트 이름과 계좌번호를 출력한다.

    $clients = simplexml_load_file('clients.xml'); 
    foreach ($clients->client as $client) {
    print "$client->name has account number $client->account_number ";
    }
    SimpleXML이 얼마나 간결한지 명백하다.
    SOAP
    Php4의 공식적인 SOAP지원은 부족했었다. 대부분 일반적이로 사용되는 SOAP 구현은
    PEAR이다 그러나 그것은 php에서 전체적으로 구현되었으나, C 확장과 마찬가지로
    수행할 수 없었다. 다른 이용 가능한 C 확장은 안정적이지도 널리 채택되지도 않았다.
    그러므로 php 5 배포판에 포함되지 않았다.

    Php5에서 SOAP 지원은 C 확장으로서 완벽하게 재작성되었고, 비록 그것이 늦은 단계에
    완성되었지만, 그것은 표준의 대부분의 구현 때문에, 디폴트 배포판에 협력된다.

    다음은 WSDL 파일에서 정의 된 SomeFuncion()을 호출한다

    $client = new SoapClient("some.wsdl"); 
    $client->SomeFunction($a, $b, $c);
    New MySQLi(MySQL Improved) 확장
    Php5를 위해, MySQL AB (http://www.mysql.com)은 MySQL 4.1과 그 이상버전에서,
    새로운 기능의 포든 장점을 취하는 새로운 MySQL 확장을 작성했다. 구형 MySQL 확장에
    반하여, 새로운 것은 여러분에게 함수형, 객체지향 인터페이스 둘다 사용할 수 있고,
    그래서 여러분은 여러분이 좋아하는 것을 선택할 수 있다. 이 확장으로 지원되는 새로운
    특징은 다음과 같다.
    미리 준비된 문장(Prepared statements), 가변 결속(variable binding), SSL과 압축된
    커넥션, 트랜젝션 제어, 복제(replication)…

    SQLite 확장
    SQLite(http://www.sqlite.org)의 지원은 php 4.3.x에서 처음 도입되었다. 그것은
    SQL 서버를 요구하지 않는 내장형 SQL 라이브러리이고 SQL 서버의 규모를 요구하지
    않는 어플리케이션에 매우 적합하다. 또는 만약 여러분이 ISP에서 SQL 서버에 접근할
    수 없는 경우에도 적합하다. SQLite라는 이름과는 다르게 그것은 매우 다양한 특징과
    트랜젝션, sub-select, view 그리고 대규모 DB file을 지원한다. 그것은 php 5버전으로서
    언급되었다.
    왜냐하면 그것은 php4의 뒤늦게 도입되었고, 객체지향 인터페이스와 반복자를 지원을
    제공되면서 php 5의 장점을 취했기 때문이다.

    Tidy 확장
    Php 5는 유용한 Tidy (http://tidy.sf.net/) 라이브러리를 포함한다 그것은 php 개발자가
    HTML 문서를 구문분석, 분류, 청소, 복구하도록 도와준다. Tidy 확장은 함수, 객체지향
    인터페이스를 지원하고 그것의 API는 php 5 예외 메커니즘을 사용한다.
    펄 확장
    기본 php5 패키지에서 포함되지는 않지만, 펄 확장은 여러분이 펄 스크립트를 호출하는
    것을 가능하게 한다. 펄 객체를 사용하고 다른 펄 기능을 php에서 사용할 수 있다. 이런
    새로운 확장은 PECL (PHP Extension Community Library) 저장소(repository) http://pecl.php.net/package/perl 에 있다. (php가 펄객체를 사용할 수 있다고 합니다)
    Php5에서 다른 새로운 것들
    새로운 메모리 메니저
    젠드 엔진은 새로운 메모리 관리자를 가지고 있다. 두 주요 장점은 멀티 쓰레드 환경을
    위한 지원과 각 요청 후에 할당된 메모리 블록은 보다 효율적이다.

    윈도우 95 지원의 취소
    윈도우 95 플랫폼상에 운영되는 php는 더 이상 지원되지 않는다. 왜냐하면 MS사가 윈도우
    95를 공식적으로 지원하지 않을 거라고 했기 떄문에, php 개발 공동체도 그렇게 하기로
    결정했다.

    4. 요약

    여러분은 php5에서 많은 발전이 인상적일것이다. 위에 언급했듯이, 이 챕터는 모든 발전을
    다 다루지는 않는다. 다른 추가적인 발전은 많은 버그가 수정되었고 대단히 발전했다는
    것이다.


    --------------------------------------------------------------------------------

    DOMXML땜시 미치겠구나 ..
    원본은 소스가 한줄이라 블로그 틀이 깨지더라 -_-
    수정했으3~

    Comment +0

    ZeroBoard 설치시 테이블 생성 오류가 발생 할 경우
                                                                                                작성 : Min's

    현재 nzeo.com에서 제공되는 ZeroBoard의 모든 버전이 MySQL 4.1.x 버전에서 정상적인 설치가 되지 않고 충돌이 일어나 DB에서 ZeroBoard 관련 테이블을 생성하지 못하는 문제가 발생 되고 있습니다.


    < 그림 1 - 테이블 생성 실패시 화면 >


    해당 문제의 경우 각각의 버전에 따라 약간씩 다를 수 있으나, 아래와 같은 부분을 수정하여 주시면정상적인 설치가 가능 합니다.


    1.Telnet 또는 SSH를 이용하여 WebServer에 접속을 합니다.

    # ssh 서버주소
    또는
    # telnet 서버주소

    2.Zeroboard가 있는 폴더로 이동을 합니다.
    3.vi 를 이용하여 schema.sql 파일을 열어주시면 아래와 같은 내용이 나타나게 됩니다.

    < 그림 2 - SSH접속 후 작업 화면 >


    4. pl7 의 경우 아래 그림과 같이 [게시판 관리자 테이블]부분 한 곳만 <그림3>에서 <그림4>와 같이 default '0' 을 삭제하여 수정을 하시면 되며, pl6 이하 버전의 경우 auto_increment로 검색하시어D Default '0’ not null auto_increment부분이 있는 모든 테이블 스키마를 수정하셔야 합니다.


    < 그림 3 - schema.sql 파일 수정 전 화면 >


    < 그림4 - schema.sql 파일 수정 후 화면 >

    5.수정이 완료되면 해당 파일을 저장하신 후 다시 install.php 페이지를 실행하여 주시면 정상적인 등록이 가능합니다.


    제로보드 버전이 pl6 이하 버전의 경우 셋팅되어 있는 부분을 검색하시어 모두 수정하셔야만 정상적인 셋팅이 가능합니다.

    제로보드 홈페이지 : http://nzeo.com

    Comment +0

    < SquirrelMail + Sendmail을 이용한 메일 서버 구축 매뉴얼 >


      Squirrelmail(
    이하 다람쥐메일)의 경우 현재 무료로 제공되고 있는 웹메일 프로그램입니다. 다람쥐메일은 sendmail qmail 모두 지원하며, 서버호스팅에서 기본적으로 설치되는 sendmail을 이용한 셋팅 방법에 대하여 기술 하겠습니다.


    SquirrelMail : http://squirrelmail.org
    RPM find : http://rpmfind.net/

    다람쥐 메일을 설치하기 위해서는 아래와 같은 데몬의 설치가 필요합니다.


    Sendmail(or Qmail)

    Imap (or dovecot)

    php-4.3.10.tar.gz

    squirrelmail-1.4.5 다람쥐 메일

    ko_KR-1.4.6 다람쥐메일 한글 언어팩

    Libmcrypt 다람쥐메일 설치를 위한 라이브러리

    ZendOptimizer-2.5.7-linux-glibc21 다람쥐메일 설치를 위한 라이브러리


    ※ 본 문서는 서버 호스팅 기본 설치 패키지가 설치되어 있다는 전제 하에 작성되었습니다.



    <
    설치 및 재컴파일>

    다람쥐 메일을 사용하기 위해서는 php, zendoptimizer를 재컴파일 해야 하며, libmcrypt를 설치해야 합니다.

    php에서 사용될 옵션중 --with-mcrypt를 위해 libmcrypt를 가장 먼저 설치해야 합니다.


    # tar zxvf libmcrypt-2.5.7.tar.gz

    중략

    # cd libmcrypt-2.5.7

    # ./configure

    # make

    # make install


    libmcrypt
    의 설치가 완료되었다면, 이미 설치되어 있는 php를 재컴파일 해야 합니다.

    재컴파일시 아래의 옵션을 아래 옵션을 꼭 넣어주시기 바랍니다.


    [
    옵션 ]

    --with-ldap

    --with-pear

    --with-openssl

    --with-mcrypt

    --enable-mbstring


    # tar zxvf php-4.3.10.tar.gz

    # cd php-4.3.10

    # ./configure --[기본옵션] --with-ldap --with-pear --with-openssl --with-mcrypt --enable-mbstring

    # make

    # make install

    # cp php.ini-dist $php_DIR/lib/php.ini


    PHP
    까지 재컴파일 및 설치가 완료 되었습니다. Zendoptimizer so가 아닌 source파일로 컴파일 하여 재설치 해야만 정상적인 다람쥐 메일을 구동 할 수 있습니다.


    # tar zxvf ZendOptimizer-2.5.7-linux-glibc21-i386.tar.gz

    # cd ZendOptimizer-2.5.7-linux-glibc21-i386

    # ./install


    앞으로 이지선다의 경우 모두 yes를 선택하며, php디렉토리, apache디렉토리를 입력하여 줍니다.

    ZendOptimizer의 설치가 완료되었다면, IMAP 데몬인 dovecot을 설치 해야 합니다.

    Dovecot은 각 OS버전에 따라 아래와 같이 설치 할 수 있습니다.

    Redhat : up2date i dovecot

    Fedora : yum install dovecot

    Debian : apt-get install dovecot

    그 외의 OS Dovecot 홈페이지를 참고하시기 바랍니다.


    # up2date
    i dovecot


    Dovecot
    의 설치가 완료되었다면 /etc/dovecot.conf 파일을 아래와 같이 수정하여 주시기 바랍니다.


    # vi /etc/dovecot.conf

    [ protocols = imap imaps è protocols = imap imaps pop3 pop3s]

    # /etc/init.d/dovecot start

    Starting Dovecot Imap:                                     [  OK  ]


    Dovecot
    이 정상적으로 작동하고 있는지 테스트를 해야 합니다.

    테스트 방법은 기존에 올려놓은 [imap 설치 방법 매뉴얼]을 참고하여 주시기 바랍니다.


    이제 마지막으로 다람쥐 메일을 설치하면 모든 설치가 완료 됩니다.

    Squirrelmail은 따로 인스톨 할 필요 없이 압축 푼 그대로 설정만 하여 바로 이용 하면 됩니다.


    # tar zxvf squirrelmail-1.4.5.tar.gz

    # cd squirrelmail-1.4.5

    # ./configure


    SquirrelMail Configuration : Read: config.php (1.4.0)

    ---------------------------------------------------------

    Main Menu --

    1.  Organization Preferences

    2.  Server Settings

    3.  Folder Defaults

    4.  General Options

    5.  Themes

    6.  Address Books

    7.  Message of the Day (MOTD)

    8.  Plugins

    9.  Database

    10. Languages



    원하시는 부분만 수정하신 후 이용하시면 됩니다.


    SquirrelMail Configuration : Read: config.php (1.4.0)

    ---------------------------------------------------------

    Organization Preferences

    1.  Organization Name      : 7strike TesT Mail

    2.  Organization Logo      : ../images/sm_logo.png

    3.  Org. Logo Width/Height : (308/111)

    4.  Organization Title     : 7strike Test Mail server

    5.  Signout Page           :

    6.  Top Frame              : _top

    7.  Provider link          : http://www.7strike.com/

    8.  Provider name          : 7strike Mail


    -
           
    서버 셋팅 부분이며, 메일 발송에 대한 부분을 수정하시면 됩니다.

         -         Dovecot other로 잡으시면 정상적으로 셋팅 됩니다.


    SquirrelMail Configuration : Read: config.php (1.4.0)

    ---------------------------------------------------------

    Server Settings

    General

    -------

    1.  Domain                 : test.7strike.com

    2.  Invert Time            : false

    3.  Sendmail or SMTP       : Sendmail

    A.  Update IMAP Settings   : localhost:143 (other)

    B.  Change Sendmail Config : /usr/sbin/sendmail

    - 폴더에 관한 부분이며, 원하시는 부분만 수정하시면 됩니다.

    SquirrelMail Configuration : Read: config.php (1.4.0)

    ---------------------------------------------------------

    Folder Defaults

    1.  Default Folder Prefix         : mail/

    2.  Show Folder Prefix Option     : true

    3.  Trash Folder                  : 휴지통

    4.  Sent Folder                   : 보낸편지함

    5. Drafts Folder                 : 임시보관함

    6.  By default, move to trash     : true

    7.  By default, move to sent      : true

    8.  By default, save as draft     : true

    9.  List Special Folders First    : true

    10. Show Special Folders Color    : true

    11. Auto Expunge                  : true

    12. Default Sub. of INBOX         : true

    13. Show 'Contain Sub.' Option    : false

    14. Default Unseen Notify         : 2

    15. Default Unseen Type           : 1

    16. Auto Create Special Folders   : true

    17. Folder Delete Bypasses Trash  : true

    18. Enable /NoSelect folder fix   : false


    -
    데이터 디렉토리에 대한 부분만 수정하시면 되며, dataattach디렉토리는 nobody권한의 730 퍼미션으로 셋팅 해야만 정상적인 처리가 가능합니다.


    SquirrelMail Configuration : Read: config.php (1.4.0)

    ---------------------------------------------------------

    General Options

    1.  Data Directory              : /var/data/

    2.  Attachment Directory        : /var/attach/

    3.  Directory Hash Level        : 0

    4.  Default Left Size           : 150

    5.  Usernames in Lowercase      : false

    6.  Allow use of priority      : true

    7.  Hide SM attributions        : false

    8.  Allow use of receipts       : true

    9.  Allow editing of identity   : true

      Allow editing of name       : true

      Remove username from header : false

    10. Allow server thread sort    : false

    11. Allow server-side sorting   : false

    12. Allow server charset search : true

    13. Enable UID support          : true

    14. PHP session name            : SQMSess


    -
    언어 셋팅이며 Default Language Charset을 아래와 같이 수정하시면 됩니다.


    SquirrelMail Configuration : Read: config.php (1.4.0)

    ---------------------------------------------------------

    Language preferences

    1.  Default Language       : ko_KR

    2.  Default Charset        : EUC-KR

    3.  Enable lossy encoding  : false


    모든 셋팅이 완료 되었다면 S를 눌러 꼭 저장해야 합니다.

    위에서 한글 언어를 지정했기 때문에 한글 패치를 꼭 해주어야 합니다.

    패치작업은 아주 간단하며 처음에 받은 ko_KR-1.4.6 한글 언어팩을 이용합니다.


    # mkdir ko_KR

    # tar zxvf ko_KR-1.4.6rc1-20051212.tar.gz directory=./ko_KR

    # cd ko_KR

    # ./install

    Please enter path to your squirrelmail installation: [다람쥐메일 설치 경로]


    이제 다람쥐 메일을 웹상에서 볼 수 있도록 해당 폴더를 심볼릭 링크로 걸어준후 apache httpd.conf 또는 vhost.conf 파일을 수정합니다..


    # ln
    s /usr/local/squirrelmail-1.4.5 /home/7strike/wwwhome/webmail

    # vi /usr/local/apache/conf/httpd.conf


    -
    해당 폴더에 연결 될 수 있도록 Config 수정.

    웹상에서 다람쥐 메일 셋팅이 정상적으로 되었는지 확인해 보아야 합니다.

    http://도메인/src/configtest.php

    특별하게 에러나는 부분이 없다면, 바로 메인 페이지로 이동 합니다.

    http://도메인/iindex.php

    해당 메일에 접속 후 메일 송수신을 확인해 봅니다.


    Sendmail을 이용하여 메일을 받을 경우 아래와 같이 셋팅하여야 합니다.

    /etc/mail/local-host-names 파일에 웹메일에 사용될 메일 레코드 값을 등록한다.

    /etc/mail/sednmail.cf 파일 내용중 DaemonPortOptions= Port=smtp, Addr=127.0.0.1, Name=MTA 이 부분을 찾아서 Addr=127.0.0.1을 삭제하면 외부 메일 수신이 됩니다.

    만약 sendmail.cf 파일 수정이 어렵다면 sendmail.mc 파일을 열어 DaemonPortOptions

    부분을 찾은후 앞부분에 dnl 을 입력한 후 아래 명령어를 통하여 재생성 하여 주면 됩니다.

    # m4 /etc/mail/sendmail.mc > sendmail.cf


    -
    -

    Comment +0