Database connection issues
This page collects the database problems users actually hit, phrased the way you see them. Find your symptom in the headings below, read why it happens, and apply the fix. For general connection instructions, see Connect to your database.
MySQL: “Access denied for user ‘root’” (ERROR 1045) through the public host
Section titled “MySQL: “Access denied for user ‘root’” (ERROR 1045) through the public host”This is the single most common MySQL issue on PandaStack. You connect to your database’s public endpoint <name>.db.pandastack.app with the username root and the correct password, and MySQL still rejects you with ERROR 1045 (28000): Access denied.
Why this happens. Through the public host, the username must be root.<database-name> — for example root.myapp-a1b2c3 — not plain root. MySQL clients do not send the server name (SNI) during the TLS handshake, so PandaStack’s database proxy cannot tell which database you meant from the hostname alone. Instead, it routes your connection by the suffix of the username. Plain root carries no database name, so the proxy cannot route it — and the connection is denied even when the password is right.
Fix. Use the root.<database-name> username form:
mysql -h myapp-a1b2c3.db.pandastack.app -u root.myapp-a1b2c3 -pThe connection string shown on your database page in the dashboard already uses the correct root.<name> form — copy it as-is instead of assembling one by hand.
PostgreSQL: connection fails without SSL
Section titled “PostgreSQL: connection fails without SSL”Your PostgreSQL client connects with the plain postgres username, but the connection is refused or errors out when SSL is off.
Why this happens. PostgreSQL behaves differently from MySQL here: PostgreSQL clients do send SNI during TLS, so the proxy can route by hostname and the plain postgres username works through the public host — no postgres.<name> suffix is needed. However, TLS is required through the public endpoint, so a connection attempt without SSL fails.
Fix. Add sslmode=require to your connection string or client configuration and connect with the plain username.
The password doesn’t work, even though I copied it from the dashboard
Section titled “The password doesn’t work, even though I copied it from the dashboard”You typed or copied the password shown on the database page and the server rejects it.
Why this happens. The password displayed on the page is masked — if you select and copy the visible **** characters, you are copying the mask, not the real password.
Fix. Use the Copy button on the connection string. It copies the full string with the real password embedded, not the masked placeholder. You can also reveal the password on the database page if you need to see it in plain text.
My free database is stopped, or has disappeared
Section titled “My free database is stopped, or has disappeared”A database on the Free plan stops accepting connections, shows as suspended, or is no longer listed at all.
Why this happens. Free-tier databases follow a fixed lifecycle: they are suspended after 30 days, and permanently deleted 14 days after that. You receive in-app and email notifications before each step, so check your inbox and dashboard notifications if a database went quiet.
Fix. See Database lifecycle for the exact timeline and how to keep a free database running. If the database has already been permanently deleted, it cannot be recovered — you will need to create a new one.
”Too many connections”
Section titled “”Too many connections””Your app or client fails with a too-many-connections error, often intermittently under load.
Why this happens. Connection limits are set per plan:
| Plan | Connection limit |
|---|---|
| Free | 50 |
| Pro | 300 |
| Premium | 1000 |
| Enterprise | unlimited |
Applications that open a new connection per request — serverless and edge runtimes are especially prone to this — exhaust the limit quickly.
Fix. Use a connection pool in your application so requests share a small number of long-lived connections. Serverless/edge runtimes especially need pooling, because each invocation can otherwise open its own connection. If your workload genuinely needs more concurrent connections, upgrading your plan raises the limit.
My PandaStack app can’t reach the database
Section titled “My PandaStack app can’t reach the database”Your app is deployed on PandaStack, the database is running, but the app fails to connect.
Why this happens. A project and a database are independent resources — deploying them side by side does not wire them together. The app only receives the connection details once the database is linked to the project.
Fix. Link the database to the project: open the project page, go to Databases, and link your database. PandaStack injects DATABASE_URL into the app’s environment and redeploys it automatically. See Connect to your database for details.
I need to restore data or roll back to a backup
Section titled “I need to restore data or roll back to a backup”You deleted or corrupted data and want to get back to an earlier state.
Why this happens. PandaStack takes daily backups of your database, retained per plan:
| Plan | Backup retention |
|---|---|
| Free | 7 days |
| Pro | 15 days |
| Premium | 30 days |
Fix. On paid plans, you can restore your database in place from a backup. See Backups & restore for how restores work and what to expect.
The Metrics section shows nothing
Section titled “The Metrics section shows nothing”You open your database’s Metrics section expecting connection counts and query rates, but see no data — only an upgrade prompt.
Why this happens. Engine metrics (connections, QPS, cache hit ratio) are a paid feature. On the Free plan the metrics section shows an upgrade teaser instead of charts.
Fix. Upgrade to a paid plan to enable engine metrics for your databases. See Database metrics for what is collected and how to read it.
Still stuck?
Section titled “Still stuck?”If none of the scenarios above match, check your application’s logs for the exact error text, and email support@pandastack.io with your database name and the error message — the more of the raw error you include, the faster we can help.