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
'programing' 카테고리의 다른 글
JavaScript를 사용하여 여러 키를 동시에 눌렀는지 어떻게 검출합니까? (0) | 2022.09.22 |
---|---|
int[] 어레이와 int 어레이의 차이[] (0) | 2022.09.15 |
연관지을 수 있는 어레이에서 키와 그 값을 삭제하려면 어떻게 해야 합니까? (0) | 2022.09.15 |
Javascript V8 속도를 얻기 위해 Ruby, Python을 차단하는 것은 무엇입니까? (0) | 2022.09.15 |
python 'type' 개체를 문자열로 변환합니다. (0) | 2022.09.15 |