중요도나 용도에 상관없이 제가 자주 사용하는 MySQL의 툴과 명령어를 정리해 보았습니다. 개인적인 참조로 쓰기 위한 것이므로 자세한 설명은 생략하였습니다. 자세한 내용은 한국 MySQL의 메뉴얼 페이지를 참조하세요. OS X에서 mysql 설치는 제 이전 포스트를 확인하시면 됩니다

* 데몬 시작
> mysqld_safe --user=[아이디] &

* 종료
> mysqladmin -u [아이디] -p[패스워드] shutdown

* 재실행
> mysqladmin -u [아이디] -p[패스워드] reload

* 계정 추가
localhost가 %일 경우 모든 IP에서의 접근을 허용합니다.
mysql> grant all privileges on [database].* to [아이디]@"localhost" identified by "[패스워드]"

* 패스워드 변경
mysql> SET PASSWORD FOR [아이디]@localhost=PASSWORD('[패스워드]')  

* 테이블 필드 변경
명령어별 옵션은 아래와 같습니다.
  • add : add [기존필드] [타입] after [필드]
  • change : change [변경될 필드]  [새로운 필드명] [타입]
  • drop : drop [삭제될 필드]

mysql> ALTER TABLE [테이블 명] (add | change | drop) ...

* 데이터 백업
데이터 백업 시 아래와 같이 사용합니다. 테이블 명을 생략하면 database의 전체 테이블을 백업합니다. 자주 쓰이는 옵션은 아래와 같습니다.
  • -d:  테이블 생성 정보만 백업
  • -f: 데이터만 백업

> mysqldump -u [아이디] -p[패스워드] [database] [테이블 명] > [파일명]

* 테이블 검사
mysql>CHECK TABLE [테이블 명]

* 테이블 복구
mysql>REPAIR TABLE [테이블 명]

repair로 고쳐지지 않는 다면 쉘에서 아래와 같이 시도합니다.
> myisamchk -safe-recover [mysql data path]/[테이블 명]

* 바이너리 로그
MySQL은 select와 같은 데이터에 변동이 없는 내역을 제외하고 data 디렉토리에 바이너리 로그로 저장합니다. 아래와 같이 mysqlbinlog로 텍스트화 된 내용을 확인할 수 있으며, 변경된 내역을 가지고 있기 때문에 데이터 복구시에도 사용할 수 있습니다.
> mysqlbinlog [로그파일 명]

* 파일로 저장
mysql>SELECT * INTO OUTFILE "[filename]" FROM [테이블 명];

엑셀에서 사용하기 위해 CSV(Comma Separated Value) 포맷으로 저장할 경우에는 아래와 같이 사용합니다.
mysql>SELECT * INTO OUTFILE "[filename]" FIELDS TERMINATED BY ',' FROM [테이블 명];

* CSV 파일 로드
LOAD DATA LOCAL INFILE "[CSV 파일패스]" INTO TABLE [테이블명] FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
"로 필드가 구분되었을 경우에는 ENCLOSED BY '\"'를 추가합니다.

* 테이블 최적화
mysql>OPTIMIZE TABLE [테이블 명]

* mysqladmin
서버의 상태를 감시하고 동작을 제어 합니다. 명령어들은 아래와 같습니다.
  • ping : 서버가 실행중인지 확인합니다.
  • status: 현재 서버의 상태를 출력합니다.
  • processlist: 실행중인 쓰레드의 정보를 출력합니다.
  • kill [Id]: 특정 쓰레드를 종료합니다.
  • variables: mysql 환경변수 값을 출력합니다.

> mysqladmin -u [아이디] -p[패스워드] 명령

* 쉘에서 UTF8
character_set_client가 latin1로 되어 있으면 mysql 쉘에서 한글이 깨어져 나오는 경우가 있습니다. 아래와 같이 현재 문자셋을 알아 봅니다.
mysql> show variables like '%char%';

character_set_client이 utf8로 되어 있지 않을 경우에는 my.cnf 파일에서 아래와 같이 설정합니다.
[mysql]
default-character-set = utf8

'기타 > 자잘한 Tip' 카테고리의 다른 글

Xcode에서의 Ruby on Rails  (8) 2008.08.20
Dashcode로 올블로그 RSS 위젯 만들기  (2) 2008.05.22
flex2 - xml을 이용한 동적 메뉴 예제  (0) 2008.02.01
PHP에서 RSS 가져오기  (0) 2007.12.08
OS X에 MySQL 설치  (4) 2007.10.12
AND

기타 2007. 12. 27. 16:32
윈도우의 APM_Setup처럼 OS X에서 APM(Apache+PHP+MySQL)을 간편하고 빠르게 설치해주는 툴입니다. MAMP 사이트에서는 다운로드가 되지 않아 소스포지에서 다운로드 받았습니다.

사용자 삽입 이미지
다운로드 받은 후에 dmg  파일을 클릭하면 좌측과 같이 원하는 제품을 어플리케이션 폴더로 드래그하는 것만으로 모든 설치가 완료됩니다.

MAMP Pro는 상용버전(61달러)으로 사용제한이 없고 기능이 추가된 제품입니다. 저는 무료인 MAMP를 설치하였습니다.

삭제도 매우 간단하여 어플리케이션에서 해당 폴더만 삭제하면 됩니다.

아파치와 MySQL포트가 다른 포트로 지정되어 있어, 저는 일반적으로 사용하는 80과 3306으로 변경하였습니다.

사용자 삽입 이미지

제가 다운로드 받은 MAMP 1.6 버젼에서는 아파치 2.0.59, PHP 5.21, MySQL 5.0.37이 설치되며 PHP는 PHP4로도 선택할 수 있습니다. 또한 아래와 같이 phpMyAdminSQLiteManager가 기본으로 설치되어 있습니다.

사용자 삽입 이미지

OS X는 리눅스(또는 유닉스)기반의 웹개발용 OS로는 매우 편리한 환경 같습니다.
AND

코아에서 MySQL C Library를 이용하는 예입니다. wrapper 클래스를 작성하여 MySQL
서버에 접속해서 데이터를 가져오는 간단한 샘플 코드를 작성해 보겠습니다.

OS X에서 MySQL 설치 및 설정은 이전 포스트를 참고해 하세요.


1. MySQL에서 작업

1) MySQL 서버 확인
테스트를 위하여 테이블을 생성하고 데이터를 넣어 보겠습니다. 우선 시스템 환경설정의 MySQL 항목에서 아래와 같이 서버가 기동중인지 확인 합니다. 서버가 실행되지 않고 있으면 Start 버튼을 클릭하여 아래와 같이 실행 상태로 만듭니다.
사용자 삽입 이미지

2) 테이블 생성 및 데이터 입력
그 다음 아래와 같이 터미널에서  MySQL에 로그인 후에 member 테이블을 생성하고 데이터를 넣습니다. 저는 이전에 test/1111로 계정을 만들고 cocoadev란 데이터베이스를 만들어 두었기에 아래와 같이 접속하였습니다.
사용자 삽입 이미지

id, name 두개의 필드를 가진 member란 테이블을 생성하고, 테스트를 위해 1, cocoa 값으로 데이터를 입력합니다.

2. 소스코드 작성
Xcode를 실행하고 프로젝트를 생성합니다. 저는 최대한 간단하게 만들기 위해 프로젝트 타입을 Command Line Utility의 Foundation Tool로 선택하고 프로젝트를 생성하였습니다.

Wrapper 클래스 작성을 위하여 새 파일에서 Objective C class 타입으로 MySqlDB 클랙스를 생성합니다. 이제 MySqlDB.h 파일과 MySqlDB.m 파일을 작성합니다.

테스트를 위하여 연결 및 쿼리등 필요한 메소드만 작성해 보겠습니다. mysql.h 파일을 참고 하시면 MySQL 라이브러리에서 제공하는 많은 함수들을 확인하실 수 있습니다.

1) MySqlDB.h 편집
#import <Cocoa/Cocoa.h>
#import "mysql.h"

@interface MySqlDB : NSObject {

    bool isConnected;
    int rowCount;
   
    MYSQL mySQL;
    MYSQL *pMySQL;
   
    MYSQL_RES* pRes;
    MYSQL_ROW Rows;
}

-(id) initWithServer: (const char*) host
             loginID: (const char*) userid
         loginPasswd: (const char*) passwd
               setDB: (const char*) database;

-(bool) connect : (const char*) host
         loginID: (const char*) userid
     loginPasswd: (const char*) passwd
           setDB: (const char*) database;

-(bool) query :(const char*) str;
-(bool) getRows;
-(bool) getStringData: (int)idx toBuffer: (char *) buff;

-(bool) isConnected;
-(int) rowCount;

@end

2) MySqlDB.m 파일 편집
#import "MySqlDB.h"


@implementation MySqlDB

-(id) initWithServer: (const char*) host
             loginID: (const char*) userid
         loginPasswd: (const char*) passwd
               setDB: (const char*) database
{   
    self = [super init];
   
    [self connect: host
          loginID: userid
      loginPasswd: passwd
            setDB: database];
               
    return self;
}

- (void)dealloc
{
    if(pMySQL)
        mysql_close(pMySQL);
   
    [super dealloc];
}

-(bool) connect : (const char*) host
         loginID: (const char*) userid
     loginPasswd: (const char*) passwd
           setDB: (const char*) database
{
    isConnected = FALSE;
   
    pMySQL = mysql_init(&mySQL);
    if(pMySQL == NULL)
    {
        return FALSE;
    }
   
    pMySQL = mysql_real_connect(&mySQL, host, userid, passwd, database, 0, 0, 0);
    if(pMySQL == NULL)
    {
        return FALSE;
    }
   
    isConnected = TRUE;
   
    return TRUE;
}

-(bool) query: (const char*) str
{
    if(!pMySQL)
        return FALSE;
   
    int ret = mysql_query(pMySQL, str);
    if(ret != 0)
    {
        return FALSE;
    }
   
    pRes = mysql_store_result(pMySQL);
    rowCount = mysql_num_rows(pRes);
   
    NSLog(@"rows:%d", rowCount);
    return TRUE;
}

-(bool) getStringData: (int)idx toBuffer: (char *) buff;
{
    if(Rows[idx] == NULL)
        return FALSE;
   
    strcpy(buff, Rows[idx]);
    return TRUE;
}

-(bool) getRows
{
    Rows = mysql_fetch_row(pRes);
   
    if(Rows == NULL)
        return FALSE;

    return TRUE;
}

-(bool) isConnected
{
    return isConnected;
}

-(int) rowCount
{
    return rowCount;
}

@end

3) MyTest.m 편집
이제 테스트를 위하여 위에 작성된 클래스를 사용하여 MySQL서버에 접속하여 데이터를 가져오도록  MyTest.m 파일에 소스를 추가해 보겠습니다. 연결시 로그인 정보와 데이터 베이스, 쿼리 내용은 자신의 환경에 맞게 변경해 줍니다.

#import <Foundation/Foundation.h>
#import "MySqlDB.h"

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    // insert code here...
    MySqlDB* myDB = [[MySqlDB alloc] initWithServer:"localhost"
                                            loginID:"test"
                                        loginPasswd:"1111"
                                              setDB:"cocoadev"];
   
    if([myDB isConnected] == true)
    {
        if([myDB query :"SELECT * FROM member"])
        {
            char buff1[128];
            char buff2[128];
           
            [myDB getRows];
            [myDB getStringData: 0 toBuffer: buff1];
            [myDB getStringData: 1 toBuffer: buff2];
           
            NSLog(@"DATA: id=%s, name=%s", buff1, buff2);
        }
        else
            NSLog(@"Fail to query");
    }
    else
        NSLog(@"Fail to connect.");
   
    [myDB release]
    [pool release];
    return 0;
}


3. 빌드옵션 설정 및 라이브러리 등록

MySQL 라이브러리를 사용하기 위해서는 링크시에 라이브러리를 추가하도록 등록하고, 헤더파일을 인크루드하기 위해 위치를 지정해 주어야 합니다.

GCC 옵션에서 -I(인클루드 패스 지정), -L(라이브러리 패스 지정), -l(라이브러리 추가) 옵션을 생각하시면 됩니다.

1) include 패스 설정
빌드시 헤더파일을 찾을 수 있도록 링크를 설정합니다. 프로젝트 정보창을 오픈합니다. Build 항목에서 "User Header Search Path"에 mysql의 include 패스를 입력합니다. 대부분 /usr/local/mysql에 설치되는데 다른 곳에 설치하신 분들은 그 곳의 패스를 입력합니다.
사용자 삽입 이미지

2. libmysqlclient.a 라이브러리 링크
사용자 삽입 이미지
파인더에서 해당 디렉토리에 접근하기 힘들기 때문에 터미널에서
 > open /usr/local/mysql/lib 로 파인더를 오픈합니다.

libmysqlclient.a 파일을 드래그 하여 좌측과 같이 Xcode의 Frameworks 그룹으로 가지고 옵니다.




이제 모든 준비가 완료되었습니다. 빌드 후 실행하여 아래와 같은 결과를 확인합니다.
사용자 삽입 이미지

코코아에서 MySQL 라이브러리를 사용하여 MySQL에 연결하는 방법을 간단히 알아 보았습니다. PostgreSQL이나 다른  C 라이브러리들도 위와 같은 방법으로 코코아에서 사용하실 수 있습니다.

티스토리 블로그 알리미를 작성한 적이 있는데, 설치형 블로그들은 위와 같이 DB에 직접 쿼리하는 방법으로 더욱 쉽고, 다용하고, 정확한 정보를 가져오는 툴을 작성할 수 있을 것 같습니다.

'Xcode 2 > Tip' 카테고리의 다른 글

Xcode에서 파이어폭스 플러그인 컴파일 하기  (0) 2007.12.04
pipe를 이용한 간단한 프로세스간의 통신  (6) 2007.11.28
Xcode에 Subversion 적용하기  (6) 2007.11.10
Xcode 단축키  (2) 2007.10.26
#pragma mark  (2) 2007.08.04
AND

사용자 삽입 이미지
OS X에서 사용할 수 있는 MySQL 클라이언트 입니다. 프리(도네이션)웨어이지만 기본기능은 충실하게 가지고 있습니다. 다만 아쉬운 것은 오래전부터 0.7베타에서 더이상 버젼이 올라가지 않고 있습니다.

프로그램은 홈페이지에서 다운로드 받으실 수 있습니다.

1. 환경설정
사용자 삽입 이미지
다운로드 받으신 후 실행한 다음 메뉴의  Prefrences를 실행하면 프로그램의 환경을 설정할 수 있습니다. 우측의 Favorites 하단에 있는 추가버튼을 클릭하여 아래와 같이 접속할 MySQL 계정을 설정합니다.

이름, 접속할 서버, 사용자 계정을 입력합니다. 저는 이전 MySQL 설치 포스트에 있는 계정 그대로 "local_test"란 이름으로 설정하였습니다.

여기서 저장해 놓은 접속계정으로 이후 간편하게 접속할 수 있습니다.

이전에 원격서버의 MySQL 4.2 버젼대인가에서도 사용해 보았으니, 원격서버도 아이피 또는 도메인만 입력하시면 무난히 사용하실 수 있을 것 입니다.


2. 기본 UI

위에 설정한 계정으로 접속하면 아래와 같은 화면을 보실 수 있습니다. 저는 먼저 name과 phone 필드를 가진 test란 테이블을 생성하였습니다.
사용자 삽입 이미지

1) 상단 메뉴

상단의 툴바에는 로그창을 보여주는 [Show Console], 로그 내용을 삭제하는 [Clear Console] 버튼이 있습니다.  [Show Variables]는  현재 기동되어 있는 MySQL 서버의 각종 변수들을 확인할 수 있습니다.

[Flush Privileges]는 사용해 보지는 못했지만 사용자 정보 변경 시 적용시켜 주는 flush privileges;를 실행해 주는 것 같습니다.

[Table Operations]는 테이블 검사, 옵티마이즈, 리페어등의 기능을 제공합니다.

[Create Table Syntax]는 현재 선택된 테이블의 create하는 SQL문을 생성해 줍니다.

2) 좌측 메뉴
좌측 상단에는 데이터베이스를 선택하거나 추가, 삭제할 수 있는 버튼들이 있습니다. 이는  MySQL Root 권한이 있어야 가능합니다. 그 아래는 현재 데이터베이스의 테이블 목록과 테이블을 복사/삭제/등록할 수 있는 버튼들이 있습니다.

하단에는 문자 엔코딩을 선택할 수 있습니다.

3. 기능 둘러 보기
1) Structure
사용자 삽입 이미지
첫번째로 보이는 윈도우로 테이블 필드를 추가/삭제/변경할 수 있습니다. SQL 테이블 생성문을 따로 작성할 필요가 없을 정도로 상당히 많은 기능을 제공합니다. NOT NULL, default 값, auto increment등 다양한 필드 옵션을 지정할 수 있습니다.

하단은 Indexes에서는 프라이머리 키와 인덱스를 설정할 수 있습니다. 테이블 관리하는데 무척이나 편리하게 되어 있는 것 같습니다.

2) Content
사용자 삽입 이미지
현재 테이블에 있는  데이터(Row)를 관리할 수 있습니다. 상단에는 검색 툴이 있습니다. 선택된 필드의 타입에 따라 =, like , > , <등의 조건으로 검색할 수 있습니다. 검색 row수를 제한하는 limit은 현재 row가 2개밖에 없어 비활성화 되어 있는지 아직 구현되지 않은 것인지는 확인하지 못하였습니다.

3) Custom Query
사용자가 작성한 쿼리를 실행하고, 그 결과 값을 확인할 수 있습니다.
사용자 삽입 이미지

4) Status
테이블의 크기, Row수, 변경시간등의 정보를 확인할 수 있습니다.
사용자 삽입 이미지

이상 CocoaMySQL을 간단히 보았습니다. 한가지 아쉬운 점은 계속 버젼업이 진행되었더라면  기능들이 추가되어 더 좋은 MySQL 클라이언트가 되었을 텐데, 개발이 중단된 것 같아 매우 아쉽습니다. 어쨋든 프리웨어로 공개하신 개발자분께 감사드리며 잘 쓰겠습니다.

'기타' 카테고리의 다른 글

미국의 맥개발자 구인 내용  (8) 2007.10.20
맥용 게임 Thumblebugs  (0) 2007.10.19
Xcode, Cocoa, 맥 프로그래밍 관련 국내외 사이트  (2) 2007.05.21
NeXTSTEP에 관하여...  (4) 2007.05.14
GNUstep 개발 데모 동영상  (0) 2007.05.10
AND

1. 다운로드
MySQL 다운로드 사이트에서 현재 사용하시는 맥의 CPU와 OS X 버젼에 맞는 패키지를 선택하고 다운 받습니다. 여기서는 package format을 다운 받고 이를 예로 들겠습니다.

해당 파일에서 Pick a Mirror를 클릭하면 회원가입 또는 로그인 화면이 나옵니다. 로그인이나 회원가입을 안하실 분은 하단의 "» No thanks, just take me to the downloads!"를 클릭하면 다운로드 받을 수 있는 미러사이트들이 나옵니다. 이 중 선택하셔서 다운로드 받으시면 됩니다.

2. 설치
사용자 삽입 이미지
다운로드 받은 dmg 파일을 클릭하면 아래와 같은 파일들이 나옵니다.
 
mysql-5***.pkg  : mysql 설치 파일
MySQL_S**.pkg  : 부팅 시 자동 시작 설정 파일
MySQL_pre*.pkg : 시스템 환경설정 등록 파일
ReadMe.txt          : 설치 안내 파일

설치는 매우 쉽습니다. 아래와 같이 각각의 파일들을 클릭하여 설치 합니다.

1) 먼저 mysql-5.0.**.pkg 파일을 클릭하여 MySQL을 설치 합니다.
2) MySQL_Startup**.pkg 파일을 클릭하여 설치합니다.
3) MySQL_prefPane을 클릭하여 환경설정에 MySQL을 추가 합니다.

이제 모든 설치가 완료되었습니다. 시스템 환경설정/기타에서 MySQL 아이콘을 확인하고 클릭합니다.
사용자 삽입 이미지

 위의 화면에서 [Start MySQL Server] 버튼을 클릭하여 MySQL을 시작하고, 위의 화면과 같이 상태가 running임을 확인 합니다.  아래의 체크 옵션은 시스템 시작 시에 MySQL을 자동으로 시작할지를 선택합니다. 필요에 따라서 체크를 하시면 됩니다.
 
3. 설정
이제 MySQL이 실행되고 있는지 확인해 보겠습니다. iTerm등의 터미널을 실행 합니다.
(지금 부터의 내용이 어려우신 분들은 제 이전 포스트를 참고 하세요.)

MySQL은 /usr/local/mysql-[버젼명] 디렉토리에 설치되어 있으며, 해당 디렉토리에서 mysql로 심볼릭 링크되어 있습니다.

사용 상의 편의를 위해 MySQL 실행(bin) 디렉토리를 패스에 추가 합니다. 사용자 root 디렉토리에서 > vi .bash_profile로 열어 아래와 같이 한줄을 추가 합니다.

PATH=${PATH}:/usr/local/mysql/bin
위의 내용을 입력하고 :wq로 저장하고 vi를 나옵니다.
 
다시 터미널로 로그인 하여 > sudo mysql 타이핑 하면, 아래와 같은 MySQL이 실행 된 화면을 보실 수 있습니다. (패스워드 입력창이 나오면 root권한 사용 시 입력하는 패스워드를 입력하시면 됩니다.)
사용자 삽입 이미지

4. Database, 사용자 추가
1. 데이터 베이스 생성
위의 프롬프트 상에서 mysql> create database cocoadev[enter]를 입력하여 cocoadev란 데이터베이스를 생성합니다.

2. 사용자 등록
mysql> grant all privileges on cocoadev.* to test@"localhost" identified by '1111';
와 같이 입력하여 localhost(현재 컴퓨터)의 test 사용자를 패스워드 1111로 생성하여  cocoadev 데이터베이스에 접근할 수 있도록 합니다.

아래와 같이 진행됨을 확인합니다.
사용자 삽입 이미지

quit 명령어로 mysql을 나옵니다.

3. 사용자 로그인
이제 위에서 등록한 test 사용자로 mysql에 로그인 해 보겠습니다.

> msyql -u [userid] -p[password] [database]과 같이 로그인 하며 위의 이미지를 참고 하시면 됩니다. 아래와 같이 정상적으로 mysql에 로그인 되는지 확인 하시면 됩니다.

사용자 삽입 이미지

자세한 사항은 패키지의 ReadMe.txt를 읽어 보시고, 그외 자세한 설명은 mysql 사이트의 메뉴얼을 참고 하세요.

여기서는 나중에 Cocoa Tutorial에서 MySQL과 연동하는 어플리케이션을 제작할 때 다루어 보겠습니다.

AND