강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

MySQL강좌31편: 데이터 백업시에 create database문을 생략하여 백업하기

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

MySQL강좌31: 데이터 백업시에 create database문을 생략하여 백업하기

 

MYSQL의 백업유틸리티인 mysqldump명령어로 백업을 할 때에 앞의 설명에서 보았듯이   “--databases”옵션을 사용하여 여러개의 데이터베이스를 동시에 백업하거나 또는 “--all-databases”라는 옵션을 사용하여 모든 테이터베이스를 모두 백업할 때에는 백업파일에 “CREATE DATABASE”라는 SQL문이 추가로 저장되게 된다.  즉 백업된 파일로 복구를 할 때에 데이터베이스까지 생성하면서 복구하기 위한 것이였다.

 

이때 “--databases”옵션이나 “--all-databases”옵션을 사용하여 백업할 때에 “CREATE DATABASE”라는SQL문이 추가되지 않도록하는 백업방법이 있다. 

 

mysqldump명령어로 백업을 할 때에 -n옵션 또는 --no-create-db라는 옵션을 사용하면 “--databases”옵션이나 “--all-databases”옵션을 사용하여 백업할 때에도 백업파일에 “CREATE DATABASE”라는SQL문이 추가되지 않는다. 사용하는 형식은 다음과 같다.

 

 

사용형식 : mysqldump -u DB사용자명 -p -n [옵션] DB > 파일명

 

위의 형식에서 -n옵션 대신에 --no-create-db를 사용해도 동일한 결과를 얻을 수 있다.

 

아래는 “--databases”옵션을 사용하여 MYSQL데이터베이스의 temp_db2라는 데이터베이스와 papa라는 데이터베이스를 동시에 백업하여 temp_db8.sql에 저장하는 예이다.  이때 -n옵션을 사용하여 백업결과로 생성되는 temp_db8.sql파일에 “CREATE DATABASE”라는SQL문이 추가되지 않도록 하였다.

 

[root@sulinux bin]# pwd

/usr/local/mysql/bin

[root@sulinux bin]#

[root@sulinux bin]# ./mysqldump -u root -p -n --databases temp_db2 papa > temp_db8.sql

Enter password: ********

[root@sulinux bin]#

[root@sulinux bin]# ls -l temp_db8.sql

-rw-r--r--    1 root     root        11768  2 14 16:24 temp_db8.sql

[root@sulinux bin]# 

 

그 결과 temp_db8.sql파일을 보면 다음과 같다. “--databases”옵션을 사용하여 두개이상의 데이터베이스를 동시에 백업하였지만 백업결과 파일 temp_db8.sql에는 “CREATE DATABASE”라는SQL문이 추가되지않았다.

 

[root@sulinux bin]# cat temp_db8.sql

-- MySQL dump 9.08

--

-- Host: localhost    Database: temp_db2

---------------------------------------------------------

-- Server version       4.0.14

--

-- Current Database: temp_db2

--

USE temp_db2;

--

-- Table structure for table 'Demo_Domain'

--

 

CREATE TABLE Demo_Domain (

  d_id smallint(7) unsigned NOT NULL auto_increment,

  d_name varchar(255) default NULL,

  d_type varchar(10) default NULL,

  d_sday varchar(20) default NULL,

  d_eday varchar(20) default NULL,

  d_email varchar(255) default NULL,

  d_register varchar(60) default NULL,

  hosting char(1) default NULL,

  h_name varchar(255) default NULL,

  h_homepage varchar(255) default NULL,

  h_price varchar(20) default NULL,

  h_sday varchar(20) default NULL,

  h_eday varchar(20) default NULL,

  h_memo text,

  PRIMARY KEY  (d_id)

) TYPE=MyISAM;

--

-- Dumping data for table 'Demo_Domain'

--

 

이 경우 필히 알아둘 것은 백업된 파일(temp_db8.sql)을 이용하여 해당 데이터베이스를 복구해야하기 때문에 백업된 파일(temp_db8.sql)내에 “USE DB문은 존재한다는 점이다.

 

이번에는 “--all-databases”옵션을 사용하여 MYSQL의 모든 데이터베이스를 백업하여 temp_db9.sql에 저장하는 예이다.  이때 -n옵션을 사용하여 백업결과로 생성되는 temp_db9.sql파일에 “CREATE DATABASE”라는SQL문이 추가되지않도록 하였다.

 

[root@sulinux bin]# pwd

/usr/local/mysql/bin

[root@sulinux bin]# ./mysqldump -u root -p -n --all-databases > temp_db9.sql

Enter password: ********

[root@sulinux bin]#

[root@sulinux bin]# ls -l temp_db9.sql

-rw-r--r--    1 root     root        31894  2 14 16:24 temp_db9.sql

[root@sulinux bin]#

 

그 결과 temp_db9.sql파일을 보면 다음과 같다. “--all-databases”옵션을 사용하여 MYSQL의 모든 데이터를 백업하였지만 백업결과 파일 temp_db9.sql에는 “CREATE DATABASE”라는 SQL문이 추가되지 않았다.

 

[root@sulinux bin]# cat temp_db9.sql

-- MySQL dump 9.08

--

-- Host: localhost    Database:

---------------------------------------------------------

-- Server version       4.0.14

--

-- Current Database: locli

--

USE locli;

--

-- Current Database: mysql

--

USE mysql;

 

--

-- Table structure for table 'columns_priv'

--

CREATE TABLE columns_priv (

  Host char(60) binary NOT NULL default '',

  Db char(64) binary NOT NULL default '',

  User char(16) binary NOT NULL default '',

  Table_name char(64) binary NOT NULL default '',

  Column_name char(64) binary NOT NULL default '',

  Timestamp timestamp(14) NOT NULL,

  Column_priv set('Select','Insert','Update','References') NOT NULL default '',

  PRIMARY KEY  (Host,Db,User,Table_name,Column_name)

) TYPE=MyISAM COMMENT='Column privileges';

--

-- Dumping data for table 'columns_priv'

--

 

이 경우에도 필히 알아둘 것은 백업된 파일(temp_db9.sql)을 이용하여 해당 데이터베이스를 복구해야하기 때문에 백업된 파일(temp_db9.sql)내에 “USE DB문은 여전히 존재한다는 점이다.

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,034 명
  • 현재 강좌수 :  35,791 개
  • 현재 접속자 :  215 명