Configure WP to use a Remote Database

WordPress is the most popular content management system (CMS) based on PHP and MySQL. When your WordPress CMS grows in traffic and you have outgrown your current server resources, a professional solution is to host your database on a separate database server.

With this solution, you can optimize your database and your web server independently and both servers can grown on it’s own machine. In this tutorial we will guide you on how to configure WordPress to use a remote database, on a CentOS 7 based VPS.

Prerequisite:

In order to run WordPress on your CentOS 7 VPS and configure it to use a remote database, we need the following requirements pre-installed:

  • A Web VPS on which we will install the WordPress instance.
  • A Database VPS with MariaDB or MySQL installed on it. The database will be hosted on this VPS.

WordPress requires the following:

  • Web server: Apache, Nginx
  • PHP version 7.2 or newer, with JSON support, mbstring, zip and GD2 extensions.
  • MariaDB version 10.0 or greater or MySQL database server version 5.6 or newer

Step 1: Log in via SSH on both servers:

Log in to each VPS via SSH as user root

ssh roo@IP_Address -p Port_number

Step 2: Update all packages

Once you are logged, run the following command on both servers to make sure that all installed RPM packages are up to date

yum -y update

Step 3: Install MariaDB server on the Database VPS

yum -y mariadb mariadb-server

Step 4: Install LAMP stack on a Web VPS

Go through the steps in the URL to install

https://www.coimbatorewebhosting.com/blog/easy-steps-to-install-and-configure-lamp-in-centos-7/

Next, install PHP 7.2 along with the required PHP extensions:

yum -y install php php-cli php-mbstring php-gd php-mysqlnd php-xmlrpc php-xml php-zip php-curl

And finally, complete the LAMP installation by installing MariaDB client package:

yum -y install mariadb mariadb-server

Start the service and set it to start on reboot

systemctl start mariadb
systemctl enable mariadb

To accept remote connections

Edit the MariaDB configuration file (/etc/my.cnf.d/server.cnf) and change the following line:

bind-address = xxx.0.0.1

with:

bind-address = web_server_IP_address

Do not forget to replace ‘web_server_IP_address’ with the public IP of the web server.

If you want to configure MariaDB to listen on all interfaces on the web VPS, set:

bind-address = 0.0.0.0

Restart MariaDB for the changes to take effect:

systemctl restart mariadb.service

Step 5: Create a MariaDB database for WordPress on the Database VPS

Log in to MariaDB console with the root user account:

# mysql -u root -p

Create a new MariaDB database for WordPress using the following query:

mysql> CREATE DATABASE wpdb;

Create a new MariaDB user for WordPress using the following query:

mysql> CREATE USER 'wpuser'@'localhost';
mysql> CREATE USER 'wpuser'@'database_VPS_IP';

Then execute the following query to add a separate user for WordPress that will interact with the MariaDB database:

mysql> GRANT ALL PRIVILEGES ON wpdb.* to 'wpuser'@'localhost' IDENTIFIED BY '5tr0ng_Pa55w0rd';
mysql> GRANT ALL PRIVILEGES ON wpdb.* to 'wpuser'@'database_VPS_IP' IDENTIFIED BY '5tr0ng_Pa55w0rd';

Do not forget to replace database_VPS_IP with the actual IP address of the database VPS .

Execute the following command to apply the privileges we set:

mysql> FLUSH PRIVILEGES;

Now we can exit the MariaDB session:

mysql> quit

remote database

Step 6: Configure the MariaDB server on database VPS to listen on public IP (or all interfaces)

Edit the MariaDB configuration file (/etc/my.cnf.d/server.cnf) and change the following line:

bind-address = xxx.0.0.1

with:

bind-address = database_server_IP_address

Or, configure MariaDB to listen on all interfaces on the database VPS:

bind-address = 0.0.0.0

Restart MariaDB for the changes to take effect:

systemctl restart mariadb.service

Step 7: Install WordPress on the Web VPS

Download the latest WordPress version available at https://wordpress.org/download/ and extract it in a directory on your server:

wget https://wordpress.org/latest.zip

unzip -d /var/www/html/ latest.zip

Set proper permissions on WordPress files and directories:

chown apache:apache -R /var/www/html/wordpress/

Rename wp-config-sample.php WordPress configuration file to wp-config.php:

mv /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php

Edit the wp-config.php file and modify the following lines

vi /var/www/html/wordpress/wp-config.php
/** The name of the database for WordPress */
define('DB_NAME', 'wpdb');

/** MySQL database username */
define('DB_USER', 'wpuser');

/** MySQL database password */
define('DB_PASSWORD', '5tr0ng_Pa55w0rd');

/** MySQL hostname */
define('DB_HOST', 'database_VPS_IP');

Step 8: Configure Apache to serve WordPress

Now we will have to setup the Apache configuration so it can serve the WordPress directory. Add the contents below in the /etc/httpd/conf.d/wordpress.conf file using vi or your favorite editor:

# vi /etc/httpd/conf.d/wordpress.conf

Add the following lines:

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/html/wordpress
ServerName your-domain.com
ServerAlias www.your-domain.com

Alias /matomo “/var/www/html/wordpress/”
<Directory /var/www/html/wordpress/>
Options +FollowSymlinks
AllowOverride All

</Directory>

ErrorLog /var/log/httpd/wordpress-error_log
CustomLog /var/log/httpd/wordpress-access_log common
</VirtualHost>

Save the changes and restart Apache for the changes to take effect:

systemctl restart httpd

Open http://your-domain.com in your favorite web browser and finish the WordPress installation.

You have successfully configured WordPress to use a remote database on a CentOS 7server.