InfoGrab DocsInfoGrab Docs

MySQL node 관련 자주 발생하는 문제

요약

MySQL node에서 자주 발생하는 오류 및 문제와 이를 해결하거나 문제를 해결하는 단계를 소개합니다. MySQL node의 Update 작업을 사용하면 Column to Match On과 값을 지정하여 테이블의 행을 업데이트할 수 있습니다.

MySQL node에서 자주 발생하는 오류 및 문제와 이를 해결하거나 문제를 해결하는 단계를 소개합니다.

복합 키로 행 업데이트하기#

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

행을 고유하게 식별하기 위해 여러 칼럼이 필요한 복합 키(composite key)를 사용하는 테이블에는 이 패턴을 사용할 수 없습니다. 예를 들어 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 플래그로 포트를 게시(publish)하세요. MySQL은 기본적으로 3306 포트에서 실행되므로 Docker 명령어는 다음과 같은 형태여야 합니다.

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

MySQL 자격 증명을 구성할 때는 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 자격 증명을 구성할 때는 Host 주소로 localhost 대신 host.docker.internal을 사용하세요.

MySQL과 n8n이 서로 다른 Docker 컨테이너에서 실행 중인 경우#

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

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

MySQL 자격 증명을 구성할 때는 localhost 대신 MySQL 컨테이너의 이름을 호스트 주소로 사용하세요. 예를 들어 MySQL 컨테이너의 이름을 my-mysql이라고 지정했다면 Hostmy-mysql로 설정하면 됩니다.

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

MySQL과 n8n이 동일한 Docker 컨테이너에서 실행 중인 경우, localhost 주소는 별도의 특별한 구성이 필요하지 않습니다. MySQL이 localhost에서 수신 대기하도록 구성하고, n8n의 MySQL 자격 증명에서 Hostlocalhost로 사용하도록 구성하면 됩니다.

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

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

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

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

MySQL node 관련 자주 발생하는 문제

n8n v2.29
원문 보기
요약

MySQL node에서 자주 발생하는 오류 및 문제와 이를 해결하거나 문제를 해결하는 단계를 소개합니다. MySQL node의 Update 작업을 사용하면 Column to Match On과 값을 지정하여 테이블의 행을 업데이트할 수 있습니다.

MySQL node에서 자주 발생하는 오류 및 문제와 이를 해결하거나 문제를 해결하는 단계를 소개합니다.

복합 키로 행 업데이트하기#

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

행을 고유하게 식별하기 위해 여러 칼럼이 필요한 복합 키(composite key)를 사용하는 테이블에는 이 패턴을 사용할 수 없습니다. 예를 들어 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 플래그로 포트를 게시(publish)하세요. MySQL은 기본적으로 3306 포트에서 실행되므로 Docker 명령어는 다음과 같은 형태여야 합니다.

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

MySQL 자격 증명을 구성할 때는 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 자격 증명을 구성할 때는 Host 주소로 localhost 대신 host.docker.internal을 사용하세요.

MySQL과 n8n이 서로 다른 Docker 컨테이너에서 실행 중인 경우#

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

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

MySQL 자격 증명을 구성할 때는 localhost 대신 MySQL 컨테이너의 이름을 호스트 주소로 사용하세요. 예를 들어 MySQL 컨테이너의 이름을 my-mysql이라고 지정했다면 Hostmy-mysql로 설정하면 됩니다.

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

MySQL과 n8n이 동일한 Docker 컨테이너에서 실행 중인 경우, localhost 주소는 별도의 특별한 구성이 필요하지 않습니다. MySQL이 localhost에서 수신 대기하도록 구성하고, n8n의 MySQL 자격 증명에서 Hostlocalhost로 사용하도록 구성하면 됩니다.

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

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

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

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