서비스 운용작업을 하다보면 데이터베이스나 테이블을 복사해야 하는 경우가 발생한다
물론 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)로 빈 테이블이 생성된다.
그럼 생성된 테이블에 방법 2로 데이터를 채워넣으면 동일한 테이블이 생성된다.
'Database > MariaDB(Mysql)' 카테고리의 다른 글
Mysql 데이터 행번호 매기기 - ROWNUM (0) | 2022.04.20 |
---|---|
MariaDB 설치 에러 Setup Wizard ended prematurely (4) | 2021.12.10 |
Mysql 대량 INSERT의 속도 개선을 위한 다양한 방법 (2) | 2021.07.22 |
Maria DB 특정버젼으로 선택 후 설치하기 (0) | 2021.02.23 |
mysql connector net 삭제 안되는 문제 해결하기 (2) | 2020.09.16 |