우리는 대규모 스키마 마이그레이션을 실행해야하며 사이트가 오래 동안 사용되는 것을 원하지 않기 때문에 관련 테이블을 읽기 잠금없이 즉시 수행하려고합니다. 관련된 테이블은 특정 시간대에만 쓰여지므로 우리는 쓰기 잠금 기능을 가질 수있는 창을 가지고 있습니다. 그러나 많은 mysql 문서들이 ALTER TABLE
은 단지 락 테이블을 작성해야한다고 주장하지만, 우리의 경험 에선 인덱스를 추가하는 것과 같은 독창적 인 것은 아무것도 읽지 않는다.아무것도 잠그지 않고 mysql 외래 키가 참조하는 테이블을 변경할 수 있습니까?
그래서 우리는 수동으로 마이그레이션을 수행해야했습니다. new_mytable
mysql mydb < mytable.sql
의 정확한 컬럼에 삽입 할
CREATE TABLE new_mytable LIKE mytable;
- 이
mytable.sql
을 변경 나오지new_mytable
mysqldump -t mydb mytable > mytable.sql
- 사용하여 마이그레이션을 적용 : 우리는 다음과 같은 절차에 약간의 성공을 했어
- 외래 키를
mytable
에 드롭 -에 의해 복사되지 않음 - 때문에, 약간 정신이 내가 말하는대로
DROP TABLE old_mytable
이 테이블에만 하루 중 특정 시간에 기록받을 포함했다 확인 new_mytable
RENAME TABLE mytable TO old_mytable, new_mytable TO mytable
이제 우리는 FK를 삭제하고 새 FK에 다시 추가 할 수 있지만 프로세스는 그대로 약해집니다. 이 테이블을 가리키는 테이블이 많이 있습니다. 키를 다시 추가하면 우리에게 읽기 잠금이 생길 수 있습니다. 우리는 확실한 것입니다 - 특정 - 새 테이블에 첫 번째 데이터와 동일한 데이터가 모두 포함되어 있으므로, FK를 삭제하고 추가하지 않고 해당 FK의 참조를 변경하는 것이 좋습니다. 기존 FK가 새 테이블을 참조하도록 변경되도록 DB를 조작 할 수있는 방법이 있습니까?