MySQL 데이터베이스를 사용할 때 가끔 MySQL 기능을 생성할 수 없는 경우가 있습니다. 다음은 참고용으로 MySQL 함수를 생성할 수 없는 문제를 해결하는 방법을 알려줍니다. 그것이 모두에게 도움이 되기를 바랍니다.
사례 1:
현재 프로젝트에서 mysql을 생성하는 함수를 실행하면 오류가 발생합니다.
Mysql 생성 함수 오류 메시지는 다음과 같습니다.
오류 코드: 1227. 액세스가 거부되었습니다. of) 이 작업에 대한 SUPER 권한(들)
생성 기능이 활성화되었는지 확인하는 SQL은 다음과 같습니다.
-- 查看是否开启创建函数的功能 show variables like '%func%'; -- 开启创建函数的功能 set global log_bin_trust_function_creators = 1;
SQL을 실행한 후 확인된 내용은 다음과 같습니다. 그런 다음 귀하의 SQL이 올바르게 작성되었는지 확인하십시오. (SQL은 다른 사람의 SQL이므로) 네, 다른 사람의 환경에서는 괜찮지만 귀하의 환경에서는 가능합니다.
갑자기 자신이 작성한 SQL에 특정 사용자가 있어서 문제가 발생한 것을 발견했습니다. 그의 SQL은 다음과 같습니다.
DROP FUNCTION IF EXISTS `nextval`; DELIMITER ;; CREATE DEFINER=`devop`@`%` FUNCTION `nextval`(`seq_name` VARCHAR(50)) RETURNS varchar(20) CHARSET utf8 BEGIN DECLARE seq_max BIGINT(20); UPDATE sequenceconftable SET `max` = `max` + NEXT WHERE NAME = seq_name; SELECT `max` INTO seq_max FROM sequenceconftable WHERE NAME = seq_name ; RETURN seq_max; END ;; DELIMITER ;
CREATE_FUNCTION 사양으로 인해 DEFINER 매개 변수가 있음을 알 수 있습니다. 데이터베이스 사용자를 지정할 수 있지만 내 라이브러리는 이 사용자가 아니므로 문제가 발생합니다.
이제 문제가 해결되었습니다.
-EOF-
사례 2:
MySQL에서 사용자 정의 함수를 생성할 때 다음 오류가 보고되었습니다.
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
보안 매개변수가 켜져 있지 않기 때문입니다. log_bin_trust_function_creators의 기본값은 0입니다. 기능 동기화를 허용하지 않는 경우 이 매개변수를 활성화하면 생성이 성공합니다.
mysql> show variables like '%fun%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin_trust_function_creators | ON | +---------------------------------+-------+ 1 row in set (0.00 sec) mysql> set global log_bin_trust_function_creators=1; Query OK, 0 rows affected (0.00 sec) mysql> show variables like '%fun%'; +---------------------------------+-------+ | Variable_name | Value | +---------------------------------+-------+ | log_bin_trust_function_creators | ON | +---------------------------------+-------+ 1 row in set (0.00 sec)
이 매개변수가 마스터에서 활성화된 경우 슬레이브 측에서도 이 매개변수를 활성화해야 합니다(저장을 중지했다가 다시 시작해야 함). 그렇지 않으면 마스터에서 기능을 생성하면 복제가 중단됩니다.
사례 3:
오류 코드: 1418
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) (0 ms taken)
분석:
시스템 프롬프트에 따르면 이 오류의 원인은 보안 설정 구성일 수 있습니다. log_bin_trust_function_creators 매개변수의 기본값은 0입니다. 기능을 허용하지 않습니다. 일반적으로 복제본을 구성할 때 이 매개변수에 주의를 기울이는 것을 잊어서 마스터가 기능을 업데이트한 후 슬레이브가 오류를 보고하고 슬레이브가 중지됩니다.
처리 과정:
mysql 데이터베이스에 로그인
> set global log_bin_trust_function_creators = 1; > start slave;
mysql 시작 로그를 추적하면 슬레이브가 정상적으로 실행되고 문제가 해결됩니다.
관련 권장 사항:
mysql-php 데이터베이스 연결 오류, 이유는 무엇입니까
위 내용은 MYSQL 생성 기능 오류 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!