InnoDB 스토리지 엔진 - 투명 테이블 공간 전송

3719 단어

0. Summary

1.  , 
2.  discard tablespace
3.  
4.  ibd cfg 
5.  
6.  

1. 목적 서버는 테이블 구조를 원본 서버 구조와 같이 만든다.


####소스 ###
(root@localhost) [dbt3]> select count(*) from t1;
+----------+
| count(*) |
+----------+
|   150000 |
+----------+
1 row in set (0.02 sec)

(root@localhost) [dbt3]> show create table t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `c_custkey` int(11) NOT NULL,
  `c_name` varchar(25) DEFAULT NULL,
  `c_address` varchar(40) DEFAULT NULL,
  `c_nationkey` int(11) DEFAULT NULL,
  `c_phone` char(15) DEFAULT NULL,
  `c_acctbal` double DEFAULT NULL,
  `c_mktsegment` char(10) DEFAULT NULL,
  `c_comment` varchar(117) DEFAULT NULL,
  PRIMARY KEY (`c_custkey`),
  KEY `i_c_nationkey` (`c_nationkey`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

####목###
(root@localhost) [mytest]> create database dbt3;
Query OK, 1 row affected (0.01 sec)

(root@localhost) [mytest]> use dbt3;
Database changed
(root@localhost) [dbt3]> CREATE TABLE `t1` (
    ->   `c_custkey` int(11) NOT NULL,
    ->   `c_name` varchar(25) DEFAULT NULL,
    ->   `c_address` varchar(40) DEFAULT NULL,
    ->   `c_nationkey` int(11) DEFAULT NULL,
    ->   `c_phone` char(15) DEFAULT NULL,
    ->   `c_acctbal` double DEFAULT NULL,
    ->   `c_mktsegment` char(10) DEFAULT NULL,
    ->   `c_comment` varchar(117) DEFAULT NULL,
    ->   PRIMARY KEY (`c_custkey`),
    ->   KEY `i_c_nationkey` (`c_nationkey`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.02 sec)

2. 목적 서버 discard tablespace

[root@test-2 dbt3]# ls
db.opt  t1.frm  t1.ibd

(root@localhost) [dbt3]> alter table t1 discard tablespace;
Query OK, 0 rows affected (0.03 sec)

[root@test-2 dbt3]# ls
db.opt  t1.frm

discaredtablespace를 실행하는 역할은 ibd 파일을 삭제하고 테이블 구조 정의 파일만 보존하는 것입니다.

3. 소스 서버 잠금 테이블

(root@localhost) [dbt3]> flush tables t1 for export;
Query OK, 0 rows affected (0.01 sec)

다른 세션 실행:
(root@localhost) [dbt3]> select count(*) from t1;
+----------+
| count(*) |
+----------+
|   150000 |
+----------+
1 row in set (0.03 sec)

자물쇠는 공유된 자물쇠를 넣는다는 뜻이다.
(root@localhost) [dbt3]> delete from t1 limit 1;
...hang...

4. ibd와 cfg 파일을 목적 서버로 복사


파일을 복사하여 다른 곳으로 가서 가능한 한 빨리 잠금을 해제하다
[root@test-1 dbt3]# cp t1.cfg t1.ibd /mdata/

(root@localhost) [dbt3]> unlock tables;
Query OK, 0 rows affected (0.00 sec)

풀고 delete 결과를 되돌려줍니다.
(root@localhost) [dbt3]> delete from t1 limit 1;
Query OK, 1 row affected (2 min 43.80 sec)

다음은 cfg와 ibd를 목적 서버의 데이터 디렉터리로 복사합니다.
[root@test-2 dbt3]# ls -ltr
total 40980
-rw-r-----. 1 mysql mysql       67 Feb  7 09:42 db.opt
-rw-r-----. 1 mysql mysql     8850 Feb  7 09:44 t1.frm
-rw-r--r--. 1 root  root  41943040 Feb  7 10:47 t1.ibd
-rw-r--r--. 1 root  root       893 Feb  7 10:47 t1.cfg
[root@test-2 dbt3]# chown -R mysql:mysql t1.ibd t1.cfg

cfg는 검사 파일입니다. 사실 없어도 됩니다. 메타데이터를 검사하지 않습니다.frm와 ibd가 일치하지 않으면 실행할 때crash가 발생합니다.

5. 목적 서버 테이블 공간 파일 가져오기

(root@localhost) [dbt3]> alter table t1 import tablespace;
Query OK, 0 rows affected (0.18 sec)

(root@localhost) [dbt3]> select count(*) from t1;
+----------+
| count(*) |
+----------+
|   150000 |
+----------+
1 row in set (0.59 sec)

6. 기타


이 기능은 5.6에 도입되었고 5.7은 구역표의 더욱 세밀한 입도를 지원한다.

좋은 웹페이지 즐겨찾기