programing

sql-mode=를 만드는 방법"MySQL my.cnf에서 NO_ENGINE_SUBTITION" 영속적

minecode 2022. 9. 15. 22:18
반응형

sql-mode=를 만드는 방법"MySQL my.cnf에서 NO_ENGINE_SUBTITION" 영속적

업데이트 수정 1/18/15

최근 Ubuntu repo에서 MySQL 5.6.27로 업데이트한 후 이 옵션이 작동합니다.이전 버전의 MySQL에서 문제가 발생한 것 같습니다.

첫 번째 질문

MySQL(5.6.20)로의 새로운 업그레이드에서는 sql-mode를 NO_ENGINE_SUBSTITION으로 설정하지 않으면 업데이트 및 삽입이 실패합니다.

문서 덕분에 mysql 단말기에서 다음 작업을 수행할 수 있으며 문제를 일시적으로 해결할 수 있습니다.

SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';`

그러나 다음에 MySQL을 다시 시작하면 이러한 설정이 손실됩니다.

따라서 /etc/mysql/my.cnf(Ubuntu 12.04.5 LTS를 실행하고 있는 표준 서버에서)를 편집하여 매뉴얼에 기재되어 있는 설정값을 추가하여 이 설정을 영속적으로 유지하려고 합니다.

[mysqld]
sql-mode="NO_ENGINE_SUBSTITUTION"

테스트용 대체 구문

테스트 목적으로 다음과 같은 형식도 시도해 보았습니다(MySQL 재부팅 시 오류는 발생하지 않지만 설정에 영향을 주지 않습니다).

# dash no quotes
sql-mode=NO_ENGINE_SUBSTITUTION
# underscore no quotes
sql_mode=NO_ENGINE_SUBSTITUTION
# underscore and quotes
sql_mode="NO_ENGINE_SUBSTITUTION"

아무것도 안 돼.재시작 후 이 설정이 손실되어 저장을 다시 수행하려면 mysql 터미널에서 수동으로 명령을 다시 실행해야 합니다.

대체 장소

  • 이 파일에는 리플리케이션이 정의되어 있고 동작하고 있기 때문에 /etc/mysql/my.cnf가 참조되고 있는 것을 알고 있습니다.
  • 이 파일에는 덮어쓰는 다른 동일한 설정이 없습니다.

명령줄에서 다음 명령을 실행하여 참조되는 설정 파일 목록을 가져옵니다.

mysqld --help --verbose

다음과 같은 행이 표시됩니다.

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 

이것은 디폴트 로케이션으로 파일을 「검색」하고 있습니다.실제로 거기서 파일을 검출한 것은 아닙니다.예를 들어, 서버에 파일이 없습니다./etc/my.cnf,/usr/etc/my.cnf또는~/.my.cnf.

따라서 /etc/mysql/my.cnf의 설정이 mysql 파일만 참조하고 있는 것 같습니다.따라서 이 설정은 덮어쓰지 않습니다.

테스트의 논리적 결론

논리적으로는 구문이 올바르지 않거나 다른 이유로 무시되고 있는 것 같습니다.다른 생각 있나요?

혼합에 구성을 추가하기 위해 기본적으로 엄격한 sql_mode 규칙이 동일한 MySQL 5.7.8을 사용하고 있습니다.

  • 드디어 /etc/mysql/my.conf에서 다음 작업을 할 수 있게 되었습니다.

    [mysqld]
    sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
    

즉, 밑줄과 따옴표가 아닌 대시로 값을 묶습니다.

  • /etc/mysql/my.conf 이외의 my.conf 파일은 없습니다.

  • /etc/mysql/conf.d/에서 로드되는 추가 구성이 있지만 비어 있습니다.

그리고 그것은 나에게 효과가 있는 것 같다.

서버에 따라 판독값이 다를 수 있습니다.my.cnf(mysqld를 시작할 때 지정한 경우를 제외하고) 편집 중인 항목보다 더 많은 값을 사용할 수 있습니다.

MySQL 인증 스터디 가이드:

검색 순서에는 2개의 일반 옵션파일이 포함되어 있습니다./etc/my.cnf그리고.$MYSQL_HOME/my.cnf두 번째 파일은 다음 경우에만 사용됩니다.MYSQL_HOME환경변수가 설정됩니다.일반적으로 MySQL 설치 디렉토리에 설치합니다.(mysqld_safe 스크립트는 다음 설정을 시도합니다.MYSQL_HOME설정되어 있지 않은 경우는, 서버를 기동합니다).옵션 파일 검색 순서에는 다음과 같은 것도 포함됩니다.~/.my.cnf(이것은 홈 디렉토리입니다).서버 옵션에는 특별히 적합한 위치가 아닙니다.(일반적으로 서버를 호출합니다)mysql또는 로서root와 함께--user=mysql선택.서버에 의해서 읽혀지는 사용자 고유의 파일은, 어느 로그인 어카운트에서 기동하는가에 의해서 다릅니다.따라서, 사용하는 옵션의 세트에 일관성이 없는 경우가 있습니다).

또 다른 가능성은 물론, 그 사람이sql-mode옵션은 같은 파일에서 더 아래로 덮어씁니다.여러 옵션을 다음과 같이 구분해야 합니다.,같은 줄에

추신: 그리고 당신은 IIRC 견적이 필요합니다.이제 따옴표 없이 시도해보니 잘못된 파일을 편집하고 있는 것 같습니다. 옵션 파일에 오류가 있을 때 MySQL이 시작되지 않기 때문입니다.

P.P.S.: 내 설정 파일을 다시 보니

[mysqld]
sql_mode = "NO_ENGINE_SUBSTITUTION"

효과가 있어요

다음 중 하나여야 합니다.

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

대신

[mysqld]
sql_mode="NO_ENGINE_SUBSTITUTION"

mysqld 서비스를 재시작합니다.

ubuntu 16.04. 경로: /etc/mysql/mysql.cnf에서는 문제가 없습니다.

붙여서

[mysqld]
#
# * Basic Settings
#
sql_mode = "NO_ENGINE_SUBSTITUTION"

나에게 그것은 허가 문제였다.

다음과 같이 입력합니다.

mysqld --verbose --help | grep -A 1 "Default options"

[경고] 월드 쓰기 가능한 구성 파일 '/etc/mysql/my.cnf'는 무시됩니다.

따라서 다음 작업을 수행한 후 서버를 재시작합니다.

chmod 644 '/etc/mysql/my.cnf'

그러면 파일에 대한 읽기 및 쓰기에 대한 mysql 액세스 권한이 부여됩니다.

Linux Mint 18 에서는, 다음의 디폴트 설정 파일이 있습니다.sql-mode옵션 세트는 다음 위치에 있습니다.

/usr/my.cnf

관련 행은 다음과 같습니다.

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

거기 세팅해 주세요.

어떤 구성 파일에 이러한 옵션이 있는지 모를 경우 다음을 검색할 수 있습니다.

$ sudo find / -iname "*my.cnf*"

목록 보기:

/var/lib/dpkg/alternatives/my.cnf
/usr/my.cnf
/etc/alternatives/my.cnf
/etc/mysql/my.cnf.fallback
/etc/mysql/my.cnf

5.7.20의 옵션 사이에 공백이 있는 것이 문제였습니다.라인은 다음과 같이 되어 있습니다.

[mysqld]
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

해답은 꽤 간단합니다.잠시 검색한 결과, 2개의 설정 파일만 편집하면 되는 것으로 나타났습니다.

  • /usr/my.cnf
  • /etc/mysql/my.cnf

다음 파일을 추가해야 합니다.

[mysqld]
...
sql_mode=NO_ENGINE_SUBSTITUTION

적어도 5.6.24-2+deb에서는 그렇게 동작하고 있습니다.sury.org~http+2

에겐 두 가지 열쇠 모두sql-mode일했다.사용 여부

# dash no quotes
sql-mode=NO_ENGINE_SUBSTITUTION

또는

# underscore no quotes
sql_mode=NO_ENGINE_SUBSTITUTION

에서my.ini파일에는 차이가 없었고 둘 다 승인되었습니다. 제가 테스트할 수 있는 범위 내에서요.

실제로 차이를 만든 건 뉴라인이 사라졌다는 거예요my.ini파일.

이 문제 또는 이와 유사한 문제를 안고 있는 모든 사람들은my.ini/my.cnf: 파일 끝에 공백 행이 있는지 확인합니다!

MySQL 5.7.27을 사용하여 테스트.

mariadb를 사용하는 경우 /etc/mysql/conf.d/에 있는 mariadb.cnf 파일을 변경해야 합니다.

다른 my-sql 기반 솔루션도 마찬가지라고 생각했습니다.

WHM 10.2.15-MariaDB를 실행하고 있습니다.strict 모드를 영속적으로 디세블로 하려면 , 인스톨이 우선하는 설정 파일을 확인합니다.그러기 위해서는 바이너리의 위치가 필요합니다.

$ which mysqld
/usr/sbin/mysqld

그런 다음 다음 다음 경로를 사용하여 검색을 실행합니다.

$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"

Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

첫 번째 기본 설정 파일은 etc 폴더의 루트에 있지만 두 번째 .cnf 파일인 ~/.my.cnf가 숨겨져 있는 것을 알 수 있습니다.~/.my.cnf 파일에 다음 항목을 추가하면 완전 모드가 영구적으로 비활성화됩니다(mysqld 섹션 내에 있어야 합니다).

[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION

/etc/my.cnf에 행을 추가하는 것은 나를 미치게 하는 것 외에는 전혀 효과가 없다는 것을 알게 되었습니다.

또한 키가 있어야 하는 단락이 [mysql]이 아니라는 것을 깨닫기 전까지는 미칠 것 같았습니다.

10.3.22-MariaDB-1ubuntu1의 경우 솔루션은 /etc/mysql/conf.d/mysql.cnf에 있습니다.

[mysqld]
sql_mode = "ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

[고정] 서버 버전: 10.1.38-MariaDB - mariadb.org 바이너리 배포

C:\xampp\mysql\bin 메모장에서 my.ini를 열고 [mysqld](27행)를 찾은 후 이 행(28행) 뒤에 skip-grant-tables 라고 입력합니다.

파일을 저장하고 phpmyadmin 페이지를 새로고침합니다.그것은 나에게 효과가 있었다.

언급URL : https://stackoverflow.com/questions/28849293/how-to-make-sql-mode-no-engine-substitution-permanent-in-mysql-my-cnf

반응형