Does MySQL Work With Netlify?
You can use MySQL with Netlify, but only through external hosting or serverless functions—Netlify doesn't provide managed MySQL databases.
Quick Facts
How MySQL Works With Netlify
Netlify doesn't host databases directly; it's a platform for frontend deployments and serverless functions. To use MySQL, you'll need to host it separately (AWS RDS, PlanetScale, Railway, or self-managed) and connect from Netlify Functions or external API endpoints. Your Netlify Functions act as a backend layer, connecting to your remote MySQL instance via connection strings stored in environment variables. This is actually a solid architecture pattern—your database lives independently while Netlify handles your frontend and lightweight serverless logic. The developer experience is straightforward: store database credentials in Netlify's environment variables, query MySQL from Node.js functions using libraries like `mysql2`, and expose REST/GraphQL endpoints. The main consideration is cold starts on functions (which can slow first requests) and connection pooling—you'll want to use a library that supports connection pooling since Netlify Functions scale horizontally and create many database connections.
Best Use Cases
Quick Setup
npm install mysql2/promise// netlify/functions/getUsers.js
const mysql = require('mysql2/promise');
const pool = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
waitForConnections: true,
connectionLimit: 5,
queueLimit: 0
});
exports.handler = async (event) => {
try {
const connection = await pool.getConnection();
const [rows] = await connection.query('SELECT * FROM users LIMIT 10');
connection.release();
return {
statusCode: 200,
body: JSON.stringify(rows)
};
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify({ error: error.message })
};
}
};Known Issues & Gotchas
Database connections from Netlify Functions can exhaust MySQL connection limits due to each function instance creating new connections
Fix: Use a connection pooling library like `mysql2/promise` with pool configuration, or use a serverless database proxy like PlanetScale that handles pooling
Environment variables with database credentials must be set in Netlify dashboard; they won't sync automatically from .env files in production
Fix: Use Netlify UI or CLI to set secrets. Never commit credentials to git. Use `netlify env:set` command in CI/CD pipelines
Cold starts on Netlify Functions (especially first request) combined with MySQL connection latency can cause noticeable delays
Fix: Use a persistent connection pool, cache frequently accessed data, or consider always-on services like Railway for lower latency
Free tier Netlify Function timeouts are 10 seconds; complex MySQL queries might exceed this
Fix: Optimize queries, use pagination, or upgrade to paid tier for 26-second timeouts
Alternatives
- •Vercel + PostgreSQL (Vercel Postgres) — tighter integration with managed database, but Vercel-specific
- •Firebase/Firestore + Netlify — fully managed NoSQL backend, simpler for serverless, less powerful for relational queries
- •Supabase + Netlify — managed PostgreSQL with real-time APIs, modern alternative to MySQL with better serverless support
Resources
Related Compatibility Guides
Explore more compatibility guides