在Ubuntu 18.04上使用MySQL设置远程数据库

在Ubuntu 18.04上使用MySQL设置远程数据库
在Ubuntu 18.04上使用MySQL设置远程数据库

简介

随着网站或项目的发展,可能会出现服务器配置无法满足要求的情况。如果将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_ip3306端口(标准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帐户的密码。输入后,如果一切正常,将会看到进入My​​SQL提示符状态。通过以下命令验证是否正在使用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 install screen

提交信息后,就可以使用刚创建的帐户登录WordPress的管理后台了。

总结

本文以Wordpress网站为例,介绍了如何为网站服务器配置一个远程MySQL数据库。本文讲述的配置方法,也适用于除Wordpress意外的其他Web应用程序。

原创文章,作者:牛奇网,如若转载,请注明出处:https://www.niuqi360.com/lamp-config/set-up-remote-database-to-ubuntu-18-04/

发表评论

登录后才能评论