데이터베이스 백업 및 복원

이번에는 데이터 베이스의 백업과 복원에 대해서 알아봅시다.

지금처럼 연습하는 겸해서 만드는 것이 아닌 실제 사이트를 운영시에 고객정보가 담긴 데이터베이스가 없어진다면...

정말 좌절하겠죠. 백업은 필수!!

그래야 날려먹어도 바로바로 복원시켜서 위기를 극복할수 있어요.

MySQL이 위치한 곳인 /Application/MAMP/Library/bin으로 이동합니다.

만약 mysql에 접속된 상태라면 접속을 끊어주세요.

그리고 아래의 명령어를...

mysqldump -u계정 -p비밀번호 데이터베이스명 > 백업파일명

그럼 smart 데이터베이스를 백업하자.

백업할 파일명은 smartdump.sql 이다.

mysqldump -uroot -p비밀번호 smart > smartdump.sql

또는 위와같이 비밀번호를 노출하지 않으려면

mysqldump -uroot -p smart > smartdump.sql

를 입력 후 비밀번호를 입력한다.

macOS 사용자는 위의 명령어는 실행이 안된다. 다음의 명령어를 입력한다.

sudo ./mysqldump -uroot -proot smart > smartdump.sql
mysql image

위와 같은 화면이 나왔다면 성공!

터미널에서 ls -al명령어를 쳐보면 smartdump.sql 파일을 볼 수 있다.

ls -al

이 sql파일을 에디터로 열어보면 정보들이 담겨있는걸 알 수 있다.

mysql image

ATOM 에디터로 smartdump.sql 파일을 열어보자.
ATOM 프로그램을 먼저 열고 smartdump.sql 파일을 열어준다.

mysql image

여러 DB 명령문들이 보인다.

DROP TABLE IF EXISTS `my_smart_devices`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `my_smart_devices` (
`num` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`thenumberofcpu` varchar(20) DEFAULT NULL,
`company` varchar(20) DEFAULT NULL,
PRIMARY KEY (`num`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `my_smart_devices`
--

LOCK TABLES `my_smart_devices` WRITE;
/*!40000 ALTER TABLE `my_smart_devices` DISABLE KEYS */;
INSERT INTO `my_smart_devices` VALUES (1,'galaxy nexus','2','samsung'),(2,'galaxy tab','1','samsung'),(3,'iPad2','2','apple');
/*!40000 ALTER TABLE `my_smart_devices` ENABLE KEYS */;
UNLOCK TABLES;

하나씩 어떤 내용인지 확인해보자.

DROP TABLE IF EXISTS `my_smart_devices`;

위의 명령문은 my_smart_devices 테이블이 있으면 삭제하는 명령문이다.

CREATE TABLE `my_smart_devices` (
`num` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`thenumberofcpu` varchar(20) DEFAULT NULL,
`company` varchar(20) DEFAULT NULL,
PRIMARY KEY (`num`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

위의 명렁문은 이미 아시겠지만 my_smart_devices 테이블을 생성하는 명령문이다.

LOCK TABLES `my_smart_devices` WRITE;

위의 명령문에서 LOCK TABLES은 my_smart_devices 테이블을 잠그는 명령문이다.
해당 테이블을 읽거나 쓰기가 불가해진다.
하지만 테이블명 뒤에 WRITE가 적혀있다. 쓰기는 허용을 하는 상태이다.

INSERT INTO `my_smart_devices` VALUES (1,'galaxy nexus','2','samsung'),(2,'galaxy tab','1','samsung'),(3,'iPad2','2','apple');

위의 명령문은 아시다싶이 해당 테이블의 데이터를 입력하는 명령문이다. 데이터가 많았다면 insert문은 더 길었을것이고 데이터가 하나 밖에 없다면 다음과 같이 짧았을것이다.

INSERT INTO `my_smart_devices` VALUES (1,'galaxy nexus','2','samsung');

입력을 다 했으므로 이제 테이블의 잠금을 해제한다.

UNLOCK TABLES;

그럼 MySQL에 접속해서 smart DB에 있는 my_smart_devices 테이블을 삭제 후 MySQL을 종료하자..

mysql image

그럼 이제 복원을 해보자.

mysql -u계정 -p비밀번호 데이터베이스명 < 백업파일명
mysql -uroot -p비번 smart < smartdump.sql

그리고 확인해보면 테이블이 다시 복원되어있다.

만약 다른 이름의 데이터베이스에 복원을 하고 싶다면

만들고 싶은 이름으로 데이터베이스를 만든다. 예를 들어

smart_db라는 이름의 데이터베이스로 백업해둔 smartdump.sql을 복원한다면

다음과 같이 입력한다.

mysql -uroot -p123456 smart_db < smartdump.sql

그 다음 데이터들이 제대로 입력되어있는지 확인해 본다.