Archive for the ‘-ㅂ-’ Category.

mysql clustering 클러스터링 만들기

mysql clustering을 만들어 봅시다

일단 지금 사용하고 있는 데이터의 양을 계산을 하는 것이 먼저

1기가의 데이터가 저장되어있는 테이블이 있다라면 최소로 필요한 메모리는 약 3GB!!

3GB는 최소 사양.. 저기에 옵션이지만 replica를 돌리는 경우 + 3GB 하시고 데이터 늘어나거나 하는 것들 감안해서 1~2GB는 여유있게 마련을

replica 없이 구성을 하면 4~5GB replica가 있는 상태로 구성하면 7~8GB

시간이 지나고 아.. 데이터가 늘어난다
짠~ 하고 10GB가 되었음

위에 굵은 글씨의 메모리 용량에 10배를 해주세요

[……..]

삼성 반도체 아들이 설계 했나-_-;;

결론 : 재미는 있지만 (지금 입장에서는) 쓸모 없다

Cassandra database

많은 Apache 프로젝트 중 하나
Facebook이 사용하고 있고 (라기보단 저기서 부터 시작 되었고) 최근에 Twitter도 사용하기로 했다라는 환상의(?) DB

아직 잘 안써봐서 모르겠지만.. 첫 느낌은..

‘자바를 이용한 배열+배열의 인덱싱’

문서도 안 읽어보고 그냥 내 맘대로 깔고 실행해본 결과의 느낌임 ㅎ
내심 나중에 이 글을 보면서 땅을 치며 후회하길 살짝은 바라고 있기도 함;;

자세한 소감은 좀 써본 다음에 이어서 🙂

Raid 시스템을 알아봅시다 :)

에사마가 좋아하는 Wow의 레이드 말고-_-;;

시스템에서 사용하는 Raid 이야기
요즘 완전 I/O와 싸우고 있는 중이라-_-;; 귀찮아 돌아가심.. 이상하게 만들어진 시스템에서 당췌 빠른걸 바라는게 이상할 뿐;;
그냥 대충 정리..
Raid 0
장점 : 닥치고 빠름
단점 : 하드 하나 뻑나면 모든 데이터가 황천
Raid 1
장점 : 하나 뻑나도 하나가 그대로 있음 🙂
단점 : 뻑나지 않아도 두개가 일단 필요함..
Raid 5
장점 : 용량을 크게 가져갈 수 있음!! 다른 Raid 대비 용량이 큼.. 읽기 성능이 좋음
단점 : 디스크가 두개 뻑나면 끝남.. 쓰기가 느림
Raid 6
장점 : Raid 5와 동일.. 디스크가 두개 뻑나도 버팀..
단점 : 3개는 못버팀-_-;; 쓰기가 겁나 느림
Raid 10
장점 : 1의 장점과 0의 장점이 동시에!!
단점 : 두가지를 다 해야하기에 돈이 많이 듬-_-;;
Raid 50
장점 : Raid 5 의 용량! + 0의 성능!
단점 : 복잡-_-; 돈 많이 듬.. 성능은 그래도 Raid 10이 더 좋음;;
실제로 업무에서 많이 쓰게 되는 조합을 따지면
Raid1 Raid5 Raid10 그리고 드물게 Raid50의 순서인거 같은데
내 경우에 많이 쓰는 조합은 Raid 1에 시스템 인스톨 Raid 10에 DB파일들의 저장 이런 식의 구성을 선호하고 실질적으로 이게 표준?적인 조합이긴한데.. 요즘 Raid 5로 구성되어있는 시스템에서 일을 할 일이 있었는데.. 정말 ㅠㅠ 울고 싶음 ㅠㅠ
다른거보다 Raid 5의 쓰기 성능은.. 진짜..;; 읽기라면 이야기가 달라지지만 쓰기만 만나면 작아지는 성능 때문에 이래저래 문제가 많다.. 그런데 Raid 6라니 ㅠㅠ 도시락을 싸들고 말려도 모자랄판;;
혹시나 업무에 Raid를 써야할 일이 있다면
웹서버라면
시스템 – Raid 1
웹 로그 – Raid 1 or 생략-_-; (가능하다면 ㅎ)
웹 소스 – Raid 5
DB서버라면
시스템 – Raid 1
데이터파일 – Raid 10
백업서버라면
시스템 – Raid 1
저장소 – Raid 50
상황에 따라서 다 다르긴 하지만 위 처럼 가면 일단 설정 때문에 욕먹거나 그럴 확률은 적을 듯 ㅎ
그리고 Raid를 과신 하지 맙시다 🙂
가끔 춘삼월 눈 녹듯.. 뭐에 홀린 듯.. 설명하기 힘들지만.. Raid가 풀릴 가능성이 있으며 그렇게 될 경우 군대 두번가는 것 보다 더 큰 재앙으로 다가 올 수도 있음;;

IP주소 bigint로 변경

GeoIP, IP2Location등의 비교를 위해서 IP주소를 숫자 형태로 바꿔야할 때가 있는데
이럴때 써먹으면 편한 MSSQL 명령어
DECLARE @fdIP nvarchar(20)
SELECT @fdIP = ‘192.168.1.1’;

DECLARE @fdIP1 bigint, @fdIP2 bigint, @fdIP3 bigint, @fdIP4 bigint

SELECT @fdIP1 = PARSENAME(@fdIP, 4)
SELECT @fdIP2 = PARSENAME(@fdIP, 3)
SELECT @fdIP3 = PARSENAME(@fdIP, 2)
SELECT @fdIP4 = PARSENAME(@fdIP, 1)

SELECT @fdIP1*(256*256*256)[email protected]*(256*256)[email protected]*(256)[email protected]

Ubuntu 판올림~

Ubuntu 판올림 명령어!!

sudo do-release-upgrade;

SQL 2008 R2 의 가장 반가운 기능

압축 백업 기능.. Backup compression 임..

SQL 2008 좌절 대면 간단후기..  에서 잠깐 남겼던 기능이었는데..
이게 현재 판매되고 사용하고 있는 SQL 2008 에서도 있었던 기능인데 왜 가장 반가운 기능으로 다시 태어났느냐 하면…. 이젠 Standard edition 에서도 이게 동작을 하기 때문에!!
기존의 SQL 2008 에서는 Enterprise edition 에서만 지원하던 Backup compression 이 R2로 판올림이 되면서는 모든 스탠다드 에디션에서도 지원이 되도록 바뀌었다라는 사실~ 🙂
Good job MS~! 이제 서비스팩으로 기존의 SQL 2008도 지원해주길 바래 -ㅅ-;;
더불어 SQL 2005 에서도 가능하도록 해줘-_-;;; 제발 -_-;;;;

Windows 2008 부터 지원되는 Hyper-V 라는 가상화 소프트웨어

윈도 2003이 제대로 활성화 될 즈음으로 해서 무르익던 시장이 하나 있었으니.. 그게 바로 가상화..

너가 사용하고 있는 하드웨어는 이미 너무 강력해서 하나만 돌리기엔 아까우니 여러개를 돌리자~ 라는 개념으로 시작된 가상화의 선두주자인.. vmware가 해당 시장을 나름 개척 및 발전을 시켜나가고 있는데 이게 위협? 이라고 생각을 했는지 나중에 돈이 될 것이라 판단을 했는지.. MS에서는.. 해당 기술을 Windows 2008에 추가 기능으로서 내놓으며 vmware에 도전장을 내밀었음.. 물론 첫 번째 버전이고 MS에서 만들었으니 지원되는 OS는 기본적으로 ‘Windows’ 기반의 서버 또는 클라이언트 들을 주로 지원을 하는 형편..

이래저래 궁금하기도 했고 R2 버전들의 RTM도 완성이 되어가고 해서 테스트 컴에다가 깔아놓고 간단하게 테스트를 해봤음..

일단.. vmware를 사용해봤던 사람이라면.. 그리고 윈도 서버군 (아니어도 상관없음) 을 써봤다라면 큰 문제 없이 설치 및 사용을 할 수 있을 정도로 편하게 잘 되어있는듯..
가상 CPU의 설정 및 메모리 설정, 네트워크 카드 추가의 설정 등의 기본 기능들이 잘 지원되서 머신 하나에 여러개의 가상 호스트의 설치가 가능하고 vlan을 지원하니까 서로 같은 물리적 머신에서 돌지만 실제로는 완전 다른 네트워크 상에서 돌리는 것도 가능하게 되어있으니 만약 호스트 서버 (Hyper-v를 돌리는) 의 리소스가 좀 좋은 상황이라면 여러대의 가상 머신을 돌리는 것도 문제는 아니라는 생각.. 물론 가상화 소프트웨어가 할 일이 이것이지만 ㅎ

사용할 수 있는 OS의 폭이 좀 좁다라는 것이 아쉽긴 한 편.. 대부분이 윈도계열 서버이고.. 리눅스의 경우에는 Redhat enterprise 그리고 Suse enterprise를 지원하는데.. 과연 Redhat enterprise를 돌릴 사람들이 윈도에다가 가상호스트로 저걸 굴릴지는-_-; 의문이든다;; 레드햇 깔고 kvm이나 xen으로 ‘윈도’를 돌리면 돌리지 윈도에서 과연 저걸 돌릴까 싶은 ㅋㅋ

사용해보고 hyper-v가 가장 잘 먹혀들어갈 수 있는 곳이라고 생각된 곳은 다름이 아니라 ‘테스트 환경 구축’ 이 부분.. 윈도 환경으로 테스트 환경을 만들어야하는데 테스트 서버는 부족하고 (돈을 안준다라는 소리) 공간도 모자라고 전기세도 아깝고 한다라면 이거 이상 좋은 대안도 없다라고 생각..

호스트 서버를 테스트 서버 1로 가상 호스트 2개 더 설치해서 2, 3번의 테스트 서버를 구축해 놓으면 말 그대로 3대가 필요한 테스트 환경을 약간의 추가 메모리가 들어간 서버 1대로 3대의 OS를 돌릴 수 있는 상황이니까 🙂 나쁘지 않은 계산 ㅎ 거기에 스냅샷 기능이 들어가 있으니 돌리고 싶을 땐 맘대로 돌리고~

실제 제품으로 사용하기에는.. 글쎄다 싶다.. 내가 배정받은 자원으로는 Live migration을 테스트 할 수 없었지만.. 잘 된다라면 좋은 기능이지만.. 한정된 OS지원이 역시나 걸리며 다음 버전 정도 되어서는 이상한 라이센스 정책이 나오면서 한 번 더 망가지지 않을까 싶은 생각이 떠나질 않아서;; (제발 라이센스 좀 쉽게 해줘 -_- 이 사람들아)

vmware도 마찬가지이지만.. 적당한 cpu + 빠른 그리고 많은 Hdd + 많은 또는 아주 많은 Memory 이렇게 된다라면 어지간한 윈도 환경은 만들 수 있을 것 같은 기능을 가지고 있으니… 궁금하면 한 번 정도는 써보고 실제 테스트 환경에서 적용시키는 것도 나쁘지 않을 것 같다 🙂

테이블 Row수가 궁금하다면??

1. 일일이 카운트 한다 – 정확도 100%
2. System table 에 저장되어있는 row count 를 참조 한다 – 정확도 1번과 비교하면 약간 떨어짐

물론 정확해야한다면 1번으로..
다만.. 데이터의 증감 또는 분위기 파악 정도로 할 때에 테이블 한 두개면 모를까.. 많으면 1번의 경우 토나오는 작업이 되는 것이 현실..

그래서 2번을 사용하는 경우가 있는데.. 이 때 사용하는 쿼리

——————————————
select    B.name, A.rowcnt
from    sysindexes AS A with (nolock)
    JOIN sys.tables as B with (nolock)
    ON A.id = B.[object_id] and A.indid < 2
order by [name] asc
——————————————

시스템 테이블에 저장되어있는 row count와 table 이름을 조합하여 테이블의 row 갯수를 반환 받을 수 있음..

가끔은 편리함 🙂

MS SQL 서버 이름 변경 후 Maintenance plan 삭제 수정 불가 문제

서비스를 진행하기 전에 서버 이름을 제대로 확정해서 사용하는 것이 좋긴 하지만..
상황에 따라서 서버 머신의 이름을 바꿔야 할 경우가 생기게 되는데.. 문제는 이 경우 메인터넌스 계획에 있는 플랜들의 경우 Local server connection 의 설정을 변경할 수가 없어서 문제가 발생하는 경우가 있다라는 것!
증상으로는 간단하게 변경하기 전의 이름으로 접속을 시도하기에 해당 플랜이 동작을 하지 않는 문제가 나오고.. 삭제 또는 수정을 하려고 해도 변경 전의 이름으로 접속을 시도 하기에 삭제도 수정도 안되는 난감한 상황이 온다라는 것..;;
그럴 경우 내 경우 그냥 강제 삭제 후 재 생성을 택하는데.. 그럴 때 사용하는 법..
———————————————–
USE [msdb]
GO
DECLARE @PlanID AS VARCHAR(255)
BEGIN TRAN DeleteOldMaintenancePlan
SELECT @PlanID = id
FROM sysmaintplan_plans
WHERE name LIKE ‘메인터넌스 플랜 이름’
DELETE FROM sysmaintplan_log
WHERE plan_id = @PlanID
DELETE FROM sysmaintplan_subplans
WHERE plan_id = @PlanID
DELETE FROM sysmaintplan_plans
WHERE id = @PlanID
IF @@ERROR = 0
COMMIT TRAN DeleteOldMaintenancePlan
ELSE
ROLLBACK TRAN DeleteOldMaintenancePlan
GO
———————————————–
이렇게 하면 일단 메인터넌스 계획에 있는 계획들은 삭제가 되며 Job에 생성되어있는 일정은 수동으로;; 삭제를 해주고 (쿼리로 짜도 되는데 귀찮 -ㅂ-) 다시 메인터넌스 플랜을 생성하면 알아서 새로운 정보로 Job에 등록도 되니 해결 완료 🙂
물론 테스트는 반드시 거쳐야하고 ㅎ

Microsoft SQL Server 라이센스를 공부해 봅시다.. -_-+

나름 헷갈릴 수 있는 MSSQL 라이센스 나름 간단 요약본..

1. Cal

구입하면 5명 들어있음..
관리자 2명인가? 1명인가.. 는 따라옴.. 따라서 5명은 서버에 접근하려는 사람.. 1명 또는 2명의 관리자 계정해서 총 6~7명이 접근을 할 수 있음..
2. Process license
SQL 라이센스 계의 엄친아.. 모든 것이 이거 한방이면 끝..
Process license를 구매했다면 10명이 접속하던 100만명이 접속하던 상관없음 ㅎ
언제나 궁금한 건.. 웹 서비스 or 미들웨어 서비스.. (요즘 이거 말고 다른게 어디에 있겠냐만 -_-)
웹서버가 DB서버에 접속해서 일반 사용자들에게 데이터를 제공한다면.. 그 접속자 1명 1명 cal을 사던가 (하지 말라고 있는 옵션이랄까) Process license를 구매 해야함.. 한 프로세서 1개당 500만원 정도 할 듯..
그러니.. 듀얼코어 or 쿼드코어 CPU 2개가 들어가 있다라면.. 500만원 x 2 해서 1000만원이 필요함.. 그러니.. 어지간하면 하드웨어는 쿼드코어 이상으로 구매를 추천.. (램처럼 코어도 다다익선 CPU가 조금 비싸져도 라이센스가 싸짐 ㅎ)
미들웨어 서비스의 경우
사용자 – 중간프로그램 – DB 인 경우..
중간 프로그램이 단 이용자를 1개만 이용하더라도 그 데이터를 일반 사용자들이 이용하기에 위의 웹 서비스와 완전 동일.. 별반 다를 것 없음.. 저 중간프로그램을 단지 웹서버 Apache or IIS 등으로 바꾸면 상황이 똑같으니..
금액도 마찬가지로 다 같음
결론.. 뭐라도 유저들에게 서비스(!) 를 하려고 하십니까??
Process license 말고는 답 없습니다 🙂
인트라넷을 만드십니까??
직원이 50명 정도면 그냥 Cal과 Process license 사이에서 갈등을.. 그것 보다  많다면 Process로 적다면 Cal로.. 다만.. Express edition으로 해결이 된다면.. (하드웨어 제한이 있음) 그냥 express 쓰는게 나은 선택..
TCO가 저렴하다는 것은.. Oracle 또는 IBM DB2에 비교해서지.. 일반적인 기준으로도 아주 싸다는 것은 아니니 참고를;;;; (저러고도 싸단 이야기가 나온다라는 것은 Oracle, DB2의 가격은? ㅎㅎ)
ps. 그냥 중소기업이면.. linux + mysql or postgresql + php 로 가는게 답.. MSSQL 을 써야하는 입장에서 현재 호스팅 받고 있다라면 rental 을 하는 것이 나을 것이고.. 한달에 얼마더라..;; 기억이 가물가물..;;

64-Bit OLEDB Provider for ODBC (MSDASQL)

64bit Windows 2003 에서 OLEDB ODBC 연결 할 때 ‘반드시’ 설치해야하는 핫픽스..

http://www.microsoft.com/downloads/details.aspx?FamilyID=000364db-5e8b-44a8-b9be-ca44d18b059b&displaylang=en

매번 찾는것도 귀찮아서 링크로 저장;;
SQL 64bit 버전에서 Linked서버로 이런 저런 서버들 잡아야 할 떄.. 많은 도움을 주는 녀석이지요~

Linked Server 에서 바로실행 vs Openquery (SQL)

DB서버 두 대가 있음
Linked server 로 묶어도 놨음
다른 쪽 서버의 데이터를 불러오긴 해야함..

select *
from SERVER.DB.SCHEMA.TABLE

vs

select *
from OPENQUERY(SERVER, ‘SELECT * from DB.SCHEMA.TABLE’)

지금까지의 내가 느낀 것으론 승자는 OPENQUERY

이 기종에서도 동일 기종 동일 네트워크에서도 속도 차이는 좀 많이 나는 편..

특별한 상황이 아닌 이상 OPENQUERY를 더 많이 쓰게 되었다라는..
문제는 작성하는게 귀찮다라는거 -ㅂ-;;

Unix 에서만 되는 건 아님~ Windows 에서 특정 확장자 파일을 한꺼번에 옮길때..

윈도에서는 좀 귀찮지만 Windows 2000 Resource kit에 있는 forfiles.exe 라는 파일을 받아야함
Windows NT 5.0 이상이면 적어도 지금까지는 정상적으로 동작을 했으니

자세한 옵션은 forfiles /? 하면 주욱 나올꺼고..

*.log 파일 옮기기
forfiles /P c:\ /S /M *.log /c “cmd move @file d:\backup”

*.log 복사하기
forfiles /P c:\ /S /M *.log /c “cmd copy @file d:\backup”

이렇게 되면 C드라이브 하단에 있는 서브디렉토리까지 싸악다 긁어서 d:\backup 폴더로 옮김

옵션이 많지도 않으니 적당히 조합해서 스케쥴러에 등록해놓으면 편리하다능~

내가 많이 쓰는 옵션은
/S 서브디렉토리
/M 파일 이름 검사
/D 날짜 검사

이정도 인듯.. /D -15 하면 파일의 수정일이 15일 보다 오래된 녀석들이 검사가 됨

혹시나 예전에 DOS를 사용하셨던 분이라면 뒤에 명령어에 도스 명령어 넣으면 무한 확장가능ㅋ하고 ㅋ 잘 기억이 안나서 오타가 있을 수 있지만 큰 뼈대는 저거랑 같으니 에러나면 그냥 적당한 부분 고쳐서 쓰면 될듯;;

Unix Linux 계열에서 특정 확장자 파일 한꺼번에 옮기기

내 경우에는 맥에서 사진 파일을 한꺼번에 옮기는거 때문에 사용했지만..
실무에서는 log 파일들을 옮길때 사용하면 참 편할듯 🙂

find 명령어의 옵션이니 . 대신에 경로를 적어주면 해당 경로의 하위 디렉토리를 검사 하게 될테니 그건 알맞게 수정하면 됨..

1. 옮길때
find . \( ! -name “*.log” \) -type f -exec mv {} /목적경로 \;

2. 복사할때
find . \( ! -name “*.log” \) -type f -exec cp {} /목적경로 \;

차이점은 mv냐 cp냐의 차이;;

특정 이름을 가진 파일들 또는 확장자를 가진 파일들을 쉽게 옮겨 봅시다~ 🙂

SQL 2008 좌절 대면 간단후기..

몇 일 수준을 넘어가 몇달.. 그리고 햇수까지 넘어가서 작년에 벌어진 일이긴 하지만 ㅋ

전자제품, 컴퓨터, 자동차 등 하드웨어의 스펙은 죽어라 읽고 익히고 하면서도 정작 소프트웨어 스펙은 ‘그냥 깔고 쓰면 되지’ 라는 생각이 워낙 강해서-_-;; 당시 베타였던 SQL 2008이 CTP버전으로 제공이 되고 있을때 깔아서 써보고 가장 맘에 들었던 기능중의 하나인 압축백업! compressed backup 이 기능 하나만으로도 SQL 2008은 살 만한 가치가 있다라고 생각했고 정식판이 나오기를 아기다리고기다렸는데..

정식판이 나와서 깔고 두둥~ 압축백업 시작~했는데 안된다.. 메시지가 나왔는데…

‘너가 깐 에디션에서는 안됨(ㅋㅋ), 설명서 좀 읽어보셈’  ← 이렇게 보였음-_- 물론 공손한 말로 적혀있었지만

그래요.. 전 Standard edition을 깔았었지요

저 좋은 기능을 그냥 제공하기는 싫었던 모양;;
사용조건이 Enterprise edition 이었으나.. 소프트웨어 스펙을 제대로 읽어보지 않고 그냥 맘대로 덤빈것이 화근..

후우..

mp3 하나 살때도 8기가짜리네 16기가 짜리네.. 싸구려 이어폰을 볼때도 음역대역이 이건 이렇네 같이 이상한것들은 봤으면서 정작 내가 정말 쓰고 싶은 기능에 대한 요구사항은 제대로 알아보지 못한.. 케이스..

결론 : 압축백업 기능은 SQL 2008 Enterprise edition에서 지원됩니다.. 돈을 바르세요! 싫으면 알아서 압축 하던가 -ㅂ-;

MSSQL Mirroring 구현하기 – MSSQL 미러링, FQDN 에러 해결 방법

SQL 2005 가 발표되면서 가장 마음에 들었던 기능중 하나인 Mirroring 을 구현함에 있어서 서버들의 환경이 도메인으로 묶여있는 환경이 아니라면 (보통의 경우는 묶여있는 경우가 드물듯..;; ) 설정을 할 때 이런저런 에러 사항이 꽃을 피게 되는데 대표적인 예가 FQDN (Fully Qualified Domain Name) 을 운운 하면서 에러를 내보내는 경우가 대부분 이라는 것..

이를 해결 하기 위해서는 모든 서버들은 도메인으로 – 액티브디렉토리를 사용하여 도메인 구조로 묶게 되면 해결이 되지만 DBMS하나 깔아서 쓰는 것도 귀찮고 힘들어 죽겠는데 액티브 디렉토리까지 신경쓰기 싫을 경우에 나름의 꼼수로 ㅎ 쓸 수 있는 방법..

나도 IDC에 액티브 디렉토리의 설정을 들여놓긴 싫어서 같은 방법을 쓰고 있으며 뭐 잘 돌아가니 🙂

OS 는 Windows server 2003 이상이면 되고 DBMS는 SQL 2005 이상이면 동작한다
다만 SQL 2005의 서비스팩은 반드시 적용하시길~ SQL 2005의 경우 현재(2009/01/30) SP3 까지 나와있으니 download 페이지에서 받으시면 준비는 끝날듯~

미러링을 위해서는 총 세개의 인스턴스가 설치가 되어있으면 되며 물리적으로 분리가 되어있어도 되며 그게 아니라면 추가 인스턴스로 되어있어도 동작하는데는 문제가 없음..

이제 작업 리스트
내 경우에는 총 3대의 서버에서 진행을 했으며 마스터DB와 미러DB는 SQL 2005 Standard edition 그리고 감시용으로는 SQL 2005 express edition을 사용했음

1. Host file의 수정
172.10.10.10       db1.database.server.hugyou.net
172.10.10.11       db2.database.server.hugyou.net
172.10.10.12       db3.database.server.hugyou.net

뒤에 도메인 네임은 쓰고 싶으신 걸로 🙂 dbserver1.google.com 이라고 해도 상관없음 -_-;;

2. Full backup & Transaction log backup
마스터 DB에서 하나의 Full backup 그리고 그 이후에 생성된 Transaction log backup 을 생성한 후 해당 백업 파일을 미러DB에 복사해놓음

3. 2번에서 생성된 백업 파일을 복원
복원을 할 때 with nocovery 옵션으로 DB를 열어놓은 상태로 만들어 놓는다

4. DB서버 별 인증서 파일 생성
— 마스터DB
create master key encryption by password = ‘마스터DB 비밀번호’;
GO

create certificate DATABASE_A_Cert with subject = ‘DATABASE A Certificate’, start_date = ‘2009/01/01’, expiry_date = ‘2020/12/31’;
GO

Create endpoint endpoint_mirroring state = started
as tcp(listener_port = 7123, listener_ip = all)
for database_mirroring (authentication = certificate DATABASE_A_Cert, encryption = REQUIRED, role = all);
GO

Backup certificate DATABASE_A_Cert to file = ‘c:\DATABASE_A_Cert.cer’;
GO

— 미러DB
create master key encryption by password = ‘미러DB 비밀번호’;
GO

create certificate DATABASE_B_Cert with subject = ‘DATABASE B Certificate’, start_date = ‘2009/01/01’, expiry_date = ‘2020/12/31’;
GO

Create endpoint endpoint_mirroring state = started
as tcp(listener_port = 7123, listener_ip = all)
for database_mirroring (authentication = certificate DATABASE_B_Cert, encryption = REQUIRED, role = all);
GO

Backup certificate DATABASE_B_Cert to file = ‘c:\DATABASE_B_Cert.cer’;
GO

— 감시DB
create master key encryption by password = ‘감시DB 비밀번호’;
GO

create certificate DATABASE_C_Cert with subject = ‘HOST_W certificate’, start_date = ‘2009/01/01’, expiry_date = ‘2020/12/31’;
GO

Create endpoint endpoint_mirroring state = started
as tcp(listener_port = 7123, listener_ip = all)
for database_mirroring (authentication = certificate DATABASE_C_Cert, encryption = REQUIRED, role = witness);
GO

Backup certificate DATABASE_C_Cert to file = ‘c:\DATABASE_C_Cert.cer’;
GO

인증서 생성시 유효 기간은 알아서 적당하게 진행하면 되며 내 경우에는 다시 설정하기 귀찮으니–;; 10년정도 뒤로 -ㅅ-;; 설마 2020년까지 이 시스템을 사용하지는 않겠지 ㅎ

5. 생성된 인증서 파일을 각 서버에 전부 카피 한다
서버는 다른 두 서버에서 생성된 인증서를 가지고 있어야 함

6. 로그인 계정 생성 및 Endpoint 설정 – 가장 긴 부분 🙂
— 마스터DB
create login DATABASE_B_login with PASSWORD = ‘미러DB 로그인 암호’;
GO

create user DATABASE_B_user from login DATABASE_B_login;
GO

Create certificate DATABASE_B_Cert
Authorization DATABASE_B_user
From file = ‘c:\DATABASE_B_Cert.cer’;
GO

Grant CONNECT ON Endpoint::endpoint_mirroring to [DATABASE_B_login];
GO
——
create login DATABASE_C_login with PASSWORD = ‘감시DB 로그인 암호’;
GO

create user DATABASE_C_user from login DATABASE_C_login;
GO

Create certificate DATABASE_C_Cert
Authorization DATABASE_C_user
From file = ‘c:\DATABASE_C_Cert.cer’;
GO

Grant CONNECT ON Endpoint::endpoint_mirroring to [DATABASE_C_login];
GO

— 미러DB
create login DATABASE_A_login with PASSWORD = ‘마스터DB 로그인 암호’;
GO

create user DATABASE_A_user from login DATABASE_A_login;
GO

Create certificate DATABASE_A_Cert
Authorization DATABASE_A_user
From file = ‘c:\DATABASE_A_Cert.cer’;
GO

Grant CONNECT ON Endpoint::Endpoint_mirroring to [DATABASE_A_login];
GO

——-
create login DATABASE_C_login with PASSWORD = ‘감시DB 로그인 암호’;
GO

create user DATABASE_C_user from login DATABASE_C_login;
GO

Create certificate DATABASE_C_Cert
Authorization DATABASE_C_user
From file = ‘c:\DATABASE_C_Cert.cer’;
GO

Grant CONNECT ON Endpoint::Endpoint_mirroring to [DATABASE_C_login];
GO

— 감시DB
create login DATABASE_A_login with PASSWORD = ‘마스터DB 로그인 암호’;
GO

create user DATABASE_A_user from login DATABASE_A_login;
GO

Create certificate DATABASE_A_Cert
Authorization DATABASE_A_user
From file = ‘c:\DATABASE_A_Cert.cer’;
GO

Grant CONNECT ON Endpoint::Endpoint_mirroring to [DATABASE_A_login];
GO

——-
create login DATABASE_B_login with PASSWORD = ‘미러DB 로그인 암호’;
GO

create user DATABASE_B_user from login DATABASE_B_login;
GO

Create certificate DATABASE_B_Cert
Authorization DATABASE_B_user
From file = ‘c:\DATABASE_B_Cert.cer’;
GO

Grant CONNECT ON Endpoint::endpoint_mirroring to [DATABASE_B_login];
GO

7. 미러링 설정 하기
— 미러DB
alter database [DB이름] set partner = ‘TCP://db1.database.hugyou.net:7123’;
GO

— 마스터DB
alter database [DB이름] set partner = ‘TCP://db2.database.hugyou.net:7123’;
GO

alter database [DB이름] set witness = ‘TCP://db3.database.hugyou.net:7123’;
GO

이걸로 미러링 끝~ 🙂 뭐 오타 있을 수 있지만 그건 그 때 알아서 고치면 될 것 같고;;
이제 도메인 걱정없는 미러링을 즐겨봅시다~

마스터가 죽으면 자동으로 미러로 서비스가 옮겨지지만 ip 주소가 다를 경우 어플리케이션 들은 DB가 변경이 되었는지 알길이 없으니 연결을 시도해보고 마스터가 죽었으면 미러로 접속을 하는 설정을 해놓으면 마스터DB의 시간을 벌 수 있을듯~

Opensolaris 오픈솔라리스 설치

Unix 계 OS 의 3인방하면 HP-UX, AIX 그리고 Solaris 이렇게 생각이 되는데 HP-UX야 이름에서 알 수 있듯 HP머신 아니면 돌질 않고–;; AIX는 IBM에서만 돌고 결국 지금 범용으로 쓸 수 있는건 Solaris 말고는 없다라고 결론 🙂

OS 전체를 밀고 다시 까는건 지금 상황에서는 할 수 없으니 가상머신의 도움을 받아서 설치를 시작

1. OS 이미지 다운로드
http://www.opensolaris.com
http://www.opensolaris.org

현재의 최신 버전은 2008년 11월 버전인 08.11
해당 ISO파일을 굽고 부팅하면 사실 설치 하지 않아도 맛은 볼 수 있는 상태가 됨 🙂
물론 LiveCD방식이기에 이것저것 하고 놀기에는 느리긴 하지만.. 그냥 재미삼아.. 그리고 설치를 위해서는 어쩔 수 없이 🙂 일단은 LiveCD로 부팅을 함

2. 설치
우분투를 설치해본 경험이 있다라면 아주 쉽게 적응 할 수 있을 듯..
설치 패키지 부터 한글도 지원을 하니 큰 문제 없이 설치가 완료될 것이라 생각~

3. 첫만남


우분투를 그대로 배껴놓은 듯한 메뉴를 가진 파란 바탕화면을 볼 수 있음 🙂
Firefox도 있고 하니 인터넷이 된다면 그 때부터는 인터넷으로 모든 패키지나 소프트웨어등을 받을 수도 있고 놀 수도 있다 ㅎ



4. 뭔가는 해봐야지–;;

Unix/Linux 계열의 얼굴마담 소프트웨어인 Apache+MySql+PHP를 설치해보기로 결정

# su (관리자 패스워드 입력)
# pkg install amp

기다리면 끝;;

아 쉽다 -ㅅ-;;

데비안 만든 사람이 Sun으로 옮겨 간 후에 참가해서 그런지 데비안 기반의 리눅스가 가지고 있는 설치의 편리함이 솔라리스에도 녹아들어가있음 🙂

5. 모듈들 실행
/usr/apache2/2.2/bin/apachectl start
/usr/mysql/5.0/bin/mysql_install_db –user=mysql
/usr/mysql/5.0/bin/mysqld_safe &

그리고 나서 Firefox 열고 http://localhost 하면

아마도 It works! 화면이 반겨줄듯~ 🙂
mysql 은 경로 찾아 들어가서 접속하면 바로 될듯 하고
php는 phpinfo() 해보니 잘 출력되더라는~ 이렇게까지만 되어도 일단은 만족~ ㅎ

이제 솔라리스로 서버도 깔 수 있게 되었으니 mysql 기본 사용법은 검색하면 아주 많이 나오니 그거 따라하면 되고 백업도 되고 아파치도 돌고 하니 프로덕션으로 써도 큰 문제는 없는 환경까지는 만들었음 🙂

물론-_-;; 이렇게 환경 만들면 난리나지만서도;;;;;
리눅스 말고 솔라리스! 에서 돌아가잖아~ 🙂

ps. 사실 솔라리스 사용자들이 극찬을 마지않는 ZFS 파일 시스템이 써보고 싶어서 솔라리스에 관심이 있었는데 이제서야 내 실력으로 설치 정도는 할 수 있는 패키지가 나오기 시작하는듯.. 기존에는 깔기만 했지 이거 뭐 제대로 돌려본 적이 없었으니 ㅠㅠ

MySQL 에서 LOAD DATA INFILE 과정을 web에서 처리 할 때 필요한 권한

php등에서 리눅스 서버로 업로드 하고 나면 보통 /tmp 디렉토리에 올라가는데 해당 파일에서 MySQL로 LOAD DATA INFILE을 시도 할 경우 에러가 나게 될 가능성이 있으니 혹시라도.. 업로드 파일을 바로 사용할 경우에는 DB 사용자의 권한을 체크!
use mysql;
select * from user;
하면 유저들 정보가 주욱 다 나오는데 해당 권한들 중에서 import시 사용되는 유저의 file_priv 의 권한을 Y로 바꾸고 flush를 합시다 🙂

MSSQL 에서 MySql 데이터를 조회해야할 일이 있을때 – OPENQUERY 사용예시..

오늘 간만에 한번 실무에서 써봤으니 까먹지 않게 정리 한판..

MSSQL이 깔려있는 서버 컴퓨터에 MySql connecter/ODBC 를 깐다.. 최근 버전은 5.1임..
(많은 자료들이 아마도 3.51 로 되어있는 경우가 많을듯)
MySql ODBC 드라이버를 깐 후 Linked Server를 ODBC를 이용하여 잡아줌
그후 쿼리 날리기
select * from openquery(MYSQL, ‘select * from TABLE limit 100’)
INSERT into openquery(MYSQL,’select fd1, fd2, fd3 from TABLE’)
select va1, va2, va3
from source.table
or 
INSERT into openquery(MYSQL,’select fd1, fd2, fd3 from TABLE’)
values (va1, va2, va3)
내 경우에는 Linked Server의 이름을 MYSQL 로 잡았기에 위처럼 쿼리를 날리면 된다라는..

MySQL – 텍스트, CSV 등의 Flatfile을 import 할 때 쓰는 명령어

작업 하다보면 txt파일 또는 csv등의 파일들을 DB에 넣어야 할 경우가 많은데 phpmyadmin 을 쓰지 않는 이상 쿼리로 모든 것을 해야하니 이번에 작업 하나 한 김에 또 잊기전에-_- 기록 남겨놓기 🙂

쿼리를 이렇게 날립시다
mysql > LOAD DATA INFILE ‘/경로/파일이름.txt’ INTO TABLE ‘테이블’ FIELDS TERMINATED BY ‘\t’ LINES TERMINATED BY ‘\n’ (필드1, 필드2);

이렇게 하면 /경로/파일이름.txt가 ‘테이블’ 이라는 이름의 테이블로 입력 되는데 필드1, 필드2 라는 이름의 필드들에 해당 값이 import 됨

에러가 나와도 진행을 하기 위해서 필드 뒤에 IGNORE 1 LINES  명령어를 넣어주면 됨

작업 좀 편하게 합시다~ 🙂
mysql 로그인 도 귀찮은 경우에는

$> mysql -uroot -p -e “LOAD DATA INFILE ‘/경로/파일이름.txt’ INTO TABLE ‘테이블’ FIELDS TERMINATED BY ‘\t’ LINES TERMINATED BY ‘\n’ (필드1, 필드2);”

이렇게 처리를 해주면 로그인을 한 화면에서 다시 붙여넣기를 하지 않아도 자알 들어감..