Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 테이블 복제 완벽 가이드: 인덱스와 데이터까지 한 번에 클론하는 방법

MySQL에서 테이블을 복제할 때는 CREATE TABLE ... LIKE 구문을 활용하면 됩니다. 이 방법을 사용하면 원본 테이블의 구조(스키마)와 인덱스가 그대로 복사되며, 이후 INSERT ... SELECT 문으로 데이터까지 손쉽게 옮길 수 있습니다.

이 글에서는 'business' 데이터베이스의 student 테이블을 예시로, 인덱스와 데이터를 포함한 테이블 복제 과정을 단계별로 살펴보겠습니다.

1. 데이터베이스 선택 및 테이블 확인

먼저 작업할 데이터베이스를 선택합니다.

mysql> USE business;
Database changed

'business' 데이터베이스에는 수십 개의 테이블이 생성되어 있습니다. 다음 명령으로 전체 테이블 목록을 확인할 수 있습니다.

mysql> SHOW TABLES;

이 중에서 이번 예제에 사용할 테이블은 student입니다.

2. 원본 테이블 구조 및 데이터 확인

복제 전에 원본 테이블의 구조를 먼저 살펴보겠습니다. DESC 명령어를 사용합니다.

mysql> DESC student;

실행 결과는 다음과 같습니다.

+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | YES  | MUL | NULL    |       |
| Name  | varchar(100) | YES  | MUL | NULL    |       |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.20 sec)

Key 열에 MUL이 표시된 것을 확인할 수 있는데, 이는 해당 컬럼에 인덱스가 설정되어 있다는 의미입니다. 즉, 복제 시 이 인덱스 정보도 함께 복사해야 합니다.

다음으로 테이블에 저장된 실제 데이터를 조회해 보겠습니다.

SELECT * FROM student;
+------+------+
| id   | Name |
+------+------+
| 1    | John |
| 2    | Bob  |
+------+------+
2 rows in set (0.00 sec)

3. LIKE를 이용한 테이블 복제

이제 LIKE 키워드로 테이블을 복제합니다. 이 구문은 컬럼 정의는 물론 인덱스, 기본 키, UNIQUE 제약 조건까지 원본과 동일하게 생성해 줍니다.

mysql> CREATE TABLE cloneStudent LIKE student;
Query OK, 0 rows affected (1.57 sec)

테이블 구조가 복제되었으므로, 이어서 INSERT ... SELECT 문으로 원본 데이터를 모두 복사합니다.

mysql> INSERT cloneStudent SELECT * FROM student;
Query OK, 2 rows affected (0.60 sec)
Records: 2 Duplicates: 0 Warnings: 0

4. 복제 결과 검증

복제가 제대로 되었는지 확인해 보겠습니다. 먼저 DESC 명령으로 복제된 테이블의 구조를 비교합니다.

mysql> DESC cloneStudent;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | YES  | MUL | NULL    |       |
| Name  | varchar(100) | YES  | MUL | NULL    |       |
+-------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

원본 테이블과 동일하게 Key 열에 MUL(인덱스)이 유지되고 있음을 확인할 수 있습니다. 이어서 데이터도 정상적으로 복사되었는지 조회합니다.

mysql> SELECT * FROM cloneStudent;
+------+------+
| id   | Name |
+------+------+
| 1    | John |
| 2    | Bob  |
+------+------+
2 rows in set (0.00 sec)

정리

MySQL에서 테이블을 통째로 복제하는 절차는 매우 간단합니다.

① CREATE TABLE 새테이블 LIKE 원본테이블; → 구조와 인덱스 복제
② INSERT 새테이블 SELECT * FROM 원본테이블; → 데이터 복사

단순히 CREATE TABLE ... AS SELECT만 사용하면 인덱스나 제약 조건이 복사되지 않기 때문에, 인덱스까지 완전하게 복제하려면 반드시 LIKE 구문을 사용하는 것이 좋습니다. 백업, 테스트 환경 구성, 대량 데이터 마이그레이션 등 다양한 상황에서 유용하게 활용할 수 있습니다.