InfoGrab Docs

MySQL 노드 일반 문제

요약

다음은 MySQL 노드에서 자주 발생하는 오류와 문제, 그리고 해결 또는 문제 해결 단계입니다. MySQL 노드의 Update 작업을 사용하면 Column to Match On과 값을 제공하여 테이블의 행을 업데이트할 수 있습니다.

다음은 MySQL 노드에서 자주 발생하는 오류와 문제, 그리고 해결 또는 문제 해결 단계입니다.

복합 키로 행 업데이트#

MySQL 노드의 Update 작업을 사용하면 Column to Match On과 값을 제공하여 테이블의 행을 업데이트할 수 있습니다. 이는 단일 컬럼 값으로 개별 행을 고유하게 식별할 수 있는 테이블에서 작동합니다.

여러 컬럼이 필요한 행을 고유하게 식별하는 복합 키를 사용하는 테이블에서는 이 패턴을 사용할 수 없습니다. 예를 들어 mysql 데이터베이스의 MySQL user 테이블은 행을 고유하게 식별하려면 userhost 컬럼이 모두 필요합니다.

복합 키가 있는 테이블을 업데이트하려면 Execute SQL 작업을 사용하여 쿼리를 수동으로 작성하세요. 다음 예시처럼 customer_idproduct_id 모두에 여러 값을 일치시킬 수 있습니다:

UPDATE orders SET quantity = 3 WHERE customer_id = 538 AND product_id = 800;

Docker 사용 시 로컬 MySQL 서버에 연결할 수 없음#

n8n 또는 MySQL 중 하나를 Docker에서 실행할 때, n8n이 MySQL에 연결할 수 있도록 네트워크를 구성해야 합니다.

해결 방법은 두 구성 요소를 호스팅하는 방식에 따라 다릅니다.

MySQL만 Docker에서 실행하는 경우#

MySQL만 Docker에서 실행 중인 경우, 컨테이너 내부에서 0.0.0.0에 바인딩하여 MySQL이 모든 인터페이스에서 수신 대기하도록 구성하세요(공식 이미지는 이미 이렇게 구성되어 있습니다).

컨테이너를 실행할 때 -p 플래그를 사용하여 포트를 게시하세요. MySQL은 기본적으로 포트 3306에서 실행되므로 Docker 명령은 다음과 같아야 합니다:

docker run -p 3306:3306 --name my-mysql -d mysql:latest

MySQL credentials를 구성할 때 localhost 주소는 문제 없이 작동합니다(Hostlocalhost로 설정).

n8n만 Docker에서 실행하는 경우#

n8n만 Docker에서 실행 중인 경우, 호스트에서 0.0.0.0에 바인딩하여 MySQL이 모든 인터페이스에서 수신 대기하도록 구성하세요.

Linux에서 Docker로 n8n을 실행 중인 경우, 컨테이너를 시작할 때 --add-host 플래그를 사용하여 host.docker.internalhost-gateway에 매핑하세요. 예:

docker run -it --rm --add-host host.docker.internal:host-gateway --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

Docker Desktop을 사용 중인 경우 자동으로 구성됩니다.

MySQL credentials를 구성할 때 Host 주소로 localhost 대신 host.docker.internal을 사용하세요.

MySQL과 n8n이 별도의 Docker 컨테이너에서 실행되는 경우#

n8n과 MySQL이 모두 별도의 컨테이너에서 Docker로 실행 중인 경우, Docker 네트워킹을 사용하여 연결할 수 있습니다.

컨테이너 내부에서 0.0.0.0에 바인딩하여 MySQL이 모든 인터페이스에서 수신 대기하도록 구성하세요(공식 이미지는 이미 이렇게 구성되어 있습니다). MySQL과 n8n 컨테이너를 동일한 사용자 정의 브리지 네트워크에 추가하세요.

MySQL credentials를 구성할 때 localhost 대신 MySQL 컨테이너 이름을 호스트 주소로 사용하세요. 예를 들어 MySQL 컨테이너 이름이 my-mysql인 경우 Hostmy-mysql로 설정합니다.

MySQL과 n8n이 동일한 Docker 컨테이너에서 실행되는 경우#

MySQL과 n8n이 동일한 Docker 컨테이너에서 실행 중인 경우, localhost 주소는 특별한 구성이 필요하지 않습니다. MySQL이 localhost에서 수신 대기하도록 구성하고 n8n의 MySQL credentials에서 Hostlocalhost로 설정할 수 있습니다.

소수점 숫자가 문자열로 반환됨#

기본적으로 MySQL 노드는 DECIMAL을 문자열로 반환합니다. 이는 JavaScript의 숫자 표현 방식의 한계로 인한 정밀도 손실을 방지하기 위해 의도적으로 설계된 것입니다. n8n이 사용하는 MySQL 라이브러리 문서에서 이 결정에 대해 자세히 알아볼 수 있습니다.

정밀도 손실 위험을 무시하고 소수점 값을 문자열 대신 숫자로 출력하려면 Output Decimals as Numbers 옵션을 활성화하세요. 이 옵션을 켜면 값이 문자열 대신 숫자로 출력됩니다.

대안으로, MySQL 노드 이후에 Edit Fields (Set) 노드를 사용하거나 toFloat() 함수와 toFixed()를 사용하여 문자열에서 소수점으로 수동 변환할 수 있습니다. 이 경우에도 정밀도 손실 가능성을 고려해야 합니다.

MySQL 노드 일반 문제

원문 보기
요약

다음은 MySQL 노드에서 자주 발생하는 오류와 문제, 그리고 해결 또는 문제 해결 단계입니다. MySQL 노드의 Update 작업을 사용하면 Column to Match On과 값을 제공하여 테이블의 행을 업데이트할 수 있습니다.

다음은 MySQL 노드에서 자주 발생하는 오류와 문제, 그리고 해결 또는 문제 해결 단계입니다.

복합 키로 행 업데이트#

MySQL 노드의 Update 작업을 사용하면 Column to Match On과 값을 제공하여 테이블의 행을 업데이트할 수 있습니다. 이는 단일 컬럼 값으로 개별 행을 고유하게 식별할 수 있는 테이블에서 작동합니다.

여러 컬럼이 필요한 행을 고유하게 식별하는 복합 키를 사용하는 테이블에서는 이 패턴을 사용할 수 없습니다. 예를 들어 mysql 데이터베이스의 MySQL user 테이블은 행을 고유하게 식별하려면 userhost 컬럼이 모두 필요합니다.

복합 키가 있는 테이블을 업데이트하려면 Execute SQL 작업을 사용하여 쿼리를 수동으로 작성하세요. 다음 예시처럼 customer_idproduct_id 모두에 여러 값을 일치시킬 수 있습니다:

UPDATE orders SET quantity = 3 WHERE customer_id = 538 AND product_id = 800;

Docker 사용 시 로컬 MySQL 서버에 연결할 수 없음#

n8n 또는 MySQL 중 하나를 Docker에서 실행할 때, n8n이 MySQL에 연결할 수 있도록 네트워크를 구성해야 합니다.

해결 방법은 두 구성 요소를 호스팅하는 방식에 따라 다릅니다.

MySQL만 Docker에서 실행하는 경우#

MySQL만 Docker에서 실행 중인 경우, 컨테이너 내부에서 0.0.0.0에 바인딩하여 MySQL이 모든 인터페이스에서 수신 대기하도록 구성하세요(공식 이미지는 이미 이렇게 구성되어 있습니다).

컨테이너를 실행할 때 -p 플래그를 사용하여 포트를 게시하세요. MySQL은 기본적으로 포트 3306에서 실행되므로 Docker 명령은 다음과 같아야 합니다:

docker run -p 3306:3306 --name my-mysql -d mysql:latest

MySQL credentials를 구성할 때 localhost 주소는 문제 없이 작동합니다(Hostlocalhost로 설정).

n8n만 Docker에서 실행하는 경우#

n8n만 Docker에서 실행 중인 경우, 호스트에서 0.0.0.0에 바인딩하여 MySQL이 모든 인터페이스에서 수신 대기하도록 구성하세요.

Linux에서 Docker로 n8n을 실행 중인 경우, 컨테이너를 시작할 때 --add-host 플래그를 사용하여 host.docker.internalhost-gateway에 매핑하세요. 예:

docker run -it --rm --add-host host.docker.internal:host-gateway --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

Docker Desktop을 사용 중인 경우 자동으로 구성됩니다.

MySQL credentials를 구성할 때 Host 주소로 localhost 대신 host.docker.internal을 사용하세요.

MySQL과 n8n이 별도의 Docker 컨테이너에서 실행되는 경우#

n8n과 MySQL이 모두 별도의 컨테이너에서 Docker로 실행 중인 경우, Docker 네트워킹을 사용하여 연결할 수 있습니다.

컨테이너 내부에서 0.0.0.0에 바인딩하여 MySQL이 모든 인터페이스에서 수신 대기하도록 구성하세요(공식 이미지는 이미 이렇게 구성되어 있습니다). MySQL과 n8n 컨테이너를 동일한 사용자 정의 브리지 네트워크에 추가하세요.

MySQL credentials를 구성할 때 localhost 대신 MySQL 컨테이너 이름을 호스트 주소로 사용하세요. 예를 들어 MySQL 컨테이너 이름이 my-mysql인 경우 Hostmy-mysql로 설정합니다.

MySQL과 n8n이 동일한 Docker 컨테이너에서 실행되는 경우#

MySQL과 n8n이 동일한 Docker 컨테이너에서 실행 중인 경우, localhost 주소는 특별한 구성이 필요하지 않습니다. MySQL이 localhost에서 수신 대기하도록 구성하고 n8n의 MySQL credentials에서 Hostlocalhost로 설정할 수 있습니다.

소수점 숫자가 문자열로 반환됨#

기본적으로 MySQL 노드는 DECIMAL을 문자열로 반환합니다. 이는 JavaScript의 숫자 표현 방식의 한계로 인한 정밀도 손실을 방지하기 위해 의도적으로 설계된 것입니다. n8n이 사용하는 MySQL 라이브러리 문서에서 이 결정에 대해 자세히 알아볼 수 있습니다.

정밀도 손실 위험을 무시하고 소수점 값을 문자열 대신 숫자로 출력하려면 Output Decimals as Numbers 옵션을 활성화하세요. 이 옵션을 켜면 값이 문자열 대신 숫자로 출력됩니다.

대안으로, MySQL 노드 이후에 Edit Fields (Set) 노드를 사용하거나 toFloat() 함수와 toFixed()를 사용하여 문자열에서 소수점으로 수동 변환할 수 있습니다. 이 경우에도 정밀도 손실 가능성을 고려해야 합니다.