MySQL logo

Relational engine

Connect MySQL to Excel, Google Sheets, AI and REST

The world's most widely deployed open-source database. Connect to a local instance, Amazon RDS, Cloud SQL, or any MySQL-wire host.

One connection, every surface

Where your MySQL data can go

Query Streams reads a MySQL database as live SQL from Microsoft Excel, Google Sheets, Power BI, AI assistants over MCP and a REST endpoint. A self-hosted agent connects out from inside your network on port 3306 — no inbound port, no VPN, no IP allowlist. It ships the modern MySqlConnector driver, so MySQL 8's default caching_sha2_password login works with nothing extra installed, and legacy '0000-00-00' dates that make other tools throw are read as empty rather than fatal.

  1. For your team, vendors and partners
  2. MySQL to Excel Microsoft Excel · Excel add-in

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

    MySQL guide
  3. MySQL to Google Sheets Sheets add-on

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

    MySQL guide
  4. Ask Nova about MySQL Nova AI · text to SQL

    Ask a question in plain English. Nova already knows your MySQL tables, writes and runs the SQL, explains the answer and charts it — no query to write, no credentials to hand over.

    How Nova works
  5. MySQL to Data Viewer result sharing · team, vendors, partners · phone, tablet, desktop

    Share a live MySQL result with anyone — a colleague, a vendor, a partner — as a bookmarkable grid that re-runs fresh when opened, on a phone, a tablet or a desktop. They see the results, never the SQL or the credentials.

    How the Data Viewer works
  6. For apps and systems
  7. MySQL REST API HTTP endpoint

    Publish a 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.

    MySQL guide
  8. MySQL to Power BI Power Query M

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

    How Power BI works
  9. MySQL to Airtable Automation platform

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

    MySQL guide
  10. MySQL to Baserow Automation platform

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

    MySQL guide
  11. MySQL to SeaTable Automation platform

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

    MySQL guide
  12. MySQL to Smartsheet Automation platform

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

    MySQL guide
  13. MySQL to Anvil Anvil Works · App platform

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

    MySQL guide
  14. For AI tools
  15. MySQL MCP server Claude, Cursor and MCP clients

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

    MySQL guide
  16. Delivered to people
  17. MySQL alerts and reports Slack · Discord · Email · Webhook

    Put a 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

How it works

5 steps, no inbound firewall change

01

Install the Network Agent on a machine that can already reach the server — the same office, the same VPC, the same host if you like.

02

Enter host, port, database, user and password. Turn TLS on if the server offers it; client certificates are accepted if it requires them.

03

Pick the databases worth exposing. The agent reads the table and column layout once so the Query Builder can offer real names.

04

Write read-only SQL, or let Nova write it. Filters can be @variables you declare or literal values the connector spots in your WHERE clause.

05

Read the saved query from Excel, Sheets, Power BI, MCP or REST — and share it with someone who never sees the statement.

Feature deep-dive

What MySQL gives you

The awkward parts of real MySQL data

Long-lived MySQL schemas accumulate things the specification permits and most tools cannot cope with. These are handled rather than avoided.

  • Zero dates — '0000-00-00' is legal in MySQL and fatal in most clients. It is read as an empty date instead of taking the whole query down.
  • tinyint means tinyint — tinyint(1) is the conventional boolean and arrives as true or false, but a plain tinyint stays a small integer. Nothing guesses that your 0-to-9 status column is a yes/no.
  • BIT columns arrive as integers, not booleans, because a BIT can be wider than one bit.
  • Exact decimals — a DECIMAL column keeps the precision and scale you declared. Money does not become a float on the way out.
  • utf8mb4 by default, so emoji and the full range of CJK characters survive.

Login, the way MySQL 8 does it

MySQL 8 made caching_sha2_password the default and left a trail of tools that only speak the older mysql_native_password. The agent carries MySqlConnector rather than the legacy driver, so both work without you switching your server back to the old scheme for the sake of a reporting tool.

  • TLS is a checkbox, off until you turn it on. Switched on, the connection is required to be encrypted rather than merely preferred, and a CA, client certificate and key can be supplied where the server demands them.
  • Cross-database joins work on one connection — if the login can see two databases on the same server, one query can read both.

Federated joins use the database name

MySQL has no schema layer between the database and the table, so in a cross-source query the middle part of a three-part name is the database itself.

-- shop_prod is the connection, sales is the MySQL database
SELECT   c.region, COUNT(*) AS orders
FROM     shop_prod.sales.orders   o
JOIN     pg_crm.public.customers  c ON c.id = o.customer_id
GROUP BY c.region

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 MySQL to the rest of your data

One statement can span 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

MySQL Relational engine
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     shop_prod.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 MySQL needs

Port
3306 by default, any port accepted
Encryption
TLS optional — off unless you tick it, required rather than preferred once you do. CA, client certificate and key accepted
Credentials
A database username and password, held on the agent. Query Streams never receives them
Driver
MySqlConnector 2.5.0, bundled — MySQL 8's caching_sha2_password login needs no extra setup
Character set
utf8mb4, so emoji and full CJK survive the round trip
Legacy dates
'0000-00-00' is read as an empty date instead of throwing
Cross-database
One query may read two databases on the same server, if the login can see both
Timeouts
30 seconds to connect, 30 seconds per statement while streaming
Read-only
Enforced on your own machine before the statement is sent to the server

Nothing is copied or scheduled. The agent runs your SELECT against the live server and streams the rows through, so a spreadsheet refreshed at 4pm shows the database at 4pm rather than whatever last night's extract captured.

In a cross-source query the middle part of a three-part reference is the MySQL database name, because MySQL has no separate schema layer. A connection called shop_prod reading the sales database is written shop_prod.sales.orders.

Vendor documentation: www.mysql.com

FAQ

Questions about MySQL

Which tools can read 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 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 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 MySQL?

A reachable host, a role and its password — the agent carries the driver, so nothing is installed on the database. Port: 3306 by default, any port accepted. Encryption: TLS optional — off unless you tick it, required rather than preferred once you do. CA, client certificate and key accepted. Credentials: A database username and password, held on the agent. Query Streams never receives them. Driver: MySqlConnector 2.5.0, bundled — MySQL 8's caching_sha2_password login needs no extra setup.

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

Yes — that is a federated query. One statement can reference 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.

Put 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