Django 기본 분리 수준 및 DB 이진 로그 형식 오류
제가 지금 검사를 하고 있는데요django
웹 서버사용pytest-django
. 트래비스에 대한 테스트/CI에서 MySQL 데이터베이스 서버에서 MariaDB로 전환하려고 합니다. 이를 위해mysqldb
python 패키지를 에pymysql
.
MariaDB를 사용할 때 갑자기 모든 데이터베이스 관련 테스트에 대해 이상한 예외가 발생합니다.
pymysql.err.내부 오류: (1665, '문을 실행할 수 없음: BINLOG_FORMAT = STATEMENT이므로 이진 로그에 쓸 수 없으며 하나 이상의 테이블이 행 기반 로깅으로 제한된 저장 엔진을 사용합니다.InnoDB는 트랜잭션 분리 수준이 READ COMITED 또는 READ UNCOMITED'인 경우 행 로깅으로 제한됩니다.
이 예외는 해당 작업에 대한 모든 테스트에서 몇 가지 예외 사항이 포함되어 있지만, 문제의 근본 원인으로 파악했습니다.
travis에서 직접 테스트 스위트를 실행하는 두 가지 작업과 도커(내부 travis)에서 실행하는 다른 작업 중 python 3.6에서 실행하는 작업 중 하나만 실패합니다.
문제의 원인을 대략적으로 이해하고는 있지만, 세부 사항에 대한 많은 정보를 찾을 수 없었고, 갑자기 문제가 발생/발현되는 이유도 찾을 수 없었습니다.이번 장고 문서 문제는 제외하고요.
python3 test job과 django2 dropout python2 지원에 대해서만 트리거가 되는 것을 고려하면 문제가 관련이 있다고 생각하지만 여전히 합리적인/적절한 솔루션을 찾을 수 없는 것 같습니다.여기서 무슨 일이 일어나고 있는지에 대한 원인과 근거를 적어도 일부는 놓치고 있는 것 같습니다.
데이터베이스 구성을 변경하지 않았고 모든 서비스가 기본 설치로 실행되고 있습니다.
참고로, 중요한 걸 놓쳤을 때를 대비해서 홍보를 위한 트래비스 작업입니다.
TL;DR: MariaDB의 최신 버전을 설치하면 문제가 해결되었습니다.
이 문제에 대한 자세한 내용을 읽어보니 근본 원인이 실제로 환경 내 두 기본 구성 간의 충돌 때문이라는 것을 확인할 수 있었습니다.
BINLOG_FORMAT = STATEMENT
.MariaDB의 문서에 따르면 버전 10.2.4까지는 MariaDB의 기본값이었습니다.트래비스-CI를 사용한 이후로 그리고 트래비스에서 마리아DB를 사용한 방법 때문에CI가 문서화된 버전 10.0은 하드코딩되었으며 따라서 기본값은 위의 값으로 설정되었습니다.
이 됩니다(으)로되었습니다.
READ COMMITTED
이 Python3 Django> 2.0
READ COMMITTED
장고의 기록에 의하면이 구성이 더 안전한 기본값인 것 같습니다.
예제 travis mariadb 스니펫에서 major/minor 버전 문자열 바꾸기:
addons:
- mariadb: '10.0'
이 인 경우'10.3'
한 트래비스이나 MariaDB다를 트래비스를 보다 또는 하도록 했습니다. 이것은 보다 유연한 것으로 기본 설정되었습니다.BINLOG_FORMAT = MIXED
배열.
# config as this way, add options
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'xxx',
'USER': 'xx',
'PASSWORD': 'xx',
'HOST': 'xxx',
'POST': 'xxx',
'OPTIONS': {
'isolation_level': "repeatable read"
},
},
}
언급URL : https://stackoverflow.com/questions/51384863/django-default-isolation-level-and-db-binary-log-format-error
'programing' 카테고리의 다른 글
생성된 d3 html에서 angularjs directives를 어떻게 사용합니까? (0) | 2023.10.02 |
---|---|
PowerShell 스크립트에서 shebang을 사용하려면 어떻게 해야 합니까? (0) | 2023.10.02 |
PHP/Oracle:시간표시 (0) | 2023.10.02 |
디브 내에서 높이가 가변되는 콘텐츠를 수직으로 중심을 맞추는 방법은? (0) | 2023.10.02 |
각 js 단위의 검색 상자 (0) | 2023.10.02 |