반응형
Django DB를 SQLite에서 MySQL로 마이그레이션하는 가장 좋은 방법은 무엇입니까?
db를 sqlite에서 mysql로 이행해야 하는데, 다양한 툴과 스크립트가 너무 많아서 가장 안전하고 우아한 솔루션을 쉽게 찾을 수 없습니다.
http://djangosnippets.org/snippets/14/은 좋은 것 같았지만, 업데이트를 받은지 3년이 지난 것 같아 걱정입니다.
Django 1.1.1에서 신뢰할 수 있는 솔루션을 추천해 주시겠습니까?
실행:
python manage.py dumpdata > datadump.json
다음으로 settings.py을 mysql 데이터베이스로 변경합니다.
마지막으로:
python manage.py loaddata datadump.json
열심히 찾아본 결과 몇 가지 문제점을 발견했는데, 향후 답변이 도움이 될 것으로 보입니다.
나의 공식은
python manage.py dumpdata > datadump.json
- settings.py을 mysql로 변경합니다.
- mysql에 접속할 수 있는지 확인합니다(권한 등).
python manage.py migrate --run-syncdb
셸에서 이 스니펫을 사용하여 contentype 데이터 제외
python manage.py shell
from django.contrib.contenttypes.models import ContentType ContentType.objects.all().delete() quit()
python manage.py loaddata datadump.json
그게 도움이 되길 바라!
이 방법이 더 깔끔한 방법으로ContentType
다른 곳에서 설명하는 문제:
./manage.py dumpdata --exclude contenttypes --exclude auth.permission --exclude sessions --indent 2 > dump.json
그 후, 다음과 같이 입력합니다.
./manage.py loaddata dump.json
sqlite에서 MySQL, YMMV로의 이행에 필요한 순서의 (풀)리스트:
- python manage.py dumpdata > datadump.json
- mysql(권한 등)에 접속할 수 있는지 확인합니다.
- FORNE_KEY_CHECKS를 변경할 수 있는 권한이 있는지 확인합니다(이를 위해 mysql의 개인 인스턴스를 설치하고 실행해야 했습니다).
- InnoDB 엔진을 사용하지 않는지 확인하십시오(모든 테이블에 MyISAM 사용). 그렇지 않으면 다음 단계가 작동하지 않습니다(사일런트 실패).
- 다음 명령으로 검증을 완화합니다(InnoDB에서는 활성화되지 않습니다).
SET GLOBAL FOREIGN_KEY_CHECKS = 0;
- django_site를 로드합니다.sql 테이블을 별도로 지정합니다(contribute를 사용하는 경우).사이트)
- settings.py을 새로운 mysql로 변경합니다.
- python 관리.py migrate --run-syncdb
- 필요에 따라 Django 앱과 DB 테이블의 /migrations 디렉토리에 있는 코드를 수정하여 syncdb 오류를 수정합니다.
- 이 스니펫을 사용하여 콘텐츠 유형 데이터를 제외합니다(메인 urls.py 모듈에 넣을 수 있습니다).
from django.contrib.contenttypes.models import ContentType
ContentType.objects.all().delete()
quit()
- json 데이터를 편집해야 하는 경우 먼저 데이터를 예쁘게 만들어야 합니다.
cat datadump.json | python -m json.tool > datadump_pretty.json
- python 관리.py loaddata datadump.json
- 데이터 잘라내기 문제 해결
- 타임존 데이터를 데이터베이스에 추가합니다.
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -D mysql -P 1234 -u root -p --protocol=tcp
mysql -P 1234 -u root -p -e "flush tables" --protocol=tcp
- 데이터를 송신하지 않고 사이트가 동작하고 있는지 테스트합니다.
- SET GLOBAL FORNE_KEY_CHECKS = 1;
- 나머지를 테스트하다
언급URL : https://stackoverflow.com/questions/3034910/whats-the-best-way-to-migrate-a-django-db-from-sqlite-to-mysql
반응형
'programing' 카테고리의 다른 글
JavaScript 배열의 마지막 요소 선택 (0) | 2023.02.02 |
---|---|
MySQL vs MariadB:일반 오류: 1205 잠금 대기 시간 초과. 트랜잭션을 다시 시작해 보십시오. (0) | 2023.02.02 |
Vue 속성이 밑줄과 함께 유효하지 않습니다. (0) | 2023.01.13 |
텍스트 인코딩 결정 방법 (0) | 2023.01.13 |
VueJS / Vue Router - 목록 항목에서 상세 페이지 생성? (0) | 2023.01.13 |