Skip to main content

MySQL Overview

The MYSQL route stores MQTT messages in MySQL databases. It supports SSL connections, parameterized queries, and automatic reconnection for reliable data persistence.
MySQL is ideal for web applications and general-purpose data storage. Its wide ecosystem support makes it a reliable choice for most IoT data persistence needs.

Basic Syntax


Connection Configuration

SQL_CONFIG Parameters

SERVER
string
required
MySQL server hostname or IP address.
DATABASE
string
required
Target database name.
USERNAME
string
required
Database username.
PASSWORD
string
required
Database password.
PORT
integer
MySQL port. Default: 3306.
USE_SSL
boolean
Enable SSL connection. Default: false.
CONNECTION_TIMEOUT
integer
Connection timeout in seconds. Default: 30.
Never hardcode credentials in production. Use environment variables and encrypted secrets to keep sensitive values out of your route definitions:
See Environment Variables & Secrets for setup and usage.

Event Configuration

EVENT Parameters

SOURCE_TOPIC
string
required
MQTT topic pattern that triggers the INSERT. Supports wildcards.
QUERY
string
required
SQL INSERT statement with placeholders for dynamic values.
DESTINATION_TOPIC
string
MQTT topic to publish query result status.

Query Placeholders


Writing Data

Store sensor readings with timestamps:
Alternative: STORE IN with Models — Instead of writing EVENT queries, you can bind a model directly to this route. Every PUBLISH MODEL call automatically inserts a row — no query needed:
See Data Storage Overview for the full STORE IN workflow.

Reading Data

EVENTs also support SELECT queries to read data back from the database. Publish a message to the event’s SOURCE_TOPIC, and the query result is published to DESTINATION_TOPIC:
To trigger this query, publish the sensor ID to the source topic:
The query result is published to db/result/latest, where your actions or external clients can consume it.

Timed Polling

EVENTs can also run SELECT queries on a fixed schedule using WITH EVERY:

Table Schema Examples


Troubleshooting

  • Verify SERVER and PORT are correct
  • Check MySQL is running and accepting connections
  • Verify firewall allows connections on port 3306
  • Check bind-address in MySQL configuration
  • Verify USERNAME and PASSWORD are correct
  • Check user has permissions on the DATABASE
  • Verify user can connect from your host
  • Check placeholder names match topic structure
  • Verify table and column names exist
  • Test query manually in MySQL client first

Next Steps

Data Storage Routes Overview

Compare all storage options.

MariaDB Route

Configure MariaDB storage (MySQL-compatible).
Last modified on May 22, 2026