mysqldump 이용하여 특정데이터베이스 데이터 백업과 복구
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 1,871 조회
- 0 추천
- 목록
본문
mysqldump 이용하여 특정데이터베이스 데이터 백업과 복구
MYSQL의 특정데이터베이스 하나만을 백업하는 방법에 대해서 알아보겠다.
MYSQL의 백업유틸리티인 mysqldump를 이용하여 MYSQL에 존재하는 특정데이터베이스를 백업하는 명령어 형식은 다음과 같다.
백업형식 : mysqldump -u DB계정명 -p 백업대상데이터베이스명 > 저장할파일명
복구형식 : mysql -u DB계정명 -p 복구할데이터베이스명 < 저장한파일명
위의 형식을 이용하여 현재 필자가 사용하고있는 MYSQL데이터베이스내의 mysql이라는 데이터베이스를 백업해보도록 하겠다.
[root@RockyLinux ~]# mysqldump -u root -p mysql > mysql.sql Enter password: [root@RockyLinux ~]# ls -l mysql.sql -rw-r--r-- 1 root root 1390006 7월 12 16:58 mysql.sql [root@RockyLinux ~]# |
위의 예는 MYSQL의 root계정으로 mysql이라는 데이터베이스를 백업하여 mysql.sql파일에 저장한 예이다.
정상적으로 백업되었다면 mysql.sql파일에는 mysql데이터베이스의 테이블 스키마와 데이터들이 SQL문으로 백업되어있다.
실제로 mysqldump로 백업된 파일에 저장되는 SQL문의 형식을 방금 백업한 mysql.sql 파일의 내용을 예로보면 다음과 같다.
아래 백업결과 내용을 정확하게 살펴보기 위하여 필요한 부분들만 나타내다보니 좀 길어졌다.
하지만 서버관리자라면 mysqldump로 백업되는 내용이 어떤형식과 내용으로 백업되는가를 정확하게 알아야하기 때문에 무리하여 모두 나타낸 것임을 양해바란다.
[root@sulinux bin]#cat mysql.sql -- MariaDB dump 10.19 Distrib 10.5.16-MariaDB, for Linux (x86_64) -- -- Host: localhost Database: mysql -- ------------------------------------------------------ -- Server version 10.5.16-MariaDB
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-- -- Table structure for table `general_log` --
/*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE IF NOT EXISTS `general_log` ( `event_time` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6), `user_host` mediumtext NOT NULL, `thread_id` bigint(21) unsigned NOT NULL, `server_id` int(10) unsigned NOT NULL, `command_type` varchar(64) NOT NULL, `argument` mediumtext NOT NULL ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'; /*!40101 SET character_set_client = @saved_cs_client */;
-- -- Table structure for table `slow_log` --
/*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */;
이하생략… |
위의 결과를 보면 mysqldump로 백업된 데이터는 모두 데이터베이스의 스키마 (데이터베이스 테이블구조)와 데이터베이스의 데이터내용을 생성할 수 있는 SQL문이라는 것을 알 수 있다.
따라서 mysqldump명령어로 백업된 데이터를 복구할 때에도 백업된 SQL문을 실행하여 복구한다.
이점은 분명히 기억하고 이해해두기 바란다.
이제 위의 백업된 mysql.sql파일을 이용하여 다시 복구할 때에는 다음과 같이하면 된다.
[root@sulinux bin]# ./mysql -u root -p mysql < ./mysql.sql |
주의할 것은 기존의 mysql데이터베이스가 이미 존재하고 있다면 복구되지 않을 수 있다.
이번에는 MYSQL에 존재하는 일반 데이터베이스를 백업하여 복구하는 예를보도록 하겠다.
현재 필자가 사용하고있는 리눅스 서버의 MYSQL에는 sspark_db라는 데이터베이스가 존재한다.
이 데이터베이스는 sspark이라는 MYSQL계정이 소유하고있는 데이터베이스이다.
따라서 아래와 같이 sspark이라는 MYSQL 계정명으로 sspark_db라는 데이터베이스를 백업하여 sspark_db.sql이라는 파일로 저장하는 예를 보인 것이다.
[root@sulinux bin]#./mysqldump -u sspark -p sspark_db > sspark_db.sql
Enter password: ********
[root@sulinux bin]# [root@sulinux bin]#ls -l sspark_db.sql -rw-r--r-- 1 root root 2068 4월 30 00:19 sspark_db.sql [root@sulinux bin]# |
다음은 좀전에 백업한 ssaprk_db데이터베이스의 백업내용이다.
어떻게 백업되어있는가를 확인하기 바란다.
백업이 어떤내용으로 되어있다라는 것을 알아야 정확한 복구작업을 수행할 수 있기 때문이다.
[root@sulinux bin]#cat sspark_db.sql
-- MySQL dump 10.13 Distrib 5.1.32, for pc-linux-gnu (i686) -- -- Host: localhost Database: sspark_db -- ------------------------------------------------------ -- Server version 5.1.32
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
-- -- Table structure for table `testtable` --
DROP TABLE IF EXISTS `testtable`; SET @saved_cs_client = @@character_set_client; SET character_set_client = utf8; CREATE TABLE `testtable` ( `uid` mediumint(4) unsigned NOT NULL DEFAULT '0', `name` varchar(12) NOT NULL DEFAULT '', `email` varchar(20) NOT NULL DEFAULT '', `website` varchar(50) DEFAULT NULL, PRIMARY KEY (`uid`) ) ENGINE=MyISAM DEFAULT CHARSET=euckr; SET character_set_client = @saved_cs_client;
-- -- Dumping data for table `testtable` --
LOCK TABLES `testtable` WRITE; /*!40000 ALTER TABLE `testtable` DISABLE KEYS */; INSERT INTO `testtable` VALUES (0,'ParkSungSoo','sspark@linux.co.kr',NULL),(1,'sontaesoo','shutterbug@orgio.net', NULL),(2,'JungWooYoung','',NULL); /*!40000 ALTER TABLE `testtable` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2009-04-2915:19:38 [root@sulinux bin]# |
위와같이 백업한 데이터를 다시 복구할 때에는 다음과 같이 하기 바란다.
[root@sulinux bin]# ./mysql -u sspark -p sspark_db < ./sspark_db.sql |
마찬가지로 주의 할 점은 복구대상이 되는 sspark_db라는 데이터베이스에 복구할 테이블이 이미 존재하고있다면 복구실패가 될 것이다.
따라서 위와같이 복구하실 때에는 sspark_db라는 데이터베이스의 이름만을 생성한 다음에 위의 명령어을 이용해야 정상적인 복구가 된다.
관련자료
-
이전
-
다음