Azure Database for MySQL logo

Managed MySQL speaks MySQL

Connect Azure Database for MySQL to Excel, Sheets and AI

Azure Database for MySQL flexible server, on 3306. The card is built for flexible server and says so where it matters.

1connection
0inbound ports
read-onlyenforced

One connection, every surface

Where your Azure MySQL data can go

Connect Azure MySQL once and the same read-only connection feeds all of these — no second setup, no second copy of the data. 9 of 11 have a step-by-step guide.

Guide

Azure MySQL to Excel

Microsoft Excel · Excel add-in

Pull live Azure MySQL results straight into a worksheet and refresh them on demand — desktop Excel, Excel Online, Microsoft 365.

Read the MySQL guide
Guide

Azure MySQL to Google Sheets

Sheets add-on

Run a saved Azure MySQL query from the sidebar and drop the rows into the sheet. Shared collaborators can refresh it themselves.

Read the MySQL guide
Guide

Azure MySQL MCP server

Claude, Cursor and MCP clients

Give an AI assistant read-only access to Azure MySQL with the schema it needs to write correct SQL — no credentials in the chat.

Read the MySQL guide
Guide

Azure MySQL REST API

HTTP endpoint

Publish a Azure MySQL query as an authenticated JSON endpoint any application can call, with an OpenAPI 3.1 spec and ready-made Postman, Insomnia and Hoppscotch collections. No database port is opened.

Read the MySQL guide
Guide

Azure MySQL to Airtable

Automation platform

Sync Azure MySQL rows into an Airtable base on a schedule, or fetch them inside an Airtable automation script.

Read the MySQL guide
Guide

Azure MySQL to Baserow

Automation platform

Feed a Baserow table from Azure MySQL over the REST endpoint — self-hosted or Baserow cloud.

Read the MySQL guide
Guide

Azure MySQL to SeaTable

Automation platform

Keep a SeaTable base current with Azure MySQL data without exporting a file or exposing the database.

Read the MySQL guide
Guide

Azure MySQL to Smartsheet

Automation platform

Push Azure MySQL results into a Smartsheet grid so plans and reports read from the source system, not last week's export.

Read the MySQL guide
Guide

Azure MySQL to Anvil

Anvil Works · App platform

Back an Anvil Python app with Azure MySQL through the REST endpoint instead of embedding database credentials in the app.

Read the MySQL guide
Supported

Azure MySQL to Power BI

Power Query M

Paste the generated Power Query M into the Power BI Advanced Editor and the report reads live Azure MySQL results over HTTPS — no ODBC driver, no database port opened.

How Power BI works no Azure MySQL walkthrough written yet
Supported

Azure MySQL alerts and reports

Slack · Discord · Email · Webhook

Put a Azure MySQL query on a schedule and have the rows delivered to Slack, Discord, email or a signed webhook — or hold the message until a row count, threshold or percentage change crosses the line you set.

How alerts and reports work no Azure MySQL walkthrough written yet

How it works

5 steps, no inbound firewall change

01

Install the Network Agent somewhere that can reach the server. It only makes outbound connections, so you do not need public access enabled — a VM inside your VNet talking to the private endpoint is the better shape and needs no inbound rule.

02

Take the server name from the Azure portal. It ends in .mysql.database.azure.com, and the card recognises that suffix on sight.

03

Enter the username plainly. Flexible server does not use the user@servername form, and the card stops you if you paste one that does.

04

Leave Use SSL on. It is on by default, and on this card the checkbox is what decides — there is no hostname rule behind it.

05

Save. Microsoft Excel, Google Sheets, Power BI, MCP and REST all read through that one connection, or join it to your other sources in a single read-only statement.

Feature deep-dive

What Azure MySQL gives you

TLS here follows the checkbox, not the hostname

This is the one place where copying the Azure PostgreSQL page across would be wrong, so it is worth stating plainly.

  • Use SSL is on by default, and while it is on the connection is encrypted — the agent asks MySQL for a required TLS session.
  • Turn it off and the agent will attempt an unencrypted connection. Nothing in the MySQL path overrides that based on the hostname, which is exactly where this card differs from Azure PostgreSQL.
  • The reason is structural rather than an oversight: the agent keeps a table of hosted Postgres hostnames it forces TLS for, and there is no MySQL equivalent. The checkbox is the whole mechanism.
  • Encryption is not certificate verification. The agent requires TLS but does not validate the server's certificate chain, so treat it as protection against eavesdropping on the wire rather than proof of what you reached.

Flexible server, and the username trap

Azure has offered MySQL under two shapes, and they disagree about what a username looks like. The card takes a side.

  • This card is built for flexible server. The port defaults to 3306 and the server name ends in .mysql.database.azure.com.
  • Flexible server uses plain usernames. The retired single server offering used the user@servername form, and if you paste one the card tells you to drop the suffix rather than letting Azure reject it later as an authentication failure.
  • That is a better place to catch it. An @servername login fails at the far end as a generic auth error, which sends people to reset passwords that were never wrong.
  • A password with leading or trailing whitespace is flagged too. It is a clipboard artifact and it also fails as an ordinary authentication error.

Private endpoints suit the agent well

Because the agent dials out and never listens, the usual reason to expose a database server does not apply.

  • Put the agent on a VM inside the same VNet and point it at the private endpoint. Public access can stay switched off.
  • There is no inbound firewall rule to add, no IP allowlist to maintain and no VPN between your network and ours. The agent opens the connection outward.
  • Authentication is a username and a password. Microsoft Entra ID is not wired into this connector, so use a MySQL login scoped to read what you intend to expose.
  • A read-only user is worth the two minutes. Query Streams will not write, but the safest way to guarantee that is at the database.
-- Ordinary MySQL, read-only, over TLS
SELECT   c.name,
         COUNT(o.id)   AS orders,
         SUM(o.amount) AS revenue
FROM     customers AS c
JOIN     orders    AS o ON o.customer_id = c.id
WHERE    o.placed_at >= NOW() - INTERVAL 30 DAY
GROUP BY c.name
ORDER BY revenue DESC;

Shared by every database connector

True of every database connector

  • Outbound only — the agent opens one encrypted connection out to Query Streams. No inbound port to forward, no VPN, no IP allowlist, nothing about your database exposed to the internet.
  • Credentials stay put — the database username and password live on the machine you installed the agent on. Query Streams never receives them and cannot reach your database on its own.
  • Read-only, enforced — one statement at a time, SELECT and friends only. A write is rejected on your own machine before it is ever sent to the server, rather than relying on a permission somebody remembered to set.
  • Deploy as many agents as you like — one per site, region or cloud. Every data source they can see arrives in a single dropdown, so nobody has to know which agent hosts what.

What you get once a query is saved

  • Share the capability, not the SQL — a colleague or an outside partner can run your query and change its filters without ever seeing the statement behind it.
  • Filters from either direction — declare them yourself as @variables, or let the connector spot the literal values already sitting in your WHERE clause and offer those as dropdowns.
  • Read it from anywhere — Microsoft Excel, Google Sheets, Power BI, the REST API, AI assistants over MCP, the Query Builder and Nova all read the same saved query.
  • Run several at once — five saved queries into five worksheet tabs, streamed concurrently, however large the results.
  • Join it to anything else you have connected — another database, a business API, or a folder of files, in one read-only statement.

Cross-source SQL

Join Azure MySQL to the rest of your data

One statement can span Azure MySQL and your other connections at once. Each source runs only the part it can, streams the result back, and the join happens centrally — the sources never talk to each other and nothing is copied anywhere.

3 connections · 3 agents

Azure Database for MySQL Managed MySQL
PostgreSQL Relational engine
Stripe Payments & billing

One statement

-- nothing copied, nothing merged, nothing scheduled
SELECT   c.region, COUNT(*) AS orders, SUM(i.amount_due) AS invoiced
FROM     azure_mysql.shopdb.orders1 f
JOIN     pg_crm.public.customers2   c ON c.id = f.customer_id
JOIN     billing.stripe.invoices3   i ON i.customer = c.stripe_id
GROUP BY c.region
ORDER BY invoiced DESC;

The three parts are connection, schema and table — and the connection name is whatever you called it. Illustrative columns; your tables will be your tables. Read-only applies to every piece: SELECT, WITH and EXPLAIN only, with a ceiling on how much any one source may hand over for a single query. How federated queries work

Connection details

What Azure MySQL needs

Host
<server>.mysql.database.azure.com
Port
3306
Driver
MySqlConnector, carried by the agent — nothing to install at the Azure end
Username
Plain, with no @servername suffix. The card rejects the single server form
TLS
Controlled by the Use SSL checkbox, which defaults on. Encrypted while it is on; the certificate chain is not verified. Not forced by hostname on this card
Pooling
None exposed, and the agent applies no pooler adaptations here
Authentication
Username and password. Microsoft Entra ID is not supported by this connector
Saved as
MySQL, with Azure MySQL kept as a badge — there is no connection type called Azure MySQL
Default schema
The database itself. MySQL has no separate schema layer, so a federated reference carries the database name
Not this card
The retired single server offering, and Azure SQL — which is SQL Server and has its own card

The honest version of the TLS story is the useful one. Azure's own guidance is to use TLS, and this card defaults to it, but the agent is not doing anything clever with the hostname to guarantee it — if you clear that checkbox, it will try to connect without encryption. Azure PostgreSQL genuinely is enforced agent-side, and the difference between the two comes down to a lookup table that exists on the Postgres path and not the MySQL one. Saying so is more useful than implying a protection that is not there.

The username check earns its place because of how the failure looks without it. An @servername login against flexible server comes back as a plain authentication error, indistinguishable from a wrong password, so people rotate credentials that were correct all along. Catching it in the form with a sentence naming the cause turns a support conversation into a five-second fix.

For a cross-source query MySQL qualifies by database rather than by schema, so a connection you called azure_mysql reaches a table as azure_mysql.shopdb.orders — the database sits where a schema would on the Postgres cards. It joins to a folder of CSVs, an on-premises system of record or a billing API in one read-only statement — with nothing copied and nothing scheduled.

Vendor documentation: azure.microsoft.com

FAQ

Questions about Azure Database for MySQL

Which tools can read Azure Database for MySQL data through Query Streams?

All of them, from one connection: Excel, Google Sheets, MCP, REST API, Airtable, Baserow, SeaTable, Smartsheet, Anvil, Power BI, scheduled alerts and reports. Connect the database once and every surface reads the same read-only connection — there is no per-tool setup and no second copy of the data.

Do I have to open a firewall port to my Azure Database for MySQL database?

No. The Query Streams Network Agent runs inside your network and opens a single outbound encrypted connection. Nothing listens for inbound traffic, no VPN is required, and the database keeps its existing firewall rules.

Can Query Streams change data in Azure Database for MySQL?

No. The agent enforces read-only at the point of execution — one statement at a time, SELECT and friends only. Credentials stay on the agent and are never sent to Query Streams.

What does Query Streams need to connect to Azure Database for MySQL?

A reachable host, a role and its password — the agent carries the driver, so nothing is installed on the database. Host: <server>.mysql.database.azure.com. Port: 3306. Driver: MySqlConnector, carried by the agent — nothing to install at the Azure end. Username: Plain, with no @servername suffix. The card rejects the single server form.

Can I join Azure Database for MySQL to another database in the same query?

Yes — that is a federated query. One statement can reference Azure Database for MySQL and your other connections at once, written as connection.schema.table. Each source runs only the part it can and streams the result back; the join happens centrally, so the sources never connect to each other and nothing is copied or scheduled. Read-only applies to every piece — SELECT, WITH and EXPLAIN only — and there is a ceiling on how much any one source may hand over for a single query. Federated queries are a plan feature; the federated queries page carries the current source and size limits.

Is connecting Azure Database for MySQL different from connecting MySQL?

Only the connection string. Azure Database for MySQL speaks the MySQL wire protocol, so filters, scheduling, sharing, the Excel and Google Sheets add-ons and the MCP server all behave identically. The Azure MySQL card pre-fills the host, port and SSL settings that provider expects.

Is there a Azure MySQL to Excel guide?

Yes — it is the MySQL guide, and it is correct for Azure Database for MySQL as written. Azure MySQL speaks the MySQL wire protocol, so Azure MySQL to Excel, Azure MySQL to Google Sheets and every other destination follow the same steps. The only Azure MySQL-specific part is the connection string, and the Azure MySQL card fills that in for you.

Put Azure MySQL where the work happens

Install the agent, point it at your database, and pick a destination.

Read-only Outbound only Credentials stay on the agent