본문 바로가기

Database/MariaDB(Mysql)

MySql(Maria DB) 테이블 복사하기

서비스 운용작업을 하다보면 데이터베이스나 테이블을 복사해야 하는 경우가 발생한다 

물론 Mysqldump를 이용하면 간단히 처리하겠지만 콘솔에 접속할 수 없거나 자동화 작업을 해야하는 아래와 같은 경우에는 해당 방법으로 처리하면 데이터베이스나 테이블 복사를 자동화 할 수 있다. 

 

Case 1. 동일한 데이터베이스를 새로 만들어서 복사하여 테스트를 진행하고자 하는 경우 

Case 2. 새로운 사업장을 생성하기 위해서 초기화된 데이터베이스를 복사하는 경우 

 

일반적으로 테이블을 복사하는 방법 

 

1. 복사 할 테이블이 없는경우 

  - 테이블을 생성 AND 데이터를 복사 

CREATE TABLE [대상테이블명] SELECT * FROM [원본 테이블명] 

ex) CREATE TABLE `source_db`.`source_table` SELECT * FROM `target_db`.`target_table`; 

 

 

2. 이미 동일한 스키마의 테이블이 존재하는 경우 

INSERT INTO [대상테이블명] SELECT * FROM [원본 테이블명] 

ex) INSERT INTO `source_db`.`source_table` SELECT * FROM `target_db`.`target_table`; 

 

* 방법 1, 2로 복사하는 경우 기본키(Primary Key)와 인덱스(Index), Auto Increment는 복사되지 않음. 

 

3. 테이블을 Key, Index, A.I 까지 모두 동일하게 복사하고 싶은 경우 

SHOW CREATE TABLE [대상테이블명]; 

ex) SHOW CREATE TABLE `source_db`.`source_table`; 

 

return value(Create Table) :  

CREATE TABLE `source_table` ( 

  `keyindex` int(11) NOT NULL, 

  `a_code` varchar(20) NOT NULL, 

  `a_type` tinyint(4) unsigned NOT NULL DEFAULT '0', 

  `a_date` date NOT NULL DEFAULT '0000-00-00', 

  PRIMARY KEY (`keyindex`,`a_code`), 

  KEY `a_code` (`a_code`), 

  KEY `keyindex` (`keyindex`) 

) ENGINE=MyISAM DEFAULT CHARSET=utf8 

SHOW CREATE TABLE을 실행하면 데이터로 현재 생성되어 있는 테이블의 스키마를 Create Table 문으로 리턴하고 해당 쿼리를 `source_table` -> `target_table`로 변경한뒤 바로 실행하면 동일한 스키마(컬럼, P.K, Index, A.I, Engine, Charset)로 빈 테이블이 생성된다. 

 

HeidiSql 에서 Show Create Table 실행결과

그럼 생성된 테이블에 방법 2로 데이터를 채워넣으면 동일한 테이블이 생성된다.