'MySQL'에 해당되는 글 4건
- 2008.08.14 Aqua Data Studio에서 한글 설정 / Mysql 의 한글깨질때
- 2007.07.25 [펌]MySql 복구 방법
- 2007.07.25 [펌]MySQL Cluster
- 2007.07.25 [펌]MySQL Replication 설치 3
1. Aqua Data Studio 프로그램 / 기본 Grid 등에서 나타날 한글의 설정
File -> Options -> General 에서
Look and Feel Font
Editor Font
Text Results Font
Grid Results Font
이 네군데의 폰트를 한글폰트로 지정해 준다.
처음엔 한글폰트 이름조차 ㅁㅁㅁ 이런형태로 나타난다. 일단 한글 폰트로 여겨지는 폰트를 선택후
프로그램을 재시작 해서 원하는 폰트로 다시 지정하도록 한다.
폰트 변경후에는 꼭 프로그램을 재시작해 주어야 한다.
최신버전의 오라클 / Mysql / 기본 인코딩이 UTF-8로 지정되어 있다면 이것 만으로도 충분하다.
2. SQL 서버의 인코딩이 다를 경우...
(나의 경우는 1번의 세팅후에도 Mysql 3.x 대 버전에서는 한글이 깨져서 나왔다. EUC-KR 로 세팅된 Mysql 서버임.)
오라클에서는 테스트 해보질 못했다.
일단 검색한 결과...
등록한 서버에서 마우스 오른쪽 버튼을 클릭후 -> Server Properties 를 선택 -> Advanced 에서
Driver Param 부분에 ?CHARSET=eucksc 라고 하면 된다고 나왔다.
Mysql 에서는
마우스 오른쪽 버튼을 클릭후 -> Server Properties 를 선택 -> Advanced 에서
Driver Param 부분에 ?characterEncoding=EUC-KR 이라고 입력후 접속하니 문제 없이 한글 출력이 되었다.
'Computing' 카테고리의 다른 글
윈도우환경에서 php5 세팅시 php_oci8.dll 문제... (0) | 2009.01.20 |
---|---|
시너지(synergy) 1.3.1 한글패치버젼 (Key Patch) (0) | 2008.11.24 |
HP 컬러레이저 CP1215 이벤트 (0) | 2008.07.10 |
오라클 데이터타입 (0) | 2008.04.11 |
동영상(영화) 재생시 음성(목소리)만 작게 나올때 (1) | 2008.03.09 |
결국 복구는 했지만 백업화일을 만들어 두지 않아서 나름 귀찮고 힘든 과정이었다.
그래서 mysql 를 날렸을때 복구하는 방법을 간단하게나마 설명하고자 한다.
root 계정으로 작업하고 /usr/local/mysql 을 기본 디렉토리로 본다는 가정하에.. ^^
mysqldump를 이용한 백업화일이 존재하는 경우
/usr/local/mysql/bin/mysql -u root -p < BackUp.sql
가장 쉽게 복구하는 방법이다.
하지만 이 경우 문제점이 있다.
Cron 등의 프로그램으로 매일 백업을 받는다고 하더라도...
백업받은 시점과 DB를 날린 시점에서의 데이터는 다를수 있기 때문이다.
그런 부분을 커버 할수 있는것이 binlog 이다.
원래 binlog는 replication 을 위한 것인데... replication 이 아닌 복구용도로도 훌륭한 데이터이다.
/etc/my.cnf 에..
log-bin 라는 부분이 주석처리 되어 있지않으면..
mysql 은 기본적으로 /usr/local/mysql/data 디렉토리에 Host명-bin.000001 Host명-bin.000002 .... 과 같은
형식으로 만들어 질것이다. mysql을 재시작할때마다 Host명-bin.0000001 에서 숫자부분이 늘어난 화일이
생성되며 그 화일에 새롭게 기록한다.
※ mysql binlog 디렉토리 설정
my.cnf 에서
log_bin = /usr/local/mysql/data/mysql-bin.log <== 이런식의 설정도 가능하다.
bin 로그에는 기본적으로 DDL(Create, Alter, Drop)문과 DML중 Insert Update Delect 문등이 기록되는데..
이 기록들은 기본적으로 데이터에 변화를 주는 SQL문들이다..
bin 로그를 보려면 log의 데이터를변환해야한다.
binlog는 기본적으로 바이너리로 되어 있기에 텍스트 형태로 푸는 과정이 필요하다.
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/Host명-bin.000001 >> 1.sql
이와 같은 과정으로 모든 binlog를 푼다..
vi 등으로 보면 시간 및 각각의 sql문들이 보일것이다..
※ 로그화일 쪼개기
가끔 log 화일이 너무 커서 제대로 인식이 안되는 경우가 있다.
이런 경우 split 이라는 훌륭한 툴이 있다.
split -l 100000 1.sql
10만 라인별로 1.sql 을 xaa, xab, aac..... 순으로 화일이 생성되면서 짜른다.
자 이제 복구를 하자라고 하고 싶지만..
여기서 주의 할것이 있다..
처음에... drop database 같은 sql 을 날렸다면
이 역시 binlog에 포함되어 있을것이다.
맨 마지막 로그 화일을 열어서 그부분을 삭제 또는 주석처리하자..
그렇지 않으면 애써 복구한것을 마지막에 다시 또 날리는 되는 결과를 .....
이제서야 복구를 할수 있을것이다.
/usr/local/mysql/bin/mysql -u root -p < 1.sql
만약 여기서도 5만줄쯤에서 오류가 났다라고 한다면...
1.sql 에서 1~49999 까지는 실행이 되었다.
그러므로 1~49999 를 삭제(vi 로 연다음 d49999 이라고 입력하고 Enter ...)한다.
그리고 문제가 되는 첫줄(1~49999를 삭제하기전에는 오류가 난 5만번째라인)의 SQL 부분을 해결한다음...
저장....
그리고 다시 복구과정을 반복
/usr/local/mysql/bin/mysql -u root -p < 1.sql
php 스쿨 [서버운영] Drop 된 Mysql Binlog를 이용한 복구 과정 에서 퍼 왔습니다.
'Computing > MySQL' 카테고리의 다른 글
mysql 복구 (0) | 2011.11.04 |
---|---|
[Mysql] 쿼리문 내에서 encoding 변경... (0) | 2010.11.17 |
[펌]MySQL Cluster (0) | 2007.07.25 |
[펌]MySQL Replication 설치 (3) | 2007.07.25 |
MySQL Cluster
저작권:이 문서는 자유롭게 배포가 가능합니다. 단 상업적 용도로 사용할 수 없습니다.
배포 시 작성자의 이름 및 출처를 꼭 명시하기 바랍니다.
작성자 : f405(ccotti22)
작성일 : 2005년 8월 10일 수요일
이메일 : f405@naver.com
홈페이지 : http://f405.tistory.com
이 문서는 MySQL Cluster 매뉴얼을 번역, 정리한 것으로 틀린 부분을 다소 포함할 수 있으며, 저는 그에 대한 책임을 지지 않겠습니다.
부족하지만 다른 분들도 공부하는데 도움이 되길 바랍니다.
그리고 이 문서를 작성하기 전 참고한 리눅스 및 MySQL 문서들을 작성하신 많은 선배님들에게 감사의 말씀을 드립니다.
그리고 이 후부터는 경어는 생략하였습니다. 양해의 말씀을...
Introduction
MySQL 클러스터는 분산 컴퓨팅 환경에서 high-availability와 high-redundancy를 채택하였다. MySQL 클러스터는 NDB 클러스터 스토리지 엔진을 사용하여, 클러스터에서 여러 개의 서버가 함께 돌아가도록 한다. MySQL 클러스터가 지원하는 운영 체제는 Linux, Mac OS X, Solaris 등 이다. 더 자세한 정보는 다음 사이트를 참고 하길 바란다.
http://www.mysql.com/products/cluster
1. MySQL Cluster Overview
MySQL 클러스터는 share-nothing 시스템에서 in-memory 데이터 베이스의 클러스터링을 가능하게 한다. 이러한 아키텍쳐는 특정한 하드웨어 및 소프트웨어를 요구하지 않으므로 비용을 절감할 수 있도록 하며, 각 콤포넌트가 고유 메모리와 디스크를 보유함으로 단일 취약점(single point of failure)을 가지지 않는다.
2. Basic MySQL Cluster Concepts
NDB는 높은 가용성과 데이터 지속성을 갖는 인 메모리 스토리지 엔진이다. DB 스토리지 는 failover와 로드 밸런싱 옵션을 설정할 수 있다. MySQL 클러스터는 NDB 스토리지 엔진과 MySQL 서버로 구성되어 있으며, MySQL 클러스터의 클러스터 부분은 MySQL 서버에 독립적이다. MySQL 클러스터의 각 부분은 노드로 간주한다.
"노드"는 일반적으로 컴퓨터를 지칭하지만 MySQL 클러스터에서는 "프로세스"를 말한다.
- MGM node : 이 노드는 설정을 포함, 다른 노드를 관리하는 매니저 노드이다.
다른 노드보다 가장 먼저 실행되며 ndb_mgmd 명령으로 실행시킨다.
- data node : 클러스터의 데이터를 저장하는 노드이다.
ndbd 명령으로 실행시킨다.
- SQL node : 클러스터 데이터에 접근하는 노드이다.
MySQL 클러스터에서는 NDB 클러스터 스토리지 엔진을 사용하는
MySQL 서버가 클라이언트 노드이다.
mysqld --ndbcluster나 mysqld 명령으로 실행시키는데,
이 때는 my.cnf 에 ndbcluster를 추가한다.
Simple Multi-Computer How-To
다음과 같이 4대의 컴퓨터로 클러스터를 구성하는 것을 가정하고 있다. (4개의 노드로 구성되고, 각각의 노드는 편이성을 위해 IP로 지칭한다.)
Node |
IP Address |
Management (MGM) node |
192.168.0.10 |
MySQL server (SQL) node |
192.168.0.20 |
Data (NDBD) node "A" |
192.168.0.30 |
Data (NDBD) node "B" |
192.168.0.40 |
설치 및 사용 시 주의할 점은 MySQL 클러스터는 클러스터 노드 간 커뮤니케이션에 암호화 및 보호 장치가 전혀 없으므로, 웹 상에서 사용하려면 방화벽을 사용하는 등의 보안상의 대책이 필요하다는 것이다.
MySQL Cluster를 사용하기 위해서는 -max 버전을 설치해야 한다.
모든 설치는 root권한으로 진행하며 작업에 필요한 파일은 /usr/local/ 에 저장한다.
# cd /usr/local
# groupadd mysql
# useradd -g mysql mysql
# tar -xzvf mysql-max-4.1.13-pc-linux-gnu-i686.tar.gz
# ln -s /usr/local/ mysql-max-4.1.13-pc-linux-gnu-i686 mysql
# cd mysql
# scripts/mysql_install_db --user=mysql
# chown -R root .
# chown -R mysql data
# chgrp -R mysql .
5. 시스템 부팅 시 자동적으로 Mysql을 실행할 수 있도록 설정한다.
# cp support-files/mysql.server /etc/rc.d/init.d/
# chmod +x /etc/rc.d/init.d/mysql.server
# chkconfig --add mysql.server
6. MGM (management) 노드를 별도의 PC에 설치할 경우 mysql 데몬은 설치하지 않아도 무방하다. 위와 같이 설치한 후 MGM 서버는 다음과 같이 설치를 계속한다.
# cd /usr/local/mysql/bin/
# cp ndb_mgm* /usr/local/bin/
# chmod +x ndb_mgm*
# vi /etc/my.cnf
[MYSQLD] # Options for mysqld process:
Ndbcluster # run NDB enginen
db-connectstring=192.168.0.10 # location of MGM node
[MYSQL_CLUSTER] # Options for ndbd process:
ndb-connectstring=192.168.0.10 # location of MGM node
# mkdir /var/lib/mysql-cluster# cd /var/lib/mysql-cluster
# vi config.ini
[NDBD DEFAULT] # Options affecting ndbd processes on all data nodes:
NoOfReplicas=2 # Number of replicas
DataMemory=80M # How much memory to allocate for data storage
IndexMemory=18M # How much memory to allocate for index storage
# For DataMemory and IndexMemory, we have used the
# default values. Since the "world" database takes up
# only about 500KB, this should be more than enough
# for this example Cluster setup.
[TCP DEFAULT] # TCP/IP options:portnumber=2202
# This the default; however, you can use any
# port that is free for all the hosts in cluster
# Note: In MySQL 5.0, this parameter is deprecated;
# it is recommended that you do not specify the
# portnumber at all and simply allow the port to be
# allocated automatically
[NDB_MGMD] # Management process options:
hostname=192.168.0.10 # Hostname or IP address of MGM node
datadir=/var/lib/mysql-cluster # Directory for MGM node logfiles
[NDBD] # Options for data node "A":
# (one [NDBD] section per data node)
hostname=192.168.0.30 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for this data node's
# datafiles
[NDBD] # Options for data node "B":
hostname=192.168.0.40 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for this data node's
# datafiles
[MYSQLD] # SQL node options:
hostname=192.168.0.20 # Hostname or IP address
datadir=/usr/local/mysql/data # Directory for SQL node's datafiles
# (additional mysqld connections can be
# specified for this node for various
# purposes such as running ndb_restore)
# ndb_mgmd -f /var/lib/mysql-cluster/config.iniMGM 노드를 다운시킬 때에는 다음과 같이 하면 된다.
# ndb_mgm -e shutdown
# ndbd --initial
# /etc/rc.d/init.d/mysql.server start
# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm>
ndb_mgm> show
Connected to Management Server at: 192.168.0.10:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.30 (Version: 4.1.13, Nodegroup: 0, Master)
id=3 @192.168.0.40 (Version: 4.1.13, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.0.10 (Version: 4.1.13)
[mysqld(API)] 1 node(s)
id=4 (Version: 4.1.13)
ndb_mgm>
3. MySQL 클러스터의 제한
- 트랙잭션 수행 중의 롤백을 지원하지 않으므로, 작업 수행 중에 문제가 발생하였다면, 전체 트랙잭션 이전으로 롤백하여야 한다.
- 실제 논리적인 메모리의 한계는 없으므로 물리적으로 허용하는 만큼 메모리를 설정하는 것이 가능하다.
- 컬럼 명의 길이는 31자, 데이터베이스와 테이블 명은 122자까지 길이가 제한된다. 데이터베이스 테이블, 시스템 테이블, BLOB인덱스를 포함한 메타 데이터(속성정보)는 1600개까지만 가능하다.
- 클러스터에서 생성할 수 있는 테이블 수는 최대 128개이다.
- 하나의 로우 전체 크기가 8KB가 최대이다(BLOB를 포함하지 않은 경우).
- 테이블의 Key는 32개가 최대이다.
- 모든 클러스터의 기종은 동일해야 한다. 기종에 따른 비트저장방식이 다른 경우에 문제가 발생하기 때문이다.
- 운영 중 스키마 변경이 불가능하다.
- 운영 중 노드를 추가하거나 삭제할 수 없다.
- 최대 데이터 노드의 수는 48개이다.
- 모든 노드는 63개가 최대이다. (SQL node, Data node, 매니저를 포함)
4. MySQL Cluster FAQ
(SizeofDatabase * NumberOfReplicas * 1.1 ) / NumberOfDataNodes
5. MySQL Cluster Glossary
- ndbd : 데이터 노드 데몬
- ndb_mgmd : MGM서버 데몬
- ndb_mgm : MGM 클라이언트
- ndb_waiter : 클러스터의 모든 노드들의 상태를 확인할 때 사용
- ndb_restore : 백업으로부터 클러스터의 데이터를 복구할 때 사용
이미지 #1
첫번째 이미지
이미지 #2
두번째이미지
'Computing > MySQL' 카테고리의 다른 글
mysql 복구 (0) | 2011.11.04 |
---|---|
[Mysql] 쿼리문 내에서 encoding 변경... (0) | 2010.11.17 |
[펌]MySql 복구 방법 (0) | 2007.07.25 |
[펌]MySQL Replication 설치 (3) | 2007.07.25 |
MySQL Replication 설치
저작권 : 이문서는자유롭게수정및배포가가능합니다. 단상업적용도로사용할수없습니다.
수정및배포시작성자의이름및출처를꼭명시하기바랍니다.
작성자 : f405(ccotti22)
작성일 :
이메일 : f405@naver.com
이문서는공부하는입장에서작성되었으므로틀린부분을다소포함할수있으며, 저는그에대한책임을지지않겠습니다. 부족하지만다른분들도공부하는데도움이되길바랍니다. 그리고이문서를작성하기전참고한리눅스문서들을작성하신많은선배님들에게감사의말씀을드립니다.
그리고이후부터는경어는생략하였습니다. 양해의말씀을...
설치환경
Red Hat Linux (Kernel 2.6.9-22.ELsmp)
Intel(R) Xeon(TM) CPU 2.80GHz ( 4 CPU )
MemTotal : 1GB
설치패키지구성(필요한파일)
//다음파일들을다운받고설치시작 (
mysql-standard-5.0.17-linux-i686-glibc23.tar.gz
다음사이트에서필요한파일들을다운받을수있다.
[MySQL] http://dev.mysql.com/downloads
- MySQL 설치
Replication을구축하기위해우선 MySQL을설치한다. 설치시특이사항은없고일반적으로설치하면되므로기타자세한설명은하지않도록하겠다.
# groupadd mysql
# useradd -g mysql
# tar xvzf mysql-standard-5.0.17-linux-i686-glibc23.tar.gz
# mv ./mysql-standard-5.0.17-linux-i686-glibc23 /usr/local/
# ln -s /usr/local/ mysql-standard-5.0.17-linux-i686-glibc23 /usr/local/mysql
# cd /usr/local/mysql
# ./scripts/mysql_install_db
# chown -R root .
# chown -R mysql data
# chgrp -R mysql .
# cp ./support-files/my-medium.cnf /etc/my.cnf
# cp ./support-files/mysql.server /etc/init.d/mysqld
# vi /etc/init.d/mysqld
///// 다음부분을잘찾아서고칠것
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file --user=mysql >/dev/null 2>&1 &
# chmod 700 /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig --level 345 mysqld on
# /etc/init.d/mysqld start
- MySQL Replication 설치
Replication 이란?
Replication은 3.23.15부터지원되기시작한기능으로 ‘복제’라는사전적의미에맞게마스터의 MySQL 서버의데이터를여러대의슬레이브 MySQL 서버의데이터와동기화시켜주는기능이다.
주로, MySQL의데이터를실시간으로백업하거나, 데이터서버의부하분산을하고자할때많이사용된다.
자, 이제 Master-Slave로구성된 Replication 상태를만들어보도록하자.
How to Set Up Replication
1. MySQL을 master 와 slave 서버에설치한다.
안정성을위해두서버의버전을맞춰주는것이좋다. Replication 기능은3.23.15부터지원되기시작하였으나 3.23.32부터안정화되었다고알려져있으므로, 그이상혹은최신버전의 MySQL 을설치하길권장한다.
2. slave 서버에서 master 서버에접속할수있도록, master 서버에계정을만든다. 사용자를추가해주어야한다는말이다. 이계정에 REPLICATION SLAVE 권한을주어야한다. replication에만사용할계정이라면추가적인권한은주지않아도된다.
slave 서버에서master 서버에접속할계정과패스워드에권한을부여하는명령은다음과같다.
master mysql > GRANT REPLICATION
여기서 user_name은중복되지않는이름이면되며, user_host 는 slave로만들서버의주소혹은도메인네임을적어준다. 이주소의 slave 유저만 master 서버로접속할수있다.
4.0.2 이전버전의 MySQL에서는, REPLICATION SLAVE 권한이없으므로, 다음과같이 FILE 권한으로대신한다.
master mysql > GRANT
-> TO 'user_name'@'user_host' IDENTIFIED BY 'user_password';
3. master 서버의기본데이터를백업받아, slave 서버의데이터베이스에복사한후, 데이터디렉토리에서압축을푼다.
HOT 백업
master mysql > FLUSH TABLES WITH READ LOCK;
master shell > tar -cvf /tmp/mysql-snapshot.tar .
slave shell > tar -xvf /tmp/mysql-snapshot.tar
master mysql > UNLOCK TABLES;
mysqldump 이용백업
master Shell > mysqldump –u root –p ‘password’ -B db_name > dump_file.sql
4. Master 와 Slave 의데이터베이스환경을설정한다.
우선 master 서버를설정하도록한다.
master shell> vi /etc/my.cnf
master 서버는디폴트로구성이되어있을것이므로, [mysqld] 섹션에 log-bin이있는지확인한다.
[mysqld]
log-bin
server-id = 1
5. 다음은 slave 서버의환경설정이다.
slave shell> vi /etc/my.cnf
[mysqld] 섹션으로가서 server-id를 master 서버의 server-id와다르게설정한다.
본문서에서는 2로설정하도록하겠다. slave 서버를여러대로구축하고자할때에각 slave 서버의 server-id는각각달라야한다는것에주의하자. 2^32-1까지가능하다.
[mysqld]
server-id = 2
master-host = xxx.xxx.xxx.xxx(user_host)
master-port = 3306
master-user = user_name
master-password = user_password
6. master 서버의데이터를백업받았다면, slave 서버를시작하기전에 slave 서버의데이터디렉토리에 master 서버의데이터를복사해둔다. mysqldump를사용했다면, 다음으로가서먼저, slave 서버를스타트한다.
7. slave 서버를스타트한다.
slave shell > /etc/init.d/mysqld start
8. mysqldump를사용해백업파일을만들었다면, slave 서버에덤프파일을로드시킨다.
slave shell > mysql –u root –p < dump_file.sql
9. slave 서버에서 master-host, master-user, master-password 등의설정을다음과같이바꿀수도있다. 물론 /etc/my.cnf에서설정하지않았을경우에도쓸수있다.
slave mysql > CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password', -> MASTER_LOG_FILE='recorded_log_file_name', -> MASTER_LOG_POS=recorded_log_position;
각옵션의최대길이는다음과같다.
MASTER_HOST |
60 |
MASTER_USER |
16 |
MASTER_PASSWORD |
32 |
MASTER_LOG_FILE |
255 |
10. slave 쓰레드를스타트한다.
slave mysql > START SLAVE;
11. mysql/data/slave.err을확인하여다음과같은메시지가있으면성공적으로설정된것이다.
Slave I/O thread: connected to master 'user_name@user_host:3306', replication started in log 'FIRST' at position 4
'Computing > MySQL' 카테고리의 다른 글
mysql 복구 (0) | 2011.11.04 |
---|---|
[Mysql] 쿼리문 내에서 encoding 변경... (0) | 2010.11.17 |
[펌]MySql 복구 방법 (0) | 2007.07.25 |
[펌]MySQL Cluster (0) | 2007.07.25 |