728x90
반응형
  • mysqldump 이용하여 텍스트 형식으로 테이블의 내용을 저장하는 백업. (논리적 백업)
    • MySQL서버에 접속해서 데이터를 복구 하기 위한, create table, insert … 문을 만들어 내기 때문에 물리적 백업보다 시간이 오래 걸린다.
    • 테이블에 존재하는 index 대한 정보는 백업 내용에 포함되어 있지 않지만, 덤프 파일을 이용해서 데이터를 복구 시에는 인덱스가 생성된다.
    • 하드웨어가 틀린 다른 머신 에서도 호환이 된다.
    • 설정파일이나 로그파일 등은 백업이 되지 않는다.
    • --opt 옵션을 사용하면 덤프과정을 최적화 시키지만, --opt 사용하는 순간 모든 테이블에 lock 설정하기 때문에 다른 세션에서 DML 불가능 하다.
    • --opt 옵션은 기본적으로 extended-insert 활성화 시켜서, insert하는 구문이 아니다. 그래서 로그 사이즈가 줄어든다.
    • 전체 데이터 베이스를 백업 받을 때는 --flush-logs 옵션을 같이 사용하면 좋다.
    • 기본적으로 테이블과 연관된 데이터만 백업을 받게 되므로 --routines --triggers --events 옵션을 사용하여 덤프 파일에 추가해야 한다.
    • --master-data 복제 슬레이브 서버를 만들 목적으로 master서버에서 덤프 파일을 생성할 유용하다.

 

 

 

mysqldump 사용법

# tpcc 데이터베이스의 customer 테이블만 백업 받기

 

[root@mmysql ~]# mysqldump tpcc customer > customer_2016_12_10.dmp

 

백업 받은 파일은 기존 테이블이 존재하면 drop하고 create 후에 insert하는 식으로 만들어져 있다.

해당 테이블에 Index 있을 경우 index 생성 스크립트는 없음.

 

# 백업 받은 customer 테이블의 데이터를 다시 복구 하기

 

[root@mmysql ~]# mysql tpcc < customer_2016_12_10.dmp

 

# 특정 데이터 베이스 안의 모든 테이블 백업 받기 create database 구문 없음 (백업 받으면서 압축하기)

 

[root@mmysql ~]# mysqldump -uroot tpcc | gzip > /root/tpcc_2016_12_10.sql.gz

 

[root@mmysql ~]# gzip -d /root/tpcc_2016_12_10.sql.gz

[root@mmysql ~]# mysql < tpcc_2016_12_10.sql

 

# 데이터 베이스 백업 받기

 

[root@mmysql ~]# mysqldump --databases tpcc > tpcc_db.sql

 

# 데이터 베이스 복구

 

[root@mmysql ~]# mysql < tpcc_db.sql

 

# 테이블의 생성 스크립트만 백업 받기

 

[root@mmysql ~]# mysqldump tpcc customer_test --no-data > customer_test_ddl_only.sql

 

# 데이터만 백업 받기

 

[root@mmysql ~]# mysqldump tpcc customer_test --no-create-info > customer_test_data_only.sql

 

# 전체 데이터 베이스 백업 받기 (권한 테이블도 덤프 되기 때문에 다른 MySQL 넣으려면 다른 옵션을 사용할 !!)

 

[root@mmysql ~]# mysqldump --all-databases | gzip > all_db_2016_12_10.sql.gz

[root@mmysql ~]# mysqldump --all-databases --flush-logs --opt | gzip > all_db_flush_opt.sql.gz

[root@mmysql ~]# mysqldump --all-databases --flush-logs --opt --routines --triggers --events | gzip > all_db_flush_opt_r_t_e.sql.gz

 

[root@mmysql ~]# ls -al all_db*

-rw-r--r-- 1 root root 738113600 Dec  9 17:19 all_db_2016_12_10.sql.gz

-rw-r--r-- 1 root root 738113601 Dec  9 17:28 all_db_flush_opt.sql.gz

 

# 전체 데이터 베이스 백업 파일을 가지고, 특정 데이터 베이스만 복구 하기

 

mysql> show databases ;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sys                |

| tpcc               |

| tpch               |

+--------------------+

 

mysql> drop database tpcc ;

 

mysql> show databases ;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sys                |

| tpch               |

+--------------------+

 

[root@mmysql ~]# zcat all_db_flush_opt.sql.gz | grep "CREATE DATABASE" > create_db.sql

create_db.sql에서 DB Creation 문장 추출….. db 존재하는 상태라면 skip.

 

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `tpcc` /*!40100 DEFAULT CHARACTER SET euckr */;

 

mysql> CREATE DATABASE /*!32312 IF NOT EXISTS*/ `tpcc` /*!40100 DEFAULT CHARACTER SET euckr */;

Query OK, 1 row affected (0.01 sec)

 

mysql> show databases ;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sys                |

| tpcc               |

| tpch               |

+--------------------+

 

mysql> use tpcc ;

Database changed

mysql> show tables ;

Empty set (0.00 sec)

 

[root@mmysql ~]# zcat all_db_flush_opt.sql.gz | mysql -o tpcc   (-o = one database )

 

mysql> show tables ;

+----------------+

| Tables_in_tpcc |

+----------------+

| customer       |

| customer_test  |

| district       |

| history        |

| item           |

| new_order      |

| order_line     |

| orders         |

| orders_test    |

| stock          |

| test           |

| warehouse      |

+----------------+

 


반응형

+ Recent posts