MySQL 노드 일반 문제#
다음은 MySQL 노드와 관련된 일반적인 오류 및 문제와 이를 해결하거나 문제를 해결하기 위한 단계입니다.
복합 키로 행 업데이트#
MySQL 노드의 업데이트 작업을 사용하면 일치할 열과 값을 제공하여 테이블의 행을 업데이트할 수 있습니다. 이것은 단일 열 값으로 개별 행을 고유하게 식별할 수 있는 테이블에 적용됩니다.
이 패턴은 복합 키를 사용하는 테이블에서는 사용할 수 없습니다. 이러한 경우 여러 열이 행을 고유하게 식별하는 데 필요합니다. MySQL의 user
테이블은 mysql
데이터베이스에서 user
와 host
열 모두가 행을 고유하게 식별하는 예입니다.
복합 키가 있는 테이블을 업데이트하려면, 대신 Execute SQL 작업으로 쿼리를 수동으로 작성하세요. 여기에서는 customer_id
와 product_id
모두로 일치하는 예를 보여줍니다:
1 |
|
Docker를 사용할 때 로컬 MySQL 서버에 연결할 수 없음#
n8n 또는 MySQL을 Docker에서 실행할 때, n8n이 MySQL에 연결할 수 있도록 네트워크를 구성해야 합니다.
해결책은 두 구성 요소를 호스팅하는 방법에 따라 다릅니다.
MySQL만 Docker에 있는 경우#
MySQL만 Docker에서 실행되는 경우, 컨테이너 내부에서 0.0.0.0
에 바인딩하여 모든 인터페이스에서 수신 대기하도록 MySQL을 구성합니다(공식 이미지가 이미 이렇게 구성되어 있습니다).
컨테이너를 실행할 때 포트를 게시하기 위해 -p
플래그를 사용합니다. 기본적으로 MySQL은 3306 포트에서 실행되므로 Docker 명령은 다음과 같아야 합니다:
1 |
|
MySQL 자격증명을 구성할 때, localhost
주소는 문제 없이 작동해야 합니다( Host를 localhost
로 설정).
n8n만 Docker에 있는 경우#
n8n만 Docker에서 실행되는 경우, 호스트에서 0.0.0.0
에 바인딩하여 MySQL을 모든 인터페이스에서 수신 대기하도록 구성합니다.
Linux에서 Docker로 n8n을 실행하는 경우, 컨테이너를 시작할 때 --add-host
플래그를 사용하여 host.docker.internal
을 host-gateway
로 매핑합니다. 예를 들어:
1 |
|
Docker Desktop을 사용하는 경우, 이것은 자동으로 구성됩니다.
MySQL 자격증명을 구성할 때, Host 주소로 localhost
대신 host.docker.internal
을 사용하세요.
MySQL과 n8n이 별도의 Docker 컨테이너에서 실행되는 경우#
n8n과 MySQL이 별도의 Docker 컨테이너에서 실행되고 있는 경우, Docker 네트워킹을 사용하여 이들을 연결할 수 있습니다.
MySQL을 컨테이너 내부에서 0.0.0.0
에 바인딩하여 모든 인터페이스에서 수신 대기하도록 구성합니다(공식 이미지가 이미 이렇게 구성되어 있습니다). MySQL과 n8n 컨테이너를 동일한 사용자 정의 브리지 네트워크에 추가하세요.
MySQL 자격증명을 구성할 때, Host 주소로 localhost
대신 MySQL 컨테이너의 이름을 사용하세요. 예를 들어 MySQL 컨테이너를 my-mysql
이라고 부르면, Host를 my-mysql
로 설정합니다.
MySQL과 n8n이 동일한 Docker 컨테이너에서 실행되는 경우#
MySQL과 n8n이 동일한 Docker 컨테이너에서 실행되는 경우, localhost
주소는 특별한 구성 없이 사용할 수 있습니다. MySQL을 localhost
에서 수신 대기하도록 구성하고 n8n의 MySQL 자격 증명에서 Host를 localhost
로 사용하는 것으로 설정할 수 있습니다.
문자열로 반환된 소수점 숫자#
기본적으로 MySQL 노드는 DECIMAL
값을 문자열로 반환합니다. 이는 JavaScript가 숫자를 표현하는 방식의 한계로 인해 발생할 수 있는 정밀도 손실을 피하기 위해 의도적으로 설계되었습니다. n8n에서 사용하는 MySQL 라이브러리의 문서에서 이러한 결정에 대해 더 알아볼 수 있습니다.
소수 값을 문자열 대신 숫자로 출력하고 정밀도 손실 위험을 무시하려면 Output Decimals as Numbers 옵션을 활성화하세요. 이렇게 하면 값이 문자열 대신 숫자로 출력됩니다.
대안으로, MySQL 노드 이후에 toFloat()
함수를 사용하여 문자열에서 소수로 수동 변환할 수 있으며, toFixed()
와 함께 사용하거나 Edit Fields (Set) 노드를 사용할 수 있습니다. 여전히 정밀도 손실 가능성을 고려해야 할 수도 있습니다.