MySQL강좌31편: 데이터 백업시에 create database문을 생략하여 백업하기
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 2,283 조회
- 0 추천
- 목록
본문
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명”문은 여전히 존재한다는 점이다.
관련자료
-
이전
-
다음