FREEDOM. FRIENDS. FEATURES. FIRST.
페도라 한국 사용자 모임

[TIP]mariaDB 컴파일 방법과 로그 설정, 서비스 유닛의 활용

게시판 Tech/Tip [TIP]mariaDB 컴파일 방법과 로그 설정, 서비스 유닛의 활용

  • This topic has 0개 답변, 1명 참여, and was last updated 6 years, 9 months 전에 by 난해주님. This post has been viewed 19 times
  • 만든이
    게시글
  • #12230
    난해주님
    참가자
    • 게시글114
    • 댓글337
    • 총합451
    • ★★
    @workman729

    우선 지인의 부탁으로 mariaDB에 대한 컴파일과 로그 설정, 서비스 파일을 이용한
    업 스타트 등록에 대한 방법을 설명해 드릴까 합니다.

    일단 저는 대충 스타일 이라서 디테일한 부분에 대해서는 스스로 확인해 보시기 바라며
    컴파일과 설치에 필요한 라이브러리에 대해서는 따로 설명하지 않겠습니다.

    아래는 mariaDB 버전 5.5.36을 기반으로 하고 있다는 점을 먼저 말씀 드립니다.

    ### mariaDB 컴파일 하기 ###

    저는 mariaDB를 컴파일 하기 위해 아래와 같은 옵션을 사용하고 있습니다.
    그리고 컴파일 하는 데 필요한 컴파일러와 라이브러리에 대한 설명은 생략 합니다.

    cmake .. \
    -DCMAKE_INSTALL_PREFIX=/usr/local/mariaDB \
    -DMYSQL_DATADIR=/usr/local/mariaDB/data \
    -DWITH_READLINE=1 \
    -DWITH_SSL=system \
    -DWITH_ZLIB=system \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DWITH_EXTRA_CHARSETS=all \
    -DMYSQL_UNIX_ADDR=/tmp/mariaDB.sock \
    -DMYSQL_TCP_PORT=3306 \
    -DENABLED_LOCAL_INFILE=1 \
    -DWITH_ARIA_STORAGE_ENGINE=1 \
    -DWITH_XTRADB_STORAGE_ENGINE=1 \
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_PARTITION_STORAGE_ENGINE=1 \
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    -DWITH_FEDERATEDX_STORAGE_ENGINE=1 \
    -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
    -DCMAKE_EXE_LINKER_FLAGS='-ltcmalloc' \
    -DWITH_SAFEMALLOC=OFF \
    .

    특별히 컴파일 전에 먼저 설명드려야 할 점은 다음의 옵션입니다.

    "-DCMAKE_EXE_LINKER_FLAGS='-ltcmalloc'  -DWITH_SAFEMALLOC=OFF"

    tcmalloc에 대해 간단히 소개하자면 구글이 제공하는 메모리 성능 도구로서 중앙 메모리 관리자와 스레드별 메모리 관리자를
    구분하여 메모리 할당 및 해제 요청은 스레드 별 메모리 관리자가 처리하고 부족할 경우 중앙 메모리 관리자에서 얻어오는 방식으로 메모리 할당시 동기화 과정이 필요 없어 메모리 성능의 향상 및 관리에 도움이 됩니다.

    특히 mysql의 장시간 실행시 상당한 도움이 됩니다. 대용량의 DB 서버를 활용하기 위해서 꼭 필요한 옵션입니다.

    만약 -DBUILD_CONFIG=mysql_release 방식으로 컴파일 하신다면 tcmalloc를 사용하기 위해선 LD export 옵션을 활용해야 하지만
    위의 컴파일 옵션을 사용하신다면 따로 설정하실 필요가 없습니다.

    여기서 주의 해야 할 점은 위의 옵션을 사용하기 위해선 mariaDB의 소스를 먼저 수정해야 할 점이 있습니다.
    일전에 팁을 제공해 드린 적이 있습니다만 다시 한번 말씀 드립니다.

    소스의 압축 해제 후 storage/tokudb/ft-index/ft/ft-ops.cc 파일의 2330번째 줄로 이동하셔서
    다음과 같이 소스를 수정해 주셔야 합니다.

    # 수정 전
    LEAFENTRY leaf_entry;
    bn->data_buffer.fetch_klpair(index, &leaf_entry, &keylen, &keyp);
    assert_zero(r);

    # 수정 후
    LEAFENTRY leaf_entry = 0;
    r= bn->data_buffer.fetch_klpair(index, &leaf_entry, &keylen, &keyp);
    assert_zero(r);

    수정하지 않으면 "-lto-wrapper" 에러가 발생하므로 주의 하십시오.

    또 하나는 컴파일 전 꼭 필요한 메모리 도구인 gperftools를 페도라는 제공 하지 않습니다.
    따라서 mariaDB 컴파일 전 아래 링크를 통해 먼저 gperftools 컴파일 하여 설치 하시기 바랍니다.

    http://code.google.com/p/gperftools/

    gperftools를 컴파일 하기 위해선 몇 가지 라이브러리를 설치해야 하지만
    특별히 어려운 부분이 없으므로 에러 부분이 출력되면 눈여겨 보시고 해당 라이브러리를 설치하시면 됩니다.

    # ./configure --prefix=/usr/local --libdir=/usr/local/lib64 (32 비트는 defualt로 컴파일)
    # make
    # sudo make install

    위에서 32 비트 환경을 사용하신 다면 --libdir 옵션이 필요 없습니다.
    64 비트 환경을 사용하신다면 위 처럼 하시면 됩니다.

    다음으로 gerftools 라이브러리를 인식하기 위해 다음과 같이 설정합니다.

    # sudo vi /etc/ld.so.conf.d/local-lib.conf
    /usr/local/lib64
    # sudo ldconfig

    이후 mariaDB를 컴파일 하시면 되고 빌드가 끝나면 make, make install 하시면 설치가 끝납니다.
    나머지 부분은 INSTALL 문서를 참고하여 설정하시기 바랍니다.

    ### mariaDB 설치 후 일반적인 로그 설정 ###

    예전에는 mysql의 로그를 따로 설정하기 위해선 데몬 실행 시 따로 옵션이 필요했지만
    현재는 옵션을 줄 필요 없이 GLOBAL 옵션을 변경하면 됩니다.

    일단 /etc/my.cnf 파일에 [mysqld] 항목에 다음과 같이 설정 합니다.

    general_log_file = /usr/local/mariaDB/log/mysql.log
    general_log = 1
    log-bin = /usr/local/mariaDB/log/mysql-bin #바이너리 로그
    log-error = /usr/local/mariaDB/log/mysql-error.log
    log-slow-queries = /usr/local/mariaDB/log/mysql-slowquery.log
    long_query_time = 2
    log-queries-not-using-indexes

    저장 후 "/usr/local/mariaDB"로 이동하여 다음과 같이 로그 파일을 만들어 줍니다.
    # sudo mkdir log
    # sudo touch /usr/local/mariaDB/log/mysql.log
    # sudo touch /usr/local/mariaDB/log/mysql-error.log
    # sudo touch /usr/local/mariaDB/log/mysql-slowquery.log
    # sudo chown -R mysql:mysql /usr/local/mariaDB/log
    # cd log/
    # sudo chmod 660 *

    특별한 점은 log-bin 로그는 바이너리 로그라는 점과 로그를 기록하기 위해선 log 디렉토리와
    로그 파일의 사용자와 그릅을 mysql로 해 주어야 한다는 점입니다.

    보안을 위해서 권한을 660으로 하시기를 권해 드립니다.

    ### 실시간 로그 기록을 위한 GLOBAL 옵션 변경 ###

    터미널에서 mysql -u root -p 명령어로 클라이언트 접속을 하여 다음과 같이 옵션을 설정 합니다.

    SET GLOBAL general_log = 'ON';
    SET GLOBAL slow_query_log = 'ON';

    당연히 해제는 OFF로 설정하시면 됩니다.

    여기서 특별한 점은 general_log 옵션으로 로그를 사용하기 위해서는 2가지 방법이 있습니다.
    하나는 my.cnf 파일의 설정에서 [mysql_safe] 항목에서 syslog를 활용 하는 방법과
    두번째는 위에서 제안한 general_log_file 을 이용한 방법입니다.

    syslog가 무엇인지 따로 설명하지 않겠습니다만 저의 경우 일목조연하고 정리된 형태를 좋아하므로
    로그를 한군데 몰아 두는 방식을 선호 합니다. 참고 하시기 바랍니다.

    참고로 mariaDB의 옵션 리스트는 아래를 참고 하시기 바라며 이상이 일반적인 로그 활용 방법입니다.
    또다른 로그가 필요 하다면 옵션 리스트를 활용하여 설정해 보시기 바랍니다.

    https://mariadb.com/kb/en/mysqld-options-full-list/

    ### mariaDB.service 유닛을 활용하여 업스타트에 등록 ###

    페도라에선 업 스타트 방식으로 chkconfig와 systemd(systemctl)의 두 가지 방식이 있습니다.
    mariaDB에선 chkconfig 방식을 이용한 스크립트를 제공하고 있으며 이를 활용 하시면 됩니다.

    만약 systemd 방식을 이용하고 싶다면 다음과 같은 조치가 필요 합니다.
    먼저 페도라 설치 시 제공하는 패키지의 서비스 파일을 먼저 백업 처리 합니다.

    # sudo mv /usr/lib/systemd/system/mariadb.service /usr/lib/systemd/system/mariadb.service.bak
    # sudo mv /usr/lib/systemd/system/mysql.service /usr/lib/systemd/system/mysql.service.bak
    (위의 백업 처리는 chkconfig를 이용할 때에도 필요한 조치입니다.)

    이후 컴파일 하신 mariaDB를 이용한 서비스 파일을 새로 만들어 줍니다.

    # sudo vi /usr/lib/systemd/system/mariaDB.service
    [Unit]
    Description=MariaDB Server
    After=network.target

    [Service]
    ExecStart=/usr/local/mariaDB/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/usr/local/mariaDB/data --socket=/tmp/mariaDB.sock
    User=mysql
    Group=mysql
    WorkingDirectory=/usr/local/mariaDB

    [Install]
    WantedBy=multi-user.target

    # sudo systemctl enable mariaDB.service
    # sudo systemctl start mariaDB.service

    위의 서비스 파일에서 주의 해야 할 점은 defaults-file 옵션이 데몬의 바로 뒤에 있어야 한다는 점입니다.
    데몬은 mysqld로 할지 mysqld_safe로 할지는 알아서 정하시기 바랍니다.

    참고로 mariaDB 서비스의 상태(status)를 확인해 보시면 log-slow-queries에 대한 경고문을 보실 수 있는 데
    mariaDB 10에서 log-slow-queries 옵션이 slow_query_log 옵션으로 변경될 예정이므로 주의하라는 문구로 참고만 하시기 바랍니다.

    이상이 mariaDB에 대한 컴파일과 로그 설정에 필요한 부분입니다.
    이외의 설정과 운영 방법은 스스로 설정해 보시고 자신의 것으로 소화하시기 바랍니다.

    보통 위에서 설명해 드린 방식은 컴파일 시 스토리지 엔진 부분을 제외하면 mysql과 대동소이 하므로
    mysql에도 사용하실 수 있는 팁입니다.

  • 답변은 로그인 후 가능합니다.