Connecting MySQL to Looker Studio

Looker Studio talks to MySQL out of the box, so this takes about five minutes. Whether it should talk to that particular MySQL server is the more interesting question.

The part everyone underestimates

The connection is trivial: host, port, database, user, password, done. What's easy to miss is that you've just made your production database the backend of a reporting tool. Looker Studio queries when a report opens, when someone changes a filter, and when the cache expires — and it does that for every person holding the link.

There's also a firewall decision buried in the setup. Looker Studio connects from Google's infrastructure, so your database has to accept connections from a broad published range of addresses. That's a materially different security posture from a database only your application can reach, and it's easy to agree to while thinking about charts.

Then the practical annoyance: a dashboard pointed at raw tables gets slower as the tables grow, and MySQL's type quirks surface as chart errors. Zero-dates like '0000-00-00' aren't valid timestamps anywhere outside MySQL, and they turn into broken date dimensions rather than a clear error message.

Three ways to connect it

All three give Looker Studio a database to read. They differ in which database, and in what a slow report can cost you.

Straight at production

The built-in MySQL connector, pointed at your live server with a read-only user.

  • Free, immediate, nothing else to run
  • Always exactly current
  • Production has to be reachable from Google's IP ranges
  • Report traffic competes with your application
  • One expensive chart can degrade the service for real users

A read replica

Stand up a MySQL replica and point Looker Studio at that instead.

  • Textbook solution — reporting load is fully isolated
  • Near-real-time, and you keep the MySQL connector
  • Another server to provision, secure, monitor and pay for
  • Often unavailable on managed or shared hosting
  • The type quirks and raw schema come with it unchanged

An isolated PostgreSQL copy

BeQuery

BeQuery maintains a verified PostgreSQL copy of the MySQL database, read by Looker Studio's built-in PostgreSQL connector.

  • Reporting load lands on the copy, permanently and by construction
  • MySQL type quirks resolved during the clone — zero-dates don't become broken dimensions
  • Row counts verified against the source each sync, so the copy isn't quietly missing data
  • Read-only credentials scoped to one schema: SELECT only, 5 concurrent connections, 30-second statement timeout
  • External credentials are a Cloud or Enterprise feature
  • Scheduled sync, so the report trails the source by your sync interval

Connecting it, step by step

  1. 1

    Connect your store to BeQuery

    Read-only MySQL credentials, host and port. BeQuery clones the database into an isolated PostgreSQL copy, verified against the source on every sync.

  2. 2

    Create a read-only external credential

    In Settings → External connections, generate a PostgreSQL user scoped to your team's schema. It is SELECT-only: it cannot write, alter or drop anything, and it can't see another workspace. External connections are available on the Cloud and Enterprise plans.

  3. 3

    Add a PostgreSQL data source in Looker Studio

    Add data → PostgreSQL → paste the host, database, user and password. No community connector, no OAuth dance, nothing to install: PostgreSQL is one of Looker Studio's built-in connectors.

  4. 4

    Build on a custom query, not a whole table

    Choose the custom query option and paste SQL that already aggregates. Your report then reads a few hundred rows instead of scanning your largest table on every interaction — which keeps dashboards fast and stays inside the 30-second statement timeout on external credentials.

Point it straight at production, or at a copy?

Both are defensible. The deciding factor is usually how many people hold the link and how much your production database has to lose.

Direct is defensible when

  • A small database, a private report, and you accept the firewall change
  • The numbers must be live to the second for an operational reason
  • A replica already exists and reporting is what it's for

Put a copy in between when

  • The report is shared, embedded, or opened by people you don't control
  • Production is the same server your customers depend on
  • You want dashboards to be free to grow without a capacity conversation

Common questions

Does Looker Studio support PostgreSQL as well as MySQL?

Yes — PostgreSQL is one of the built-in connectors, on equal footing with MySQL. That's what makes the clone route work without any export step: BeQuery's copy is an ordinary PostgreSQL database, so Looker Studio reads it with a stock connector, no community add-on and no subscription.

Can't Looker Studio just connect to my MySQL database directly?

It can — MySQL is a built-in connector, and for a small shop that's a legitimate choice. What you're accepting is that your production database has to be reachable from Google's IP ranges, and that every viewer opening the report, and every scheduled refresh, runs queries against the server your customers are checking out on. It works fine until the report gets popular or someone builds a dashboard with twelve charts on it.

Do I need to export anything?

No, and this is the real difference from the BigQuery route. Looker Studio speaks PostgreSQL natively, and BeQuery's clone is a real PostgreSQL database — so the report reads the copy directly. There's no load step to schedule and nothing to keep in sync beyond the sync you already have.

Which plan do I need?

External PostgreSQL credentials — the thing Looker Studio connects with — are available on the Cloud (pay-as-you-go) and Enterprise plans. The clone itself, the SQL editor and the in-app dashboards work on every plan, including the free tier.

How fresh will the dashboard be?

As fresh as your last sync, plus whatever caching you leave on in Looker Studio. Sync runs nightly on lower plans and down to roughly every minute on higher ones. For a report someone opens each morning, nightly is usually what people settle on anyway.

See it on your own store first

Free tier, no credit card, read-only access. Production is never written to — and you can explore the demo store before connecting anything.