설명: MySQL(5.6.6 이상), innodb_file_per_table이 활성화되었습니다.
1.1. 작업 단계:
0. 대상 서버에서 동일한 테이블 구조를 생성합니다.
1. 대상 서버: ALTER TABLE t DISCARD TABLESPACE;
2 원본 서버: FLUSH TABLES t FOR EXPORT;
3. 원본 서버 .ibd, t.cfg 파일을 대상 서버로
4. 원본 서버: UNLOCK TABLES
5. 대상 서버: ALTER TABLE t IMPORT TABLESPACE
1.2 데모
인스턴스 [mysql5711] 테이블, [mysql57112]
1.2.1 준비
1 대상 서버에 테이블 공간 생성
-- 소스 서버 [mysql5711]
mysql> ; burn_test .test_purge;
+----+------+
| a |
+----+------+
| 3 | 30 |
| 5 | 50 |
| 7 | 80 |
| ---+
8개 행 세트(0.01초)
--대상 서버 [mysql57112]
--
-- test_purge가 대상 서버에 존재하지 않습니다. 먼저 테이블을 생성하십시오.
mysql>
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`a`),
UNIQUE KEY `b` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT= 11 DEFAULT CHARSET=utf8mb4;
쿼리 확인, 0개 행 영향(0.16초)
2. 생성 후 확인
#
# 대상 서버
#
-rw-r----.1 mysql mysql 57344 Mar 21 10:31 test_purge.ibd # 테이블 공간이 필요합니다. DISCARD를 테이블스페이스 파일 삭제
ALTER TABLE test_purge DISCARD TABLESPACE; test_purge.frm 파일을 유지하고 test_purge.ibd
3를 삭제한다는 의미입니다. ibd 파일 삭제
--대상 서버
mysql> table test_purge destroy tablespace;
mysql> show tables;
+------------+| Tables_in_burn_test_2 |
+--- -------+| test_backup1 |
| test_purge |
+------------ ------ ----+
2행 세트(0.00초)
mysql> select * from test_purge;
ERROR 1814(HY000): 'test_purge' 테이블에 대한 테이블스페이스가 삭제되었습니다.
[root@MyServer burn_test_2 ]> ll | grep test_purge
-rw-r----.1 mysql mysql 8578 Mar 21 10:31 test_purge.frm
1.2.2. 테이블 공간을 내보내는 명령(동시에 읽기 잠금 추가)
-- 소스 서버
mysql> 내보내기용 플러시 테이블 test_purge -- 실제로 이 테이블에 읽기 잠금을 추가합니다. 쿼리 확인, 영향을 받은 행 0개(0.00) 초)
#
# 소스 서버
[root@MyServer burn_test]> ll | grep test_purge
-rw-r--- --. 1 mysql mysql 462 Mar 21 10:58 test_purge.cfg # 내보낸 후 추가 파일에는 일부 메타데이터 정보가 포함됩니다-rw-r----. 1 mysql mysql 8578 Mar 4 15:41 test_purge.frm
-rw-r- ----.1 mysql mysql 57344 Mar 5 15:28 test_purge.ibd
[root@MyServer burn_test]> cp test_purge.cfg test_purge.ibd /data/mysql_data/5.7.11_2/burn_test_2/ # 테이블스페이스 및 cfg 파일을 복사하고, 원격으로 scp를 사용해주세요. (로컬 멀티 인스턴스 데모, 여기서는 라이브러리 이름이 다릅니다.)
3. 테이블스페이스를 내보낸 후 최대한 빨리 잠금을 해제하세요
-- 소스 서버
mysql> 테이블 잠금 해제; -- 가능한 한 빨리 잠금 해제
쿼리 확인, 0개 행이 영향을 받음(0.00초)
참고: 잠금 해제되면 cfg 파일이 삭제되므로 잠금 해제하기 전에 cfg 및 ibd 파일을 복사하세요.
# 로그 on the source server
[참고] InnoDB: 퍼지 중지 # 실제로 퍼지를 중지하고 내보내기용 테스트 테이블을 찾으세요
[참고] InnoDB: 테이블 `burn_test`.`test_purge`가 디스크에 플러시되었습니다.
[참고] InnoDB: 메타데이터 파일 './burn_test/test_purge.cfg' 삭제 # 테이블 잠금을 해제한 후 파일이 자동으로 삭제됩니다.[참고] InnoDB: 퍼지 재개 # 잠금 해제 후 퍼지 스레드를 복원합니다
4. 대상 서버의 cfg 파일 및 ibd 파일을 수정할 수 있는 권한
#
# 대상 서버
#
[root@MyServer burn_test_2]> chown mysql.mysql test_purge.cfg test_purge. ibd
5. 대상 서버에서 가져오기 명령을 실행합니다. 테이블 공간
-- 대상 서버
--
mysql> alter table test_purge import tablespace; -- 테이블 공간 가져오기
쿼리 확인, 영향을 받는 행 0개(0.24초)
mysql> select * from test_purge; -- 소스 서버에서 복사된 데이터에서 읽을 수 있습니다.
+----+------+
| a |
+----+------+
| 30 |
| 6 | 70 |
| ----+------ -+
8 행 세트(0.00초)
# error.log에 나타나는 정보
InnoDB: 'MyServer' 호스트에서 내보낸 'burn_test/test_purge' 테이블에 대한 테이블스페이스 가져오기
참고:
위의 테스트 후에는 테이블 이름이 동일해야 합니다.
이 방법은 파티션 테이블의 백업 및 복구에도 사용할 수 있습니다.
위 내용은 mysql의 테이블스페이스 전송 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!