Database Connection Errors
Drupal Pressflow core, WordPress core, and the causes and solutions for database connection errors.Discuss in our Forum Discuss in Slack
This section provides information on database connection errors.
There is an issue connecting to the Pantheon database if your site suddenly reverts to
install.php, or you get database connection errors like the one below:
Can’t connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'...).
There are two common causes for this issue:
- Overwriting core
- Using non-standard bootstraps
Drupal Pressflow Core
Pantheon provides Pressflow core as the underlying basis for all Drupal sites. This is important for performance reasons, but also to load configuration out of the server environment. You can run Drupal on Pantheon with no
settings.php file, though there are still plenty of great uses for this file.
You can overwrite the Pressflow core by unpacking a tarball from drupal.org "over" your Git checkout and then pushing the change, or by updating core via Drush. However, your site will be unable to read the environmental configuration.
includes/bootstrap.inc file to determine whether this is the case. Verify that you there is code in the
drupal_settings_initialize() function which loads data from
If no code is present in the function, go to your recent changes and revert or remove whatever overwrote your core.
Apply one-click updates within the Site Dashboard on Pantheon or via Terminus. Do not update core using the WordPress Dashboard or WP-CLI; you will overwrite your core. Refer to Scope of Support and WordPress and Drupal Core Updates for more information.
Drupal Non-Standard Bootstraps
Some modules, like the domain.module, change Drupal's standard bootstrap process. These modules typically require you to add an include file to the end of your
settings.php, which causes an escalated bootstrap earlier than normal. This allows the module to perform some higher level functions like checking whether a user has access.
However, because the Pantheon environment data is not loaded at this time, any bootstrap to the database level will fail since there is no valid connection information. In this case, include a snippet in your
settings.php before the module's include call.
Drupal 7 Style
# Include any other settings.php magic here. extract(json_decode($_SERVER['PRESSFLOW_SETTINGS'], TRUE)); include './sites/all/modules/domain/settings.inc';
If you use any other advanced
settings.php tricks (e.g. enabling Object Cache), you will need to do this before the snippet in D7 to ensure you have a consistent
Base Table or View Not Found
This error may occur during a database clone, restore, or import. A standard MySQL import happens sequentially and in alphabetical order from A to Z. If you access the site before the operation is complete, Drupal will try to bootstrap, and the MySQL import may only be at the table letter G. The result is the "semaphore does not exist" error.
Drupal will be able to bootstrap correctly when the process is complete. Wait for the process to complete and the error will disappear. If the site is locked down from web visitors, there may still be a backend process such as our healthcheck process pinging the database trying to obtain a lock via the semaphore table.
This error shouldn’t cause any issues for your site:
Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'pantheon.semaphore' doesn't exist' in /srv/bindings/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/code/includes/database/database.inc:2171 Stack trace: #0 /srv/bindings/7xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/code/includes/database/database.inc(2171): PDOStatement->execute(Array) #1 /srv/bindings/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/code/includes/database/database.inc(683): DatabaseStatementBase->execute(Array, Array) #2 /srv/bindings/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/code/includes/database/database.inc(2350): DatabaseConnection->query('SELECT expire, ...', Array, Array) #3 /srv/bindings/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/code/includes/lock.inc(167): db_query('SELECT expire, ...', Array) #4 /srv/bindings/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/code/includes/lock.inc(146): lock_may_be_available('schema:runtime:...') #5 /srv/bindings/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/code/includes/bootstrap.inc(433): ...