본문 바로가기

SQL

[MySQL_MariaDB] 백업_복사_insert_삭제

* 백업과 복원

> 서버의 하드가 깨져서 중요한 데이터를 잃어버릴 경우를 대비해 백업과 복원은 중요.

 

별도의 디스크를 준비하기 어려우므로 폴더를 다른 디스크라고 생각하자.

 

쇼핑몰DBproducttbl테이블에 3개의 데이터가 있는 것을 확인

 

1,2. workbench Navigator > MANAGEMENT > Data Export(데이터 내보내기) > Data Export 창이 열린다.

3,4. Shopdb 데이터베이스를 선택하면, 오른쪽에 테이블, 뷰 등이 보인다. 모두 체크.

5. Object to Export 도 모두 체크해서 스토어드 프로시저, 스토어드 함수, 트리거 등도 백업을 한다.

6. 백업될 경로와 아래 모두 체크 : 모든 내용 백업 설정

7. 다됐으면 startExport

 

Sql 문으로 백업이 되었다.

 

데이터를 삭제하는 사고가 났다고 가정하자.

 

복원을 시켜야하는데, 사용중인 DB를 복원하면 문제가 생길 수도 있으므로, 우선 현재 데이터베이스를 다른 데이터베이스로 변경해야한다. sys데이터베이스를 사용하자.

 

1. workbenchNavigator > Data Import/Restore

2. 백업파일 선택

3. 타겟 데이터베이스 선택

4. 복원시작

 

잘 복원된 것을 확인할 수 있다.

* 상용 제품인 MySQL Enterprise Edition에는 MySQL Enterprise Backup 툴을 제공해주는데 이 툴을 사용하면 실시간으로 변경되는 내용들도 백업이 되는 기업 환경의 백업 툴을 제공한다.

 

Source 명령어를 통해서도 sql 파일을 실행시킬 수 있다.

 

Insert문에 values 없이 select문을 통해 데이터 복사가 가능하다. 물론, select문의 결과 열의 갯수는 insert 할 테이블의 열 개수와 일치해야한다.

 

Create select 문을 혼합하여 복사도 가능하다. Pk, fk 는 복사되지 않는다. 물론, select문의 결과 열의 갯수는 insert 할 테이블의 열 개수와 일치해야한다.

 

위처럼 여러 개 insert 한문장으로 가능함

 

대용량 테이블 삭제

7. delete : DML문인 delete는 트랜잭션 로그를 기록하는 작업 때문에 삭제시 오래걸림.

8. Drop : DDL문인 DROPDDL은 트랜잭션을 발생시키지 않는다.

9. truncate : 동작은 delete와 동일하지만, DDL 트랜잭션을 발생시키지 않아 빠름. 테이블 구조를 남겨 놓고 필요없다 여겨지는 테이블은 이걸로 삭제시킴.

 

7. 이미 membertbl에는 BBK 아이디가 있으므로 걍 insert문은 에러가 나고 나머지는 인서트가 되지 않는다.

11~13. Ignore를 붙여주면 하나가 오류가 나더라도 무시하고 나머지를 진행한다.

 

4. on duplicate key update : 기본키가 중복되면 update, 기본키가 없으면 insert. BBK는 원래 바비킴이였다. 수정됨. 동짜몽은 원래 없었으므로 insert

 

* 쿼리의 결과를 file로 저장

129. secure-file-priv : 보안을 강화하기 위해서 지정한 폴더 외에는 파일의 읽기/쓰기를 금지하며 MySQL5.1.17 이후부터 적용된다. 또한 이 옵션은 여러 개가 쓰여져 있어도 관계없지만, 제일 마지막의 것만 적용된다.

 

 

위처럼 한꺼번에 복사가 가능하다.

 

요런식으로 백업이 진행된다.