본문 바로가기

mysql

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 방식이 많이 쓰였다. 한 .. 더보기
PHP5 + lighttpd fastcgi + mongodb + mysql(openeuse 12.1) 개발/운영 환경 설정 Opensuse 12.1 환경에서 PHP5 + lighttpd fastcgi + mongodb + mysql 개발/운영 환경 설정* howtoforge.com 내용 참조, 테스트 실행 & 보완 1. Lighttpd & php5 환경 설정 # zypper in -y lighttpd# systemctl enable lighttpd.service# systemctl start lighttpd.service * 기존의 php5 fastcgi 가 php5-fpm 패키지로 통합 업그레이드 되었고 별도 daemon으로 동작한다.# zypper in -y php5-fpm # mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf# chmod 1733 /var.. 더보기
PHP5 + lighttpd fastcgi + mongodb + mysql(openeuse 11.3) 개발/운영 환경 설정 Opensuse 11.3, 12.1 각각에 대해 2회에 걸쳐서 정리* howtoforge.com 내용 참조, 테스트 실행 & 보완 1. Lighttpd & php5 환경 설정 # zypper in -y lighttpd# chkconfig --add lighttpd# chkconfig lighttpd on# service lighttpd start # zypper in -y php5-fastcgi * 아래 라인을 찾아서 un-comment# vi /etc/php5/fastcgi/php.ini cgi.fix_pathinfo=1 * 아래 라인을 찾아서 un-comment# vi /etc/lighttpd/modules.confinclude "conf.d/fastcgi.conf" server.modules = (.. 더보기
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 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.. 더보기
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 수동 복구(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.. 더보기
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 Final, MySQL connector c++ 빌드하기 Linux 패키지 종류가 다양하고 Compiler version과 라이브러리 버전이 워낙 다양하므로 MySQL connector c++ 1.0.5 버전 rpm을 설치하면 컴파일시 libstdc++.so.5 버전이 필요한데 libstdc++.so.6 버전이라서 경고가 뜨는 경우가 있다. 대개는 오류가 주루룩 뜨지만, 가끔 경고만 뜨고 컴파일은 되나 실행하면 거의 core가 생긴다. 이 때는 어쩔수 없이 직접 source 로부터 connector c++을 빌드해서 써야한다(아니면 statifier 같은걸 쓸 수도 있지만 편법이라 별로다) 우선 cmake 2.6.2 버전 이상이 필요하다. # wget http://www.cmake.org/files/v2.8/cmake-2.8.0.tar.gz # tar -xvz.. 더보기
Ubuntu 9.10에서 MySQL Connector/C++ 프로그램 개발 NetBeans 6.8 에서 C++을 통하여 MySQL을 다루기 위해 Connector C++을 사용하기로 하였다. 처음부터 쉬운 길을 택한 것에 대한 징벌인가 ㅡ_-;; 샘플 소스 받고 빌드 하니 ld 에서 오류가 떨어진다...엉뚱한 버전의 라이브러리를 찾고 난리도 아니다. Binary 버전(Redhat, SUSE, Max OSX, FreeBSD, Windows 용 다 있는데 Karmic 용은 없네...generic 을 받을 수 밖에...)을 다운로드 받고 tar로 압축 풀고 /usr/include, /usr/lib 에 적당히 복사하고 Library link 정보까지 깔끔하게 업데이트 하기 위해 ldconfig 까지 돌렸는데;;; 안된다. 구글링을 해 보니, MySQL Connector C++ bina.. 더보기
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.. 더보기