简介
随着网站或项目的发展,可能会出现服务器配置无法满足要求的情况。如果将Web服务器和数据库分别部署在不同主机上,这样就可以提升网站或项目的整体性能。
在本文中,我们将介绍如何配置Web应用程序使用远程MySQL数据库服务器。我们将以使用WordPress建立网站作为示例,但是配置方法适用于任何需要使用MySQL的项目。
必要条件
- 两台Ubuntu 18.04服务器。每个服务器都有具备sudo权限的非root账户,并启用了UFW防火墙。其中一台服务器部署MySQL,我们将其称为数据库服务器。另一服务器作为网站服务器,我们将其称为Web服务器。
- Nginx和PHP已被安装在Web服务器上。
- MySQL安装已被安装在数据库服务器上。
- Web服务器上安装了Let’s Encrypt的TLS / SSL证书。
第一步— 配置 MySQL服务器 监听远程连接
在网站建设之初,我们都是将网站程序和MySQL服务安装在同一台主机上,但是随着网站内容越来越多,网站的访问用户数量也越来越多,现有的服务器配置已经无法满足发展需要。在这时,我们可以提升服务器配置,来满足不断发展的需要。但是还有另外一种方式,就是将MySQL服务独立安装在另一台服务器上。
大部分MySQL服务器的配置文件都是mysqld.cnf
文件,该文件默认情况下存储在/etc/mysql/mysql.conf.d/
目录中。使用nano编辑器打开文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
在文件中,找到[mysqld]
区块部分:
/etc/mysql/mysql.conf.d/mysqld.cnf
. . .
[mysqld]
. . .
在[mysqld]
区块部分中,查找名为bind-address
的参数。通过调整参数,可以配置要监听本地数据库还是远程数据库。
默认情况下,它被设置为127.0.0.1
,这意味着将MySQL配置为仅监听本地连接。我们需要把它更改为MySQL服务器的外部IP地址。
如果两个服务器都在同一个具有私有IP功能的数据中心,我们可以使用数据库服务器的私有IP。否则,使用服务器的公共IP地址:
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
. . .
bind-address = db_server_ip
因为web服务器通过Internet连接到数据库服务器,所以建议使用加密连接以确保数据安全。如果不对MySQL连接进行加密,则网络上的任何人都可以嗅探Web服务器与数据库服务器之间的敏感信息。要加密MySQL连接,请在bind-address
行之后添加以下行:
/etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
. . .
require_secure_transport = on
. . .
完成后保存并关闭文件。如果使用nano
,先按CTRL+X
,再按Y
然后按ENTER
。
为了使MySQL能够通过SSL连接,我们需要创建一些密钥和证书,执行下面的命令(指定mysql用户的UID)将自动创建:
sudo mysql_ssl_rsa_setup --uid=mysql
要使配置生效,重启MySQL:
sudo systemctl restart mysql
要检查MySQL服务器正在侦听外部接口,请运行netstat
命令:
sudo netstat -plunt | grep mysqld
Output
tcp 0 0 db_server_ip:3306 0.0.0.0:* LISTEN 27328/mysqld
netstat
命令输出了服务器的网络系统的统计信息。此输出向我们显示一个名为mysqld
的进程,已附加到db_server_ip
的3306
端口(标准MySQL端口)上,确认服务器正在侦听正确的端口。
接下来,配置防火墙打开3306端口:
sudo ufw allow mysql
这些就是需要对MySQL服务器进行的所有配置。接下来,将介绍如何设置用来远程访问的数据库和用户配置文件。
第二步 — 设置 WordPress 数据库和远程证书
通过第一步,我们配置了MySQL监听外部IP。现在,我们为WordPress创建一个数据库,以及一对可以访问它的用户。
首先,以MySQL的root用户身份连接到MySQL :
sudo mysql
注意:如果已启用密码认证,需要使用以下命令来访问MySQL Shell:
mysql -u root -p
运行此命令后,将要求输入MySQL的root用户密码,验证成功后进入MySQL提示符状态。
在MySQL提示符下,创建一个名为“WordPress”将使用的数据库:
CREATE DATABASE wordpress;
创建数据库之后,我们将创建一个本地用户和一个与Web服务器IP地址绑定的远程用户。
首先,创建本地用户wpuser,并通过使用localhost来声明此帐户仅匹配本地连接:
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'password';
然后,授予该帐户对wordpress
数据库的完全访问权限:
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
现在,该用户可以对WordPress的数据库执行任何操作,因为该帐户仅匹配本地连接,所以该帐户无法远程使用。接下来,我们创建另一个帐户,该帐户将允许来自Web服务器的连接。。
请注意,必须使用之前在mysqld.cnf
文件中配置的IP地址。如果之前在mysqld.cnf
文件中指定了私有IP,则需要在以下两个命令中使用Web服务器的私有IP。如果之前配置了公网IP,则下面的命令也要使用公网IP。
CREATE USER 'remotewpuser'@'web_server_ip' IDENTIFIED BY 'password';
创建远程帐户后,为其赋予与本地用户相同的权限:
GRANT ALL PRIVILEGES ON wordpress.* TO 'remotewpuser'@'web_server_ip';
最后,执行下面命令使更改生效:
FLUSH PRIVILEGES;
然后,退出MySQL:
exit
第三步 — 测试远程和本地连接
在继续之前,最好先确认一下,我们可以同时从本地计算机(数据库服务器)和Web服务器连接到数据库。
首先,使用新帐户来测试登录数据库服务器:
mysql -u wpuser -p
提示输入密码,输入为此帐户设置的密码。
如果进入MySQL提示符状态,则表明本地连接成功。通过执行“exit”命令退出MySQL:
exit
接下来,登录Web服务器以测试远程连接:
ssh sammy@web_server_ip
为了便于访问远程数据库,我们在Web服务器上安装MySQL客户端工具。
首先,更新本地软件包:
sudo apt update
然后,安装MySQL客户端实用程序:
sudo apt install mysql-client
接下来,使用以下命令连接到数据库服务器:
mysql -u remotewpuser -h db_server_ip -p
必须确保数据库服务器使用了正确的IP地址。如果将MySQL配置为监听私有IP,请使用数据库的私有IP。否则,使用数据库服务器的公共IP。
系统将要求输入remotewpuser帐户的密码。输入后,如果一切正常,将会看到进入MySQL提示符状态。通过以下命令验证是否正在使用SSL连接:
status
如果正在使用SSL连接,则SSL
行将如下面所示:
Output--------------
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper
Connection id: 52
Current database:
Current user: remotewpuser@203.0.113.111
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.18-0ubuntu0.16.04.1 (Ubuntu)
Protocol version: 10
Connection: 203.0.113.111 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 3 hours 43 min 40 sec
Threads: 1 Questions: 1858 Slow queries: 0 Opens: 276 Flush tables: 1 Open tables: 184 Queries per second avg: 0.138
--------------
退出MySQL:
exit
这样,我们已经验证了通过本地和Web服务器可以访问MySQL服务器。
第四步 — 安装 WordPress
接下来,我们将安装Wordpress,并在Wordpress网站上使用远程MySQL数据库。
在Web服务器上,下载最新版本的WordPress:
cd ~
curl -O https://wordpress.org/latest.tar.gz
解压缩文件,这将在我们的Home目录中创建一个wordpress
目录:
tar xzvf latest.tar.gz
在wordpress文件夹中,有一个示例配置文件,通过拷贝的方式创建我们需要的配置文件:
cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php
为了提升网站的安全性,我们需要设置wp-config.php中的一些密钥。我们可以通过wordpress的密钥生成器来生成密钥。
要从WordPress密钥生成器获取密钥,执行以下命令:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
我们将会得到一些如下所示的密钥。将密钥添加到wp-config.php
文件中:
警告! 不要复制此处显示的值!
Output
define('AUTH_KEY', 'L4|2Yh(giOtMLHg3#] DO NOT COPY THESE VALUES %G00o|te^5YG@)');
define('SECURE_AUTH_KEY', 'DCs-k+MwB90/-E(=!/ DO NOT COPY THESE VALUES +WBzDq:7U[#Wn9');
define('LOGGED_IN_KEY', '*0kP!|VS.K=;#fPMlO DO NOT COPY THESE VALUES +&[%8xF*,18c @');
define('NONCE_KEY', 'fmFPF?UJi&(j-{8=$- DO NOT COPY THESE VALUES CCZ?Q+_~1ZU~;G');
define('AUTH_SALT', '@qA7f}2utTEFNdnbEa DO NOT COPY THESE VALUES t}Vw+8=K%20s=a');
define('SECURE_AUTH_SALT', '%BW6s+d:7K?-`C%zw4 DO NOT COPY THESE VALUES 70U}PO1ejW+7|8');
define('LOGGED_IN_SALT', '-l>F:-dbcWof%4kKmj DO NOT COPY THESE VALUES 8Ypslin3~d|wLD');
define('NONCE_SALT', '4J(<`4&&F (WiK9K#] DO NOT COPY THESE VALUES ^ZikS`es#Fo:V6');
复制获得的密钥,然后用文本编辑器中打开配置文件:
nano ~/wordpress/wp-config.php
找到包含如下内容的部分:
/wordpress/wp-config.php
. . .
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');
. . .
删除这些行,然后将刚才复制的内容粘贴到相同的位置。
接下来,输入远程数据库的连接信息。这些配置行位于文件的顶部,将db_server_ip替换为MySQL服务器的IP地址:
/wordpress/wp-config.php
. . .
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'remotewpuser');
/** MySQL database password */
define('DB_PASSWORD', 'password');
/** MySQL hostname */
define('DB_HOST', 'db_server_ip');
. . .
最后,在文件中的任何位置添加以下行,声明WordPress要使用SSL连接到远程MySQL数据库:
/wordpress/wp-config.php
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
Save and close the file.
保存并关闭文件。
接下来,将wordpress文件夹中的所有内容复制到网站根目录下。-a
参数用于保留原权限设置:
sudo cp -a ~/wordpress/* /var/www/html
Ubuntu默认的Web服务器用户为www-data,将网站根目录的所有权进行相应变更:
sudo chown -R www-data:www-data /var/www/html
接下来,通过基于Web的Wordpress安装程序,进行下面的安装工作。
第五步 — 通过WEB界面设置 WordPress
通过浏览器访问网站的域名(或公共IP地址):
http://example.com
我们将看到WordPress安装程序的语言选择界面:
提交信息后,就可以使用刚创建的帐户登录WordPress的管理后台了。
总结
本文以Wordpress网站为例,介绍了如何为网站服务器配置一个远程MySQL数据库。本文讲述的配置方法,也适用于除Wordpress意外的其他Web应用程序。
作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/set-up-remote-database-to-ubuntu-18-04/