From b3883fcb54cd675152ea0e869f64274688465cc3 Mon Sep 17 00:00:00 2001 From: Justin Ellingwood Date: Wed, 4 Dec 2024 15:43:01 +0000 Subject: [PATCH] Add common issues to MySQL node (#2678) --- .../n8n-nodes-base.mysql/common-issues.md | 75 +++++++++++++++++++ .../index.md} | 4 + mkdocs.yml | 4 +- 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 docs/integrations/builtin/app-nodes/n8n-nodes-base.mysql/common-issues.md rename docs/integrations/builtin/app-nodes/{n8n-nodes-base.mysql.md => n8n-nodes-base.mysql/index.md} (93%) diff --git a/docs/integrations/builtin/app-nodes/n8n-nodes-base.mysql/common-issues.md b/docs/integrations/builtin/app-nodes/n8n-nodes-base.mysql/common-issues.md new file mode 100644 index 000000000..5dfb83d66 --- /dev/null +++ b/docs/integrations/builtin/app-nodes/n8n-nodes-base.mysql/common-issues.md @@ -0,0 +1,75 @@ +--- +#https://www.notion.so/n8n/Frontmatter-432c2b8dff1f43d4b1c8d20075510fe4 +title: MySQL node common issues +description: Documentation for common issues and questions in the MySQL node in n8n, a workflow automation platform. Includes details of the issue and suggested solutions. +contentType: integration +priority: high +--- + +# MySQL node common issues + +Here are some common errors and issues with the [MySQL node](/integrations/builtin/app-nodes/n8n-nodes-base.mysql/) and steps to resolve or troubleshoot them. + +## Update rows by composite key + +The MySQL node's **Update** operation lets you to update rows in a table by providing a **Column to Match On** and a value. This works for tables where single column values can uniquely identify individual rows. + +You can't use this pattern for tables that use [composite keys](https://en.wikipedia.org/wiki/Composite_key), where you need multiple columns to uniquely identify a row. A example of this is MySQL's [`user` table](https://mariadb.com/kb/en/mysql-user-table/) in the `mysql` database, where you need both the `user` and `host` columns to uniquely identify rows. + +To update tables with composite keys, write the query manually with the **Execute SQL** operation instead. There, you can match on multiple values, like in this example which matches on both `customer_id` and `product_id`: + +```sql +UPDATE orders SET quantity = 3 WHERE customer_id = 538 AND product_id = 800; +``` + +## Can't connect to a local MySQL server when using Docker + +When you run either n8n or MySQL in Docker, you need to configure the network so that n8n can connect to MySQL. + +The solution depends on how you're hosting the two components. + +### If only MySQL is in Docker + +If only MySQL is running in Docker, configure MySQL to listen on all interfaces by binding to `0.0.0.0` inside of the container (the official images are already configured this way). + +When running the container, [publish the port](https://docs.docker.com/get-started/docker-concepts/running-containers/publishing-ports/) with the `-p` flag. By default, MySQL runs on port 3306, so your Docker command should look like this: + +```shell +docker run -p 3306:3306 --name my-mysql -d mysql:latest +``` + +When configuring [MySQL credentials](/integrations/builtin/credentials/mysql/), the `localhost` address should work without a problem (set the **Host** to `localhost`). + +### If only n8n is in Docker + +If only n8n is running in Docker, configure MySQL to listen on all interfaces by binding to `0.0.0.0` on the host. + +If you are running n8n in Docker on **Linux**, use the `--add-host` flag to map `host.docker.internal` to `host-gateway` when you start the container. For example: + +```shell +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 +``` + +If you are using Docker Desktop, this is automatically configured for you. + +When configuring [MySQL credentials](/integrations/builtin/credentials/mysql/), use `host.docker.internal` as the **Host** address instead of `localhost`. + +### If MySQL and n8n are running in separate Docker containers + +If both n8n and MySQL are running in Docker in separate containers, you can use Docker networking to connect them. + +Configure MySQL to listen on all interfaces by binding to `0.0.0.0` inside of the container (the official images are already configured this way). Add both the MySQL and n8n containers to the same [user-defined bridge network](https://docs.docker.com/engine/network/drivers/bridge/). + +When configuring [MySQL credentials](/integrations/builtin/credentials/mysql/), use the MySQL container's name as the host address instead of `localhost`. For example, if you call the MySQL container `my-mysql`, you would set the **Host** to `my-mysql`. + +### If MySQL and n8n are running in the same Docker container + +If MySQL and n8n are running in the same Docker container, the `localhost` address doesn't need any special configuration. You can configure MySQL to listen on `localhost` and configure the **Host** in the [MySQL credentials in n8n](/integrations/builtin/credentials/ollama/) to use `localhost`. + +## Decimal numbers returned as strings + +By default, the MySQL node returns [`DECIMAL` values](https://dev.mysql.com/doc/refman/8.4/en/fixed-point-types.html) as strings. This is done intentionally to avoid loss of precision that can occur due to limitation with the way JavaScript represents numbers. You can learn more about the decision in the documentation for the [MySQL library](https://sidorares.github.io/node-mysql2/docs/api-and-configurations) that n8n uses. + +To output decimal values as numbers instead of strings and ignore the risks in loss of precision, enable the **Output Decimals as Numbers** option. This will output the values as numbers instead of strings. + +As an alternative, you can manually convert from the string to a decimal using the [`toFloat()` function](/code/builtin/data-transformation-functions/strings/#string-toFloat) with [`toFixed()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) or with the [Edit Fields (Set) node](/integrations/builtin/core-nodes/n8n-nodes-base.set/) after the MySQL node. Be aware that you may still need to account for a potential loss of precision. diff --git a/docs/integrations/builtin/app-nodes/n8n-nodes-base.mysql.md b/docs/integrations/builtin/app-nodes/n8n-nodes-base.mysql/index.md similarity index 93% rename from docs/integrations/builtin/app-nodes/n8n-nodes-base.mysql.md rename to docs/integrations/builtin/app-nodes/n8n-nodes-base.mysql/index.md index c666edaac..db3dc7c65 100644 --- a/docs/integrations/builtin/app-nodes/n8n-nodes-base.mysql.md +++ b/docs/integrations/builtin/app-nodes/n8n-nodes-base.mysql/index.md @@ -69,3 +69,7 @@ Then in **Query Parameters**, provide the field values to use. You can provide f // users is an example table name users, {{ $json.email }} ``` + +## Common issues + +For common errors or issues and suggested resolution steps, refer to [Common issues](/integrations/builtin/app-nodes/n8n-nodes-base.mysql/common-issues/). diff --git a/mkdocs.yml b/mkdocs.yml index f8de8b61c..94ae85c33 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -608,7 +608,9 @@ nav: - Monica CRM: integrations/builtin/app-nodes/n8n-nodes-base.monicacrm.md - MQTT: integrations/builtin/app-nodes/n8n-nodes-base.mqtt.md - MSG91: integrations/builtin/app-nodes/n8n-nodes-base.msg91.md - - MySQL: integrations/builtin/app-nodes/n8n-nodes-base.mysql.md + - MySQL: + - MySQL: integrations/builtin/app-nodes/n8n-nodes-base.mysql/index.md + - Common issues: integrations/builtin/app-nodes/n8n-nodes-base.mysql/common-issues.md - Customer Datastore (n8n Training): integrations/builtin/app-nodes/n8n-nodes-base.n8ntrainingcustomerdatastore.md - Customer Messenger (n8n Training): integrations/builtin/app-nodes/n8n-nodes-base.n8ntrainingcustomermessenger.md - NASA: integrations/builtin/app-nodes/n8n-nodes-base.nasa.md