shell script를 이용한 mysql 자동 백업(backup)

다음 script를 /etc/cron.daily/mysql_back.sh로 만들어 두면 백업이 끝납니다.
MySQL DB를 dump해서 다른 server에 옮겨 둡니다. 같은 서버에 데이타를 두면
server crash가 발생할 때… 대응이 불가능하죠?… -..-a

#!/bin/bash
BACKUP_DIR=/home/backup

DATE=$(date +%Y%m%d)
rm -rf $BACKUP_DIR/people2-$DATE.sql

/usr/local/mysql/bin/mysqldump -u 사용자아뒤 -p비밀번호 DB이름 > $BACKUP_DIR/people2-$DATE.sql

gzip -f $BACKUP_DIR/people2-$DATE.sql

ncftpput -u 사용자아이디 -p 로그인비밀번호 hostname.com /home/db_backup/ $BACKUP_DIR/people2-$DATE.sql.gz

mysql의 백업과 복구 (backup & restore)

우선.. mysql을 접속합니다.
접속까지의 명령어는 기본 명령어 설명에 있으니 생략을;;

로그파일이 많이 쌓여서 디스크 용량이 부족한 경우 일단 로그파일을 지웁니다.

mysql>RESET MASTER

로그 파일은 XXX-bin.000001 같은 형식으로 쌓입니다.
위치는 디폴트로 설치했다면 /usr/local/mysql/var/에 있을 겁니다.
RESET MASTER를 입력하면 로그 파일들이 지워집니다.

백업을 하는 방법은 쉘에서 하는 법과 mysql내에서 하는법 두가지가 있습니다.

★mysql내에서 백업하는 법

mysql>backup table <table1>[, table2, table3…] to ”/usr/local/backup”;

의 형식이구요. 물론 뾰족괄호같은건 입력하는거 아니구요 대괄호안은 여러 테이블 백업시 입력하는 겁니다. to다음은 저장할 디렉토리명입니다. 작은따옴표에 넣어서 입력하면 됩니다.
리스토어는

mysql>restore table <table1>[, table2, table3…] from ”/usr/local/backup”;

★쉘에서 백업하는 방법
mysqldump란 실행프로그램은 /usr/local/mysql/bin 에 있습니다.(물론 기본설치시)
그러므로 거기까지 들어가서 실행합니다.
mysqldump를 이용해서 백업을 하면 텍스트형태로 백업이 되기 때문에vi에서 열어서 볼 수 있습니다. DB생성, 테이블생성구조등이 나와있기 때문에 이용해서 다른 작업도 가능합니다.

전체 데이터베이스 백업하기
>./mysqldump -uroot -ppass -e –all-databases > /usr/local/backup/alldata.sql
데이터베이스 단위로 백업하기
>./mysqldump -uroot -ppass -e –databases db1 > /usr/local/backup/db1.sql

*옵션에서 e를 붙이는 이유는 extended-insert로 리스토어시 보다 빠르게 하기 위해 쿼리를 변형하는 옵션입니다.

리스토어 하기
>./mysql -uroot -ppass < /usr/local/backup/alldata.sql
innodb로 리스토어 하려면 alldata.sql을 vi로 열어서 Type=MyISAM부분을 삭제하면 자동으로 innodb로 저장됩니다.

물론 -u다음에 붙어있는 root는 mysql아이디이기 때문에 알맞는 아이디로 바꾸시구요 -p뒤에 있는 pass란 글자도 마찬가지..
-p라고만 입력하고 엔터를 치면 비밀번호를 물어봅니다. 그 때 비밀번호를 입력해줘두 됩니다.

DirectDraw 어플리케이션 구현

CodeGuru를 탐험하던 도중 유용한 article이 있어 이를 복사한다. 이를 이용하면 간단하게 DirectDraw 어플리케이션을 구현 할 수 있었다.

첨부의 모듈을 이용하면 라이브러리 링크도 할 필요 없다. (지가 알아서 링크도 해주도록 원소스를 살짝 수정했음)

다음과 같은 순서로 프로그램을 만들어보도록 하자.

1. DirectX를 설치한다.

2. Tools -> include 디렉토리와 lib 디렉토리 세팅을 한다. (설치된 디렉토리로 친절하게 세팅해준다)

3. 다이얼로그 기반 MFC 어플리케이션을 생성한다.

4. 첨부의 파일을 생성된 프로젝트의 로컬 디렉토리에 복사하고 프로젝트에 추가 시킨다.

5. 메인어플리케이션 상단에
  1)   # include “DirecControl.h”를 선언한다
  2)   다음을 글로벌 베리어블로 선언한다.

       CDirectControl m_Control

  3)  InitInstance()모듈 알맹이를 싹 지우고 다음과 같이 모듈을 써준다.

BOOL CtestApp::InitInstance()
{
    m_pMainWnd = m_Control.CreateFullScreen(800,600,16);
    if (!m_pMainWnd)
        return FALSE;

    m_Control.CreateOffScreenSurface( (LPCTSTR)”1″,IDB_BITMAP1);
    m_Control.GetSurface( (LPCTSTR)”1″)->SetRender(TRUE);

    return TRUE;
}

  4)  OnIdle 이벤트를 메인 어플에 추가해준다. 그리고 하기와 같이 기술해 준다.

BOOL CtestApp::OnIdle(LONG lCount)
{
    MSG msg;
    if(::PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE)){
        if (msg.message == WM_QUIT)
            PostQuitMessage(0);
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    m_Control.Render(TRUE,TRUE,TRUE);

———————

The code itself is fairly limited to displaying bitmaps on the screen (FULLSCREEN MODE) using DirectDraw but it shows the concepts of using wrappers to make your programs far easier to use. I could have put it all in a DLL but realised that this would not be simple for you all to use. Anyway, here is how you use the libraries.

1. Include the following header into your Application Header or StdAfx.h. E.g

#include “DirectControl.h”

2. Create an instance of the CDirectControl Object. For example:

CDirectControl m_Control;

Please note that this should be placed either as a global variable or inside the Application class header (i.e. not temporary)

3. In the App Init Instance call the following code:

 m_pMainWnd = m_Control.CreateFullScreen(800,600,16);

 if (!m_pMainWnd)

  return FALSE;

Replace the 800 and 600 with the required x & y resolutions that you want to use. Replace the 16 with the bits-per-pixel required. My program does not maintain or handle the Palette because I was only really using hi-color modes for

the bitmaps.

4. You can now use the Controller to create bitmaps (from the resource) using the code :

m_Control.CreateOffScreenSurface(“My Bitmap”,IDB_IMAGE);

The first parameter is the object identifier that I use to manipulate or select the object at a further time. The second parameter is the resource id of the bitmap.

You also need to tell the controller that the bitmap is available to be rendered. The default is false so you need to set the visibility by using the code:

m_Control.GetSurface(“My Bitmap”)->SetRender(TRUE);

5. The bitmaps are defaulted to the top left of the screen (x=0,y=0) but you can alter its position by using:

m_Control.GetSurface(“My Bitmap”)->SetPosition(10,10);

Relating to the x & y screen co-ordinates. The program automatically clips to the screen.

6. Once you have created your bitmap/s you can render the screen by calling:

 m_Control.Render(TRUE,FALSE,FALSE);

The first parameter decides if you want to clear the screen first before rendering. The second decides whether you want to render any bitmaps that have been flagged renderable. the third parameter decides whether you want to update the Screen. I did it this way because you dont want to update the screen all the time e.g. if you want to use one

bitmap , change its position and render it again then update the screen.

Ok. What I suggest is that you look at the example project I have done. If anyone wishes to expand it further etc. I would welcome and more additional source code or comments. Please dont laugh at my code. I just wanted Direct X to be easy for everyone. Enjoy.