본문 바로가기

개발일지

[mysql] db를 복제 데이터, 테이블 복사

반응형

DB 를 사용하다보면 테이블, 데이터 그대로 복제해서 그상태로 테스트 DB가 필요할때가 있었습니다.

 

이에 mysql에서 테이블 그대로, 데이터 그대로로 schema를 추가해보았습니다.

 

* 리눅스 접속

 

1. 접속해서 schema1의 테이블, 데이터 dump 하기

$ mysqldump --single-transaction -uuser -ppw schema1 > dump.sql

 

mysqldump 명령어 

$ mysqldump --help 

-u, --user=name     User for login if not current user.

-p, --password[=name]
                      Password to use when connecting to server. If password is
                      not given it's solicited on the tty

 --single-transaction
                      Creates a consistent snapshot by dumping all tables in a
                      single transaction. Works ONLY for tables stored in
                      storage engines which support multiversioning (currently
                      only InnoDB does); the dump is NOT guaranteed to be
                      consistent for other storage engines. While a
                      --single-transaction dump is in process, to ensure a
                      valid dump file (correct table contents and binary log
                      position), no other connection should use the following
                      statements: ALTER TABLE, DROP TABLE, RENAME TABLE,
                      TRUNCATE TABLE, as consistent snapshot is not isolated
                      from them. Option automatically turns off --lock-tables.

single transaction을 사용한 이유는 다른 개발자들이 붙어있는 개발 서버에 영향을 끼치면 안되기 때문에

사용하였다. 이때 다른사람들이 select, insert, update, delete하는 것들은 dump 뜨는데 영향을 끼치지 않습니다.

다만 innoDB에서만 사용가능하다는 점.

 

위 명령어를 실행하고 나면 dump.sql 파일이 생성되고 해당 파일을 띄워보면 create table명령어와 data insert 하는 쿼리들이 들어있는것을 확인 할 수있습니다.

 

dump.sql이 다 생성 되었다면

2. MariaDB root 계정으로 접속

$ mysql -uroot -ppw 

 

3. 추가할 스키마를 생성

MariaDB [(none)] > create database newschema;

 

4. 생성한 스키마 접속 권한 부여 

MariaDB [(none)] > grant all privileges on newschema.* to 'schema1@%';

물론 newschema 계정으로 접속할 예정이면 해당 과정은 skip 해도 되지만 

저는 원래 연결되어있던 계정에서 바로 접속 하고 싶어서 권한을 부여 해주었습니다. 

그리고 exit 로 커맨드로 돌아옵니다.

 

5. 생성한 dump.sql 파일 newschema에 생성하기 

$ mysql -uuser -ppw newschema < dump.sql

물론 현재 폴더에 dump.sql이 없다면 절대경로로 해주어도 됩니다. 

 

위 과정을 모두 하고 난다음에는 테이블, 데이터가 잘 생성되고 잘 들어갔는지 확인

 

이렇게 하면 schema1에 만들어져있던 테이블, 데이터가 모두 복제되어 들어가게 됩니다.

 

-끝-

반응형