컴퓨터 / Computer

MySQL/MariaDB Table 이동 시키기

공유지기 1 3,633 2022.09.18 23:26

mariadb_org_rgb_v_stroke.png 








MySQL이나 MariaDB에서 DB 복구를 하거나 특정 테이블만 이동을 시켜야 할 때가 있다. 보통은 dump 를 이용하여 복사나 복구를 할 수 있는데, 운영 중인 서비스를 중단할 수 없을때에는 상당히 난감하다. 그럴 경우에는 아래와 같이 해 볼 수 있다. (일단 전제조건은 MySQL/MariaDB에서 InnoDB 엔진을 사용하는 경우이다. 그리고 테이블별로 파일을 생성할 수 있게 설정한 경우이다. 테이블 파일은 확장자가 .ibd 이다. 특정 Database에서 이 파일을 복사하여 다른 Database 폴더에 넣어 인식하면 좋지만 그렇지가 않기에 이 절차를 거치게 한다. ) 


1. 새로운 DB 내지는 복구하려는 DB에서 임시 테이블을 생성한다. (기존 테이블이 깨졌을 경우 그걸 그대로 생성하면 자료가 다 날아갈 수 있다. 명심하자. DB에서는 삭제보단 추가를 하는게 후회가 적다.) 그리고 새 테이블을 생성하면 테이블 구조를 복사해야 하는데, 복사 과정이 힘들 수 있으니 phpmyadmin 같은 곳에서 테이블 구조가 같은 기존 테이블을 "구조"만 복사하는게 무척 좋다. 


2. 이때 새 DB에는 .frm과 .ibd가 생긴다. 아래와 같이 SQL 문을 실행하여 .ibd 파일을 삭제한다.


 alter table [테이블이름] discard tablespace; 


3. 그리고 기존에 가지고 있던 .ibd 파일을 새 DB 내지는 복구하려는 테이블이 있는 DB 폴더에 복사를 한다. 보통 cp 명령어로 복사를 하는데, 복사한 후 권한 설정까지 해야 한다. 그래서 아래와 같이 입력하면 좋다. 



 cp  /old/file.ibd /new/file.ibd && chown -R mysql:mysql file.ibd 


위 구문에 대해서 자세한 설명은 생략하겠다. 복사를 한 후 복사한 파일의 소유자와 권한을 mysql 로 바꾸어 주어야 한다.


4. 이제 새 DB에서 아래와 같이 SQL 문을 실행한다. 



 alter table [테이블이름] import tablespace; 


권한 설정이 제대로 되었으면 새 DB에 테이블 하나를 다 채운다. 


5. 오류 

작업 중 몇 가지 오류가 생기는 경우가 있다. 이제까지 경험한 것은 아래 두 가지이다. 


 - 권한 : chown -R mysql:mysql 을 실행하면 오류가 없어진다.

 - 인덱스 : primary 키를 제외한 나머지 키가 있으면 그 키값들은 모두 삭제하는게 좋다. foreign keys 라고 되어 있거나 multiple indexes 라는 단어가 포함된 경우가 그 경우이다. primary 키 외에 다른 키를 삭제하는 방법은 검색해 보시면 될 듯. 





Comments

사랑방지기 2022.09.19 00:40
https://dbknowledge.tistory.com/m/20


이게 foreign key 관련 글입니다.
캡슐우산 자외선차단 초경량 암막 우양산 양산 휴대용
스텐 네일 푸셔 니퍼 젤 큐티클 제거 셀프 손톱 3종
통굽 펌프스 로우힐 3.5cm 구두 베이직 여성 미들힐
남성 여름 쿨링 스판 초경량 밴딩 슬랙스 정장 바지
차량용 거치대 맥세이프 회전 충전기 원형 거치대
캐논 PG 49 정품잉크 검정 PIXMA E4290
58mm CPL 필터 편광 렌즈 DSLR 카메라 펜탁스 올림푸스 호환
HDMI V2.0 골드메탈 케이블 3m
(품질보장) 태양광 정원등 야외 센서등 가로등 벽부등 실외벽등 LED 야외등
정원 충전 조명 원형 주황색 2개세트 관리 led 열 광 전기 야외 태양 전등
TBZ 포근 방수러그 딥블루 150x200
하드웨어 다용도 브라켓 길이 커튼 알루미늄 고정 조절
프리미엄 특수부위 안창살 300g x 2팩
산도깨비 에어컨세정제 330ml 곰팡이제거제 (1개)
뽀로로 홍삼 쏙쏙 포도 100ml x 20개입
업소 가정용 집게바지걸이 옷걸이 5개

결혼봉투 금박 100매 경조사 축결혼 축의금
칠성상회
B4 양면 특대 봉투 290 x 390mm 10매
바이플러스

맨위로↑