티스토리 뷰

Database

< MySQL 백업 & 복구하기 >

알 수 없는 사용자 2008. 1. 29. 23:30

<< MySQL 백업 & 복구하기 >>

History :
2007/09/28 : MySQL 입력시 한글 깨지는것 해결 방법
2001/10/30 : 문서 최초 작성
##############################################################################

백업을 하기 위해서는 mysqldump 명령어를 사용합니다.
그리고, 복구를 하기 위해서는 mysql 명령어를 사용합니다.
이 명령어의 path 를 잡아주세요.!!

형식은 다음과 같습니다.
(참고: [] 는 선택 항목입니다.)

user> mysqldump [-h 호스트] [-u 사용자] [-p] DB명 [table명]> 백업파일
user> mysql [-h 호스트] [-u 사용자] [-p] DB명 < 백업파일

예제 1) root 라는 사용자가 mydb 를 백업하는 명령입니다.
이렇게 하시면 mydb.sql 파일에 sql문으로 저장이 됩니다.
user> mysqldump -u root -p mydb > mydb.sql

예제 2-1) 백업된 mydb.sql 을 newdb 에 입력하는 방법
user> mysql -u dbakorea -p newdb < mydb.sql

예제 2-2) 한글이 깨지는 경우 문자셋을 설정하여 입력하는 방법
1. 테이블 문자셋 확인
2. 이력 파일의 문자셋 확인
3. 문자셋 지정 입력

user> mysql -u dbakorea -p --default-character-set=euckr newdb < mydb.sql

##############################################################################

<< 형화가 사용하는 프로그램 >>

###################
# 사용하기전에 할일
###################

1. 작업을할 디렉토리(dir/)를 만들고 cgi 파일을 만든 디렉토리에 복사한다.
앞으로 작업디렉토리를 dir 이라 하겠다.
2. dir 밑에 temp 디렉토리를 만들고 권한을 700 으로 준다.

user> mkdir -p dir/temp
user> chmod 700 temp

###########
# 백업하기
###########

user> chmod 700 mysqldump.cgi
user> perl mysqldump.cgi

db_list 파일이 생성 되었는지 확인한다.

################
# DB 생성하기
################
dbinput_list 파일은 mysqldump.cgi 에 의해 만들어진 db_list 파일을
복사해서 사용하면 된다. 생성이 필요없는 DB는 지우면 된다.
(주의: 처음 3줄은 삭제를 하지 말아라.)

user> chmod 700 mysqldbcreate.cgi
user> perl mysqldbcreate.cgi

################
# DB에 입력하기
################
dbinput_list 파일에 입력할 DB 를 추가한다.
(주의: mysql DB 는 빼는게 좋다.)

user> chmod 700 mysqlinput.cgi
user> perl mysqlinput.cgi

####################
# 사용되는 파일들
####################

======================== mysqldump.cgi ===============================
#!/usr/bin/perl

# Linux에 있는 모든 DB를 DB_name.dump 파일에 dump한다.
# 1999,12,2

# $mysql_path = "/usr/local/bin"; # FreeBSD
$mysql_path = "/usr/local/mysql/bin";
$passwd = ""; # root 비번을 입력한다.
$host = ""; # 접속할 호스트 (외부에 DB가 있는 경우만 사용한다.)

if( $passwd ne '){
$passwd = " -p$passwd";
}
if( $host ne '){
$host = " -h $host";
}

`$mysql_path/mysqlshow -uroot $passwd $host > db_list`;

open( IN, 'db_list' );
$start = 0;
while( <IN> ) {
if( $start ne 3 ) {
$start ++;
# print "start:$_n";
next;
}
elsif ( $_ !~ / / ) { # Blank
next;
}
chop();
( $a, $db, $c ) = split( /|/, $_);
$db =~ s/ //g;

# 각 DB의 dump파일을 생셩한다.
`$mysql_path/mysqldump -uroot $passwd $host $db > temp/$db.dump`;
print "$db Dumpedn";
}
close( IN );

======================== /mysqldump.cgi ===============================

======================== mysqldbcreate.cgi ===============================
#!/usr/bin/perl

# dbinput_list에 있는 모든 DB를 생성한다.
# 2000. 4. 5

# dbinput_list 파일은 mysqldump.cgi 에 의해 만들어진 db_list 파일을
# 복사해서 사용하면 된다. 생성이 필요없는 DB는 지우면 된다.
# (주의: 처음 3줄은 삭제를 하지 말아라.)

# $mysql_path = "/usr/local/bin"; # FreeBSD
$mysql_path = "/usr/local/mysql/bin";
$passwd = ""; # root 비번을 입력한다.
$host = ""; # 접속할 호스트 (외부에 DB가 있는 경우만 사용한다.)

if( $passwd ne '){
$passwd = " -p$passwd";
}
if( $host ne '){
$host = " -h $host";
}

open( IN, 'dbinput_list' );
$start = 0;
while( <IN> ) {
if( $start ne 3 ) {
$start ++;
next;
}
elsif ( $_ !~ / / ) { # Blank
next;
}
chop();
( $a, $db, $c ) = split( /|/, $_);
$db =~ s/ //g;

# 각 DB를 생성한다.
`$mysql_path/mysqladmin -uroot $passwd $host create $db`;
print "$db Createdn";
}
close( IN );

# 설정을 다시 읽는다.
`$mysql_path/msyqladmin -uroot $passwd $host reload`

======================== /mysqldbcreate.cgi ===============================

======================== mysqlinput.cgi ===============================
#!/usr/bin/perl

# dbinput_list에 있는 모든 DB를 각 DB에 입력한다.
# 2000. 4. 3

# $mysql_path = "/usr/local/bin"; # FreeBSD
$mysql_path = "/usr/local/mysql/bin";
$passwd = ""; # root 비번을 입력한다.
$host = ""; # 접속할 호스트 (외부에 DB가 있는 경우만 사용한다.)

if( $passwd ne '){
$passwd = " -p$passwd";
}
if( $host ne '){
$host = " -h $host";
}

open( IN, 'dbinput_list' );
$start = 0;
while( <IN> ) {
if( $start ne 3 ) {
$start ++;
next;
}
elsif ( $_ !~ / / ) { # Blank
next;
}
chop();
( $a, $db, $c ) = split( /|/, $_);
$db =~ s/ //g;

# 각 DB에 dump파일을 입력한다.
`$mysql_path/mysql -uroot $passwd $host $db < temp/$db.dump`;
print "$db Insertedn";
}
close( IN );

======================== /mysqlinput.cgi ===============================