본문 바로가기

Technical/DBMS

Mariadb galera cluster 로 구성하는 MySQL 호환 Multimaster DBMS, on Ubuntu MySQL이 Oracle 에 인수될 즈음부터 MySQL을 기반으로 하면서 보다 향상된 개념으로 각자가 이름을 떨치며 꾸준히 진행되어 온 프로젝트가 바로 Percona와 MariaDB이다. 참고로 두 프로젝트의 연관성을 비교하는 내용은 이 곳의 포스팅을 보시면 되겠고, 이번 포스팅에서는 Codership이 만든 Synchronous Multimaster 방식의 Galera cluster 를 설치해 보고, 운영에 관련해서 고려할 점들을 정리해 두려 한다. Multimaster, Synchronous 한 특징을 가지는 이러한 MM 솔루션이 나오기 전에는(물론 완성도가 떨어지고 운영상 불편했던 MMM 같은 것도 있기는 했다), Master-Slave 구조의 비동기 Replication 방식이 많이 쓰였다. 한 .. 더보기
mongodb ttl collection 사용에 관하여(pymongo 추가) [mongodb client UI] MongoDB 2.2.x 2.1.2 부터 TTL(Time To Live) 기능이 제공되고 있다. IT에 익숙한 분이라면 icmp, DNS, cache server 등의 프로토콜이나 설정/작동 방법상에서 자주 나타나는 용어라는 것을 알 수 있으리라. mongodb에서의 이 기능은 단순하게 설명하자면, 지정된 시간 이전의 레코드를 자동으로 지우는(purging, removing) 기능이다. 주로 통계성 데이터나 모니터링 데이터 등 시계열 데이터가 저장되어 있을 경우나 일정 시간 동안만 저장되어야 하는 session 정보 등을 저장하는데 유용하게 사용할 수 있겠다. 중요한 주의사항 몇 가지를 아래에 정리해 두고 테스트를 진행해 본다. mongodb의 Date 에 해당하는 날.. 더보기
Silent mode Oracle 11gr2 설치 - CentOS 5.5 x64, cloudn VM에서 LGU+ 회사의 클라우드(cloudN) 환경의 가상머신(VM,Virtual Machine)에 oracle 11gR2를 설치해 보았다. 대개 서버 설치시에 X-window를 포함하지 않는 경우가 많으므로, java 와 GUI가 제공되는 그래피컬 환경(일반적으로 주로 사용하는 OUI 모드)이 아닌, 텍스트 기반의 서버 환경에서 설치를 진행한다(구글은 이 Silent mode를 침묵 모드라는 말로 멋지게 번역해 준다). 이론은 간단한 듯 하지만, 실제로 해 보면 결코 그렇지만은 않다. 특히 response 파일 설정에서, 다소의 시행착오와 installer 재실행을 몇 번 해 보아야 한다. 일단 한 번 해 보면 어렵지 않게 누구나 따라서 설치 가능하도록 소상하게 과정을 다루도록 하겠다. 다만, 서버에 오라클을.. 더보기
MongoDB 백업(dump)와 복구(restore) MongoDB를 백업하는 방법에는 Journaling을 지원하는 Block 장치일 경우 snapshot, lock & fsync, mongodump & mongorestore 등의 여러 가지가 있다. mongo.org 에 의하면 증분 백업(incremental backup)을 지원하지는 않고 있으며, 아직까지 이러한 기능을 수행하는 도구 또한 존재하지 않는 상황이다. 데이터베이스 엔진이 중단되지 않아야 하는 상황의 경우 dump & restore를 통한 방법이 일반적이므로 아래에 그 사용법에 대해 정리해 둔다. 이 방식은 쉽게 표현하자면 단순히 레코드 단위로 백업(dump)을 받고, 복구시에도 레코드 단위로 insert를 반복적으로 수행하게 된다. [mongodump] # 전체 데이터베이스 Full ba.. 더보기
HammerOra로 DBMS 성능 측정하기(TPC-C) -2 이전 글을 포스팅 하고 보니 의외로 HammerOra 를 사용해서 DBMS 벤치마킹을 하는 작업이 단순하지 않다는 생각이 들어, 따라하기 버전의 테크니컬 리포트 하나 정도는 만들어 둠이 좋을 듯하여 같은 제목 일련번호 2를 붙여 추가로 포스팅한다. 실제로 구글링, 네이버링을 해서 국내나 해외사이트들의 HammerOra 관련 정보를 찾아 보아도, 반드시 알아 두고 체크해 주어야 하는 데도 불구하고, 그에 대한 주의사항이 없는 경우가 많다. 그래서 더 이상 정상적인 진행이 되지 않는 경우가 대부분이며, 심지어 HammerOra 매뉴얼에서 조차, 진행 과정에 대한 명확한 설명이 명료하게 되어 있지 않은 부분도, 본 글을 추가하는 이유 중의 하나이다. 글을 보시는 분들 중, 개인적으로 데이터베이스 성능 측정을 .. 더보기
HammerOra로 DBMS 성능 측정하기(TPC-C) -1 최근(2015.4)에 HammerOra에서 HammerDB 로 이름이 변경되었고, Oracle TimesTen, Redis 등도 지원하는 등, 꾸준한 변화를 보이고 있네요. HammerOra('해머오라' 라고 읽자. 의미는 'Hitting Oracle with a Hammer'라고 한다) 는 시중에서 별 다른 제약 없이 사용해 볼 수 있는 거의 유일한 Open Source DBMS 성능 측정 툴이고, TPC-C, TPC-H 등 요즘 주로 사용하는 성능측정 방법을 구현해 놓은 것으로http://hammerora.sourceforge.net 에서 Linux/MS-Windows(X86/X64) 용으로 각각 빌드된 패키지를 다운로드 받아서 사용할 수 있다. 더구나 각 플랫폼 별로 간단 설치법과 심지어 해당 DB.. 더보기
mysqld: Table './mysql/proc' is marked as crashed and should be repaired 5.1.X~5.5.X 까지도 가끔 발생되는 오류인데mysqldump 를 실행하면 로그상에 보이는 오류메시지이다. [ERROR] mysqld: Table './mysql/proc' is marked as crashed and should be repaired[Warning] Checking table: './mysql/proc' 이 때는 mysql 유틸리티에 포함된 mysqlcheck 을 사용하여 해결할 수 있다. # mysqlcheck --repair mysql proc -uroot -ppassword 더보기
MySQL 수동 동기화 - Master read lock 또는 shutdown 없이 동기화 하기 상용 운영 상태에서 Database를 shutdown하는 의사 결정이 쉽지 않은데, 2대의 Replication 데이터베이스들의 동기화가 깨졌을 때는 이 방법을 쓰도록 한다. Dual Master 구성일 경우 M1:10.0.3.71, M2:10.0.3.72, 동기화할 대상 DB는 my_db 라고 가정하고 아래와 같이 진행한다. 단, 양쪽 데이터베이스를 모두 Running 상태로 유지하되, Read/Write 작업은 M1(동기화 원본) 쪽에서만 일어나는 상황이어야 한다. M1> slave stop; M1> reset slave; M2> slave stop; M2> reset slave; M2> drop database my_db; M2> create database my_db; M1# mysqldump -.. 더보기
MongoDB Replica set 활용(v2.0+ 기준) Mongo DB를 사용한 Replication은 그 조합과 목적에 따라 여러 가지 구조로 구현된다. Master-Slave 이중화 및 다중화, Master-Master 이중화, Master-Master Circular 구조의 다중화, Cluster 기술이 적용된 Replica Set 등, ... 결국은 데이터베이스의 고가용성을 갖추기 위한 목적은 같지만 말이다. 가장 대표적이고 단순한 것은 Master-Slave이다. 이를 통해서 Data redundancy는 구현되지만, Fail-over 문제, 자원의 비효율적 사용 때문에 Master-Master 구조를 선호하는 것이 일반적이다. 또한 그 구조도 비교적 단순하며 Fail-over 를 통한 Availability 뿐 아니라 Read/Write 부하의 분.. 더보기
MySQL 5.5(Percona 5.5.15-21.0 stable) Master-Master replication * 2011/09/22에 update됨 * MySQL이 MySQL 5.5 부터는 SemiSync 라는 쓸만한 기능으로 Availability가 더 향상되었다. 즉, M-S1S2 형태의 Replication에서 M의 Transaction과 S로의 binlog write가 병렬로 처리되며(Master가 Slave의 binlog로의 전송을 보장, 동기=sync), S의 binlog에서 Storage 로의 write 는 비동기(async)로 처리된다(==> 반동기=SemiSync) [참조] http://www.mysqlkorea.co.kr/gnuboard4/bbs/board.php?bo_table=develop_03&wr_id=73 * 기존의 5.1.x 대에 비해서 script의 위치나 Replication 설.. 더보기
Haproxy - Master/Backup 설정에서 MySQL alive check 방법 Haproxy 의 option mysqlchk 로 DB 의 가용 여부를 점검하는 데에 쓸 수 있으나 정상적인 점검이 정확하게 되지 않으며, MySQL의 connection을 잠식하는 문제점이 있다. 단순히 DB 접속 port만 감시하는 방법도 쓸 수 있으나, DB의 정상 가동여부를 체크하는 방법으로는 적합하지 않다. xinetd service와, 간단한 db connection & query script를 이용 Assumption: MySQL home - /user/service/mysql Thanks to Unai Rodriguez(script author) & Sysbible(http://sysbible.org/) 1. script 작성 # cd /user/service/mysql/bin; vi my.. 더보기
Percona - Xtrabackup 1.4 유틸리티의 innobackupex 스크립트 오류 extrabackup은 incremental backup을 지원하지만 innodb에 대해서만 가능하므로 MyISAM등의 복합적 엔진구성인 경우 작동하지 않는다. 이러한 경우 MySQL에서 제공하는 innobackupex base의 Percona 수정판 perl utility로 백업을 할 수 있다(innobackupex-1.5.1). 하지만 이 perl source에 버그가 숨어 있어서, 실행하면 "Invalid version format (non-numeric data) at /usr/bin/innobackupex-1.5.1 line 1708." 와 같은 에러를 뱉어 내므로 아래와 같이 수정한다. ... } else { $perl_version = chr($required_perl_version[0]) .. 더보기
MySQL Tip - caution for 'not found handler' MySQL에서 NOT FOUND exception은 Cursor Fetch 시에만 발생한다. 따라서 update 아래의 IF 문 내의 처리는 의도한 대로 동작하지 않는다. 즉, 코더의 의도는 Update 문을 실행해서 해당 데이터가 없다면 If 문 내의 문장이 처리되기를 원한 거겠지만, 아래의 이 IF 문 내의 문장은 전혀 실행되지 못하게 된다. DECLARE MyErr INT default 0; DECLARE CONTINUE HANDLER FOR NOT FOUND set MyErr = -1; ... UPDATE table SET COL = 'data' WHERE KEY_COL = 'key data'; IF MyErr < 0 THEN statements_for_not_found...; END IF; 또한.. 더보기
MySQL Tip - General log 활용 Database 내에서 발생하는 모든 쿼리들을 logging할 필요가 있을 때 SHOW VARIABLES LIKE 'general_log'; SHOW VARIABLES LIKE 'log_output'; SET GLOBAL general_log = 1; SET GLOBAL log_output = 'table'; -- 필요시에만 켜서 사용 SET GLOBAL general_log = 0; SET GLOBAL log_output = 'file'; -- 평상시에는 이렇게 disable해 두어야 엔진의 성능에 부담이 가지 않으므로 주의 Query logging table: mysql.general_log * MySQL에서는 milli-second 단위로 시간을 처리하지 않으므로 timestamp는 초 단위까지만 .. 더보기
CentOS 5.4, MySQL build를 위한 패키지들 (MySQL은 Percona XtraDB 5.1.49 기준) binutils automake libtool bison make termcap libtermcap.x86_64 libtermcap-devel.x86_64 gcc gcc-c++.x86_64 libstdc++.x86_64 ncurses ncurses-devel.x86_64 glibc.x86_64 glibc-common.x86_64 glibc-devel.x86_64 glibc-headers.x86_64 glibc-utils.x86_64 더보기
MySQL replication : Statement-Based vs. Row-Based replication * Reference : http://www.qijoo.com/FAPM/mysql/5.1/MySQL_51_en/ch06s12.html [Statement-based] - MySQL 3.23 부터 존재해 온 검증된 기술이다 - 상대적으로 log 파일 크기가 작다. 특히 다량의 update/delete의 경우에 효과가 크다 log 크기가 작으면 저장공간에 부담이 적고 빠른 백업이 가능하다 - log 파일에 모든 변경 내용이 저장되어 DB audit 에서 사용 가능하다 - log 파일은 replication 용도 뿐 아니라, 적절한 시간과 지점에서의 recovery에 사용될 수 있다 - Slave는 Mater와 다른 더 새로운 버전의, row 구조가 다른 MySQL로도 적용될 수도 있다 - UPDATE문에서의.. 더보기
MySQL replication 수동 복구(Slave 동기화) #2 Full dump 파일이 100MB 이상 되면 slave 에서 로드하다보면 제대로 되는지 확인이 안되서 시간은 급한데 억장이 무너진다면 아래의 방법을 써본다. * Master: 10.10.0.200, Slave: 10.10.0.201 1. Master database read lock # mysql -uroot -prootpass flush logs; flush tables with read lock; 2. Rsync from master to slave(Slave) # mysqladmin -uroot -prootpass shutdown # rm -rf /user/services/mysql/data/* # rsync -r -p -v root@10.10.0.200:/user/service/mysql/dat.. 더보기
MySQL 5.5.5m3 configure bug(Building MySQL 5.5.5m3) * Refer to http://bugs.mysql.com/bug.php?id=55350 * make 시에 아래와 같은 오류 발생 ------------------------------------------------------------------------------------------------------ gcc -DHAVE_CONFIG_H -I. -I../include -I../include -I../include -I../sql -O3 -m32 -march=core2 -fomit-frame-pointer -pipe -fno-exceptions -DUNIV_LINUX @ndbcluster_includes@ -c perror.c gcc: @ndbcluster_includes@: No such fi.. 더보기
Building mongodb r1.4.4 [Getting ready] * Install spidermonkey(js.lib) # curl -O ftp://ftp.mozilla.org/pub/mozilla.org/js/js-1.7.0.tar.gz # tar zxvf js-1.7.0.tar.gz # cd js/src # export CFLAGS="-DJS_C_STRINGS_ARE_UTF8" # make -f Makefile.ref # JS_DIST=/usr make -f Makefile.ref export * install scons, pcre-devel # zypper in scons # zypper in pcre-devel * Packages needed for building mongo git, tcsh, scons, gcc-c++, glib.. 더보기
MySQL innotop 설치 & 사용(OpenSUSE 11.2 or Fedora 14, MySQL 5.1.44~5.5.4m3) MySQL InnoDB 사용자를 위한 모니터링 툴( http://code.google.com/p/innotop/ , http://code.google.com/p/innotop/wiki/Screenshots ) 2010/11 에 새 버전이 나와서 update합니다. * Run as superuser # wget http://innotop.googlecode.com/files/innotop-1.7.2.tar.gz # wget http://innotop.googlecode.com/files/innotop-1.8.0.tar.gz # zypper install perl-DBD-mysql [참고] # yum install perl-TermReadKey (Fedora의 경우, 빠져 있기 쉬운 패키지) # tar xv.. 더보기
MySQL ndbcluster & Replicator 설정 - help text [Mysql NDB Cluster 설정] - 5.1.44-ndb-7.1.4b 1. 소스 다운로드 http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.1/mysql-cluster-gpl-7.1.4b.tar.gz/from/http://mirror.khlug.org/mysql/ 2. 압축 해제, 설치 (필수 패키지: curses*, termcap, gcc-c++) # ./configure --prefix=/user/service/mysql --with-mysqld-user=mysql --sysconfdir=/user/service/mysql/conf --with-unix-socket-path=/tmp/mysqld/mysql.sock --with-charset=utf8 -.. 더보기
MySQL 5.5.4m3 Source build & Installation on OpenSUSE 11.2 1. Source 다운로드, 압축해제 다운로드 http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.4-m3.tar.gz/from/http://mirror.khlug.org/mysql/ # tar xvzf mysql-5.5.4-m3.tar.gz 2. mysql 사용자 추가 # groupadd mysql # useradd -M -g mysql -s /bin/false mysql 3. Configure Makefile * ForMysqlBaseDir : /usr/local/ or /dev/local/service/, etc... # rm -rf /ForMysqlBaseDir # ./configure --prefix=/ForMysqlBaseDir/mysql --wi.. 더보기
MySQL, Hex와 Conv로 Mac address 계산하기 SET @mac := '00afafafafaf'; -- ==> '00afafafafb0' 로 주소 값을 1증가 시키려고 한다 CONV(@mac, 16, 10) + 1; -- 12자리 mac address string을 BigInt 정수로 변환하여 +1 HEX(정수); -- 정수값을 hexadecimal string으로 변환 LPAD(string, digits, '0'); digits자리수 만큼 왼쪽에 '0'을 채운다 -- 결과 SELECT LPAD(HEX(CONV(@mac, 16, 10)+1), 12, '0'); SELECT INET_ATON( '168.126.63.1') = 2826845953 -- BigInt SELECT INET_NTOA( 2826845953 ) = '168.126.63.1' 더보기
CentOS 5.4에서 MySQL 5.1.45 빌드 시스템 설정이 많으므로 root 계정에서 작업(/root/src) dev.mysql.com 에서 소스 다운로드(mysql-5.1.45.tar.gz) 압축해제, make 준비 # tar -xvzf mysql-5.1.45.tar.gz # ./configure --prefix=/user/service/mysql \ --> 주요파일 설치 위치(bin, libexec, lib, ...Default는 /usr/local/mysql) > --localstatedir=/user/service/mysql/data \ --> 데이터, 로그 저장 위치 > --sysconfdir=/user/service/mysql \ --> 기본 설정파일 my.cnf 등 저장 위치 > --with-mysqld-user=mysql \ --> .. 더보기
mongoDB 보안 설정하기(1.2.2 기준) mongo db는 몽고 라는 나라와 전혀 상관이 없다. Humongous 하는 단어에서 만들어진 것. 설치후 아무런 제약 없이 ./mongo 만 치면 db에 접속된다. 개발환경이라면 문제 없지만 개념 없이 쓰다가 큰 일 ㅡ_-? 이 날지도... 우선 mongod를 기동시킬 때 --auth 옵션을 추가해 두자. 다음 글에서 mongod 를 시스템 스타트시에 기동되도록 설정하는 방법을 정리할 것이다. ubuntu, centos, suse 등 거의 모든 linux 머신에서 특정 App을 기동시키는 일반적인 방법이 되겠다. 각설하고, mongo db는 system 영역 내에 admin 이라는 DB 관리를 위한 스키마 영역(database)를 가진다. * 메서드 Name에 대소문자 구분 주의 # ./mongo #.. 더보기
MySQL 사용자 추가 먼저 상태를 확인해 본다. > mysqladmin -u root -p status root로 mysql db로 접속 > mysql -u root -p (또는 mysql -uroot -ppassword) 만약 root 암호를 변경하려면 mysql> update mysql.user set password = password('root-password') where user = 'root'; 를 수행한다 사용자를 추가하려면 > mysql -uroot -ppassword mysql INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'username', password('password')); -- %를 쓰지 않고 localhost를 쓸 경우 remote 접.. 더보기
MySQL에서 character-set 을 utf8로 바꾸기 APM에서 UTF-8을 구현하려면 아래 여러 부분을 수정해야 한다. 1. apache 환경파일 편집 (httpd.conf) 2. php 환경파일 편집 (php.ini) 3. mysql 환경파일 편집 (my.cnf) 4. apache, mysql 서비스 재시작 5. mysql에서 캐릭터셋 확인 및 디비생성 6. php 소스코드에 mysql_query("set names utf8;"); 함수 추가 7. php 소스에 한글문자열이 있으면 파일저장할때 UTF-8 파일형식으로 저장 8. 웹브라우즈의 보기-인코딩-UTF-8로 선택 1. /etc/httpd/conf/httpd.conf 에서 캐릭터셋 수정 /*------------ AddDefaultCharset UTF-8 2. /etc/php.ini 에서 캐릭터셋 .. 더보기
MySQL에서 timezone 사용을 위한 설정, 확인 사항 1. MySQL 서버의 타임존 설정방법에 관하여 일반적으로 MySQL 설치시 timezone에 대해서 별도 옵션을 지정하지 않으면 태평양표준시인 PST(Pacific Standard Time) 으로 설정된다(PST/PDT 등에 대해서는 여기 참조). * 참고로 Ubuntu에서 시스템의 표준시를 KST(대한민국 표준시)로 바꾸려면 # ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime (MySQL 관련한 세부 정보 및 사용법은 http://www.mysqlkorea.com 참조) DB 서버에 클라이언트로 접속해서 타임존 설정을 확인해 보자 mysql> select @@system_time_zone; +--------------------+ | @@system_ti.. 더보기