파일을 복사하여 MySQL 데이터베이스를 복사 할 수 있습니까? 파일에 정확히 무엇이 포함되어 있습니까?


13

MySQL 데이터베이스와 Ubuntu Linux 컴퓨터를 사용하고 있습니다.

이름이 내 데이터베이스 db_test, 난 경로 아래 통지 /var/lib/mysql/db_test, 파일이와 접미사 .frm, .MYD, .MYI다음과 같이 :

/var/lib/mysql/db_test# ls

cars.frm 
cars.MYD 
cars.MYI

customers.frm
customers.MYD
customers.MYI

departments.frm
departments.MYD
departments.MYI

... 

각을 보인다 .frm, .MYD, .MYI파일 그룹은 데이터베이스에있는 하나 개의 테이블로 매핑.

다음 두 가지 질문을합니다.

  1. 세 파일이 정확히 무엇을하고 있습니까?

  2. 내가 경로 아래에 새 디렉토리를 만들 경우 /var/lib/mysql/말을 db_test_2하고부터 모든 파일을 복사 db_test_1에 디렉토리 db_test_2, 그것은 또한 새 데이터베이스 생성됩니다 db_test_2완전히 같은 내용 (테이블)이 db_test_1'들?

이 실제 데이터베이스 파일 이동 조치는 다음 명령 행 조치와 동일한 결과를 작성합니까?

  1. 데이터베이스를 db_test_1내 버리다

  2. 새로운 데이터베이스를 만들 db_test_2

  3. 그런 다음 db_test_1데이터베이스를 새 데이터베이스로 다시 덤프 db_test_2합니까?

그렇다면 mysqldump데이터베이스를 복사 하는 데 사용 하거나 MySQL의 한 DB에서 다른 DB로 데이터를 가져 오는 것보다 파일 이동이 훨씬 빠릅니다 . 이것에 대한 의견이 있으십니까?

답변:


5
  1. AFAIR, .frm은 description-file (데이터베이스 테이블 구조 설명), .MYD는 데이터 파일, .MYI는 인덱스 파일입니다.

  2. 예, 복사 속도가 훨씬 빠릅니다. 그러나 한 가지 문제가 있습니다. 그것은 원자가 아닙니다. 로드가 많은 경우 복사 된 파일이 일관성이없고 손상 될 수도 있습니다. 특히 InnoDB와 같은 '스마트'엔진을 사용하는 경우.

편집 : ps 이러한 파일을 안전하게 복사 할 수 있지만 mysql 서버를 중지하기 전에.


4

정확하게 이것을 수행하는 cmd 라인 도구가 있습니다. mysqlhotcopy

Mynosam 테이블은 훌륭하지만 InnoDb 테이블에서는 작동하지 않습니다.

lvm으로 서버를 구성하고 / var / lib / mysql을 전용 볼륨에 배치 한 경우 모든 데이터베이스를 매우 빠르고 비 차단 방식으로 백업하는 것이 좋습니다.

mysql -U root -p
  > flush tables with read lock;

이것은 모든 테이블을 디스크로 플러시하고 모든 r / w 작업을 차단합니다

  > system "lvcreate -s -L 1G -n lvMysql_snap /dev/vg_myserver/lv_mysql" ;

구성에 맞게 조정해야하므로 데이터베이스 파일 시스템의 스냅 샷이 생성됩니다. 시간이 걸리지 않습니다

  > unlock tables;

이것으로 R / W 동작이 재개됩니다.

이제 / dev / vg_myserver / lvMysql_snap을 마운트하고 데이터베이스의 tar 아카이브를 만들 수 있습니다!


이것은 DB를 백업하는 빠른 방법처럼 보입니다. 그러나 스냅 샷을 다시 전환하여 라이브 데이터베이스로 다시 전환하는 것은 어떻습니까? 그것이 제가 정말로 걱정하는 부분입니다. 나는 mysqldump2 초 안에 DB를 사용할 수 있습니다 . 5-10 분 정도 걸리는 느린 부분입니다.
Buttle Butkus

최근 배포판에서 lvm 스냅 샷을 원래 위치로 되돌릴 수 있지만 데이터베이스 백업 관리에 적합하지 않을 수 있습니다.
Olivier S

mysqlhotcopy에 관하여 :에서 "이 유틸리티는 MySQL은 5.6.20에서 더 이상 사용되지와 MySQL 5.7에서 제거"[ dev.mysql.com/doc/refman/5.6/en/mysqlhotcopy.html]
zeusstl

0

MyISAM에서는 작동하지만 InnoDB에서는 작동하지 않습니다. 참조 https://serverfault.com/a/367321/57569를

그 대답에서 InnoDB에 대해 :

.frm 및 .ibd 파일을 복사하려고 생각하는 경우 상처를 입을 수 있습니다. InnoDB 테이블의 .frm 및 .ibd 파일을 복사하는 것은 .ibd 파일의 테이블 스페이스 ID가 ibdata1 파일의 metdata에있는 테이블 스페이스 ID 항목과 정확히 일치 함을 보장 할 수있는 경우에만 적합합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.