Apache2 on Ubuntu, no SELinux.
New server I am trying to install WordPress and I get the error
cannot connect to database
I can log in via the command line using
mysql -u user -p database
just fine and port 3306 is live.
root@localhost:/home/www/services.com# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::80 :::* LISTEN
root@localhost:/home/www/services.com# cat wp-config.php
<?php
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'services.com' );
/** MySQL database username */
define( 'DB_USER', 'services.com' );
/** MySQL database password */
define( 'DB_PASSWORD', '1111' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
/** define( 'AUTH_KEY', 'put your unique phrase here' ); */
/** define( 'SECURE_AUTH_KEY', 'put your unique phrase here' ); */
/** define( 'LOGGED_IN_KEY', 'put your unique phrase here' ); */
/** define( 'NONCE_KEY', 'put your unique phrase here' ); */
/** define( 'AUTH_SALT', 'put your unique phrase here' ); */
/** define( 'SECURE_AUTH_SALT', 'put your unique phrase here' ); */
/** define( 'LOGGED_IN_SALT', 'put your unique phrase here' ); */
/** define( 'NONCE_SALT', 'put your unique phrase here' ); */
define('AUTH_KEY', 'xxxxx');
define('SECURE_AUTH_KEY', 'xxxxx');
define('LOGGED_IN_KEY', 'xxxxx');
define('NONCE_KEY', 'xxxxx');
define('AUTH_SALT', 'xxxxx');
define('SECURE_AUTH_SALT', 'xxxxx');
define('LOGGED_IN_SALT', 'xxxxx');
define('NONCE_SALT', 'xxxxx');
/**#@-*/
$table_prefix = 'wp_';
define( 'WP_DEBUG', true );
/* That's all, stop editing! Happy publishing. */
/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', dirname( __FILE__ ) . '/' );
}
/** Sets up WordPress vars and included files. */
require_once( ABSPATH . 'wp-settings.php' );
root@localhost:/home/www/services.com# ufw status
Status: inactive
full error:
Warning: mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password] in /home/www/services.com/wp-includes/wp-db.php on line 1633
Warning: mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client in /home/www/services.com/wp-includes/wp-db.php on line 1633
The server requested authentication method unknown to the client
Error establishing a database connection
This either means that the username and password information in your wp-config.php file is incorrect or we can’t contact the database server at localhost. This could mean your host’s database server is down.
Are you sure you have the correct username and password?
Are you sure you have typed the correct hostname?
Are you sure the database server is running?
If you’re unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.
I also triple checked for whitespaces or errors in usernames and read numerous other similar post.
How do I get WordPress to connect to MySQL?
The MySQL 8 server you are using has set caching_sha2_password
plugin as a default password plugin.
(see: https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html and https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password)
PHP versions before 7.1.16 or before 7.2.4 don't support caching_sha2_password
.
(see: https://www.php.net/manual/en/mysqli.requirements.php)
You can temporarily fix this by using mysql_native_password
for the current user by using query directly in mysql console:
ALTER USER 'services.com'@'localhost' IDENTIFIED WITH mysql_native_password BY '1111';
Or event better is to find and edit my.cnf (Linux Distros) or my.ini and change the default_authentication_plugin
value to:
default_authentication_plugin=mysql_native_password
and restart the MySQL server.