2010-02-12 4 views
12

나는 각각 약 12 ​​개의 테이블을 가진 약 100 개의 데이터베이스 (모두 동일한 구조, 다른 서버에만 있음)를 가지고 있습니다. 대부분의 테이블은 작습니다 (100MB 이하라고합시다). 테이블이 커질 수있는 경우가 있습니다 (4GB +라고 말하면됩니다).생산 데이터베이스의 MySql ALTER TABLE - 모든 문제점?

각 데이터베이스의 거의 모든 테이블에 대해 일련의 ALTER TABLE 명령을 실행해야합니다. 주로 구조에 일부 행을 추가하지만 행을 varchar에서 tinytext (또는 그 반대)로 변경하는 것과 같은 몇 가지 변경 사항이 있습니다. 또한 몇 가지 새로운 색인을 추가합니다 (그러나 새로운 행의 색인을 생성하고 기존의 색인을 색인하지 않으므로 큰 문제는 아닙니다).

이 작업이 얼마나 안전하며이 프로세스에 대한 모범 사례가 있는지 궁금합니다.

먼저 테이블의 데이터가 손상되거나 삭제 될 수 있습니다. 나는 의심하지만 확신 할 필요가있다.

두 번째로, 더 큰 테이블 (4GB 이상)의 경우, 몇 분에서 수 시간 걸릴 수 있습니다.

프로덕션 데이터베이스에서 ALTER TABLE 명령을 수행하는 것에 대해 알아야 할 모든 것이 학습에 관심이 있습니다.

그 값을 알고 있다면, 나는 대부분 PHPMYADMIN을 통해 명령을 내릴 계획입니다.

감사합니다.

+0

좋은 질문은 이것에 대한 답을보기 좋을 것이다. 나의 초기의 의심은 테이블을 변경하는 경우 MySQL이 모든 행을 편집해야한다고 생각하지 않기 때문이다 - 확신 할 수는 없지만,이 하나에 자신을 던지고 교육받은 마음을 기대하십시오 :) – suitedupgeek

+0

+1 좋은 질문. – ziya

답변

5

먼저 체인저를 적용하기 전에 백업을 작성하십시오. 당신이 그것을 할 수있는 두 가지 방법 : mysqldump 또는 당신은 당신의 mysql 데이터 폴더를 복사 할 수 있습니다.

둘째, mysql을 명령 줄에서 사용할 수 있습니다. PHPMyAdmin이 시간 초과됩니다. 대부분의 PHP 서버의 시간 제한은 10 분 미만입니다. 또는 실수로 브라우저를 닫습니다.

+1

테이블 크기가 100MB ~ 4GB + 인 데이터베이스를 100 개까지 백업하려면 다른 질문이 필요합니다 .-) – ziya

+1

+1은 명령 줄 제안입니다. – ziya

+0

잠긴 행에 관련된 모든 문제가 있습니까? – Jorre

0

여기가 제 제안입니다.

  1. 앱을 장애 조치 할 수 있습니다 (모든 DB에 연결되지 않도록하십시오).

  2. "create index statements"를 사용하여 색인을 만들 수 있습니다. alter table add index statements를 사용하지 마십시오.

  3. 스크립트를 사용하여이 모든 작업을 수행하십시오 (이러한 모든 명령문을 파일에 보관하고 원본에서 실행).

  4. 표 크기가 매우 작아 보이는 것처럼 보이므로 두통이 생기지 않습니다.

관련 문제